tree
tree
一言で言うと
枝分かれする階層構造を表すデータ構造、または同名の Linux コマンド。両方とも「根から枝へ」というイメージで使う。
もう少し詳しく
一言で言うと
枝分かれする階層構造を表すデータ構造、または同名の Linux コマンド。両方とも「根から枝へ」というイメージで使う。
詳細
「tree」はソフトウェアの世界で 2 つの意味を持ちます。1 つはデータ構造としての木で、ルート (根) から子ノードがぶら下がる階層型の集まりです。ファイルシステム、DOM、構文解析木、データベースのインデックス (B-tree) など、現場のあらゆる場所に登場します。
もう 1 つはLinux/macOS の tree コマンドで、ディレクトリ構造をテキストでビジュアル表示します。brew install tree でインストールできます。同じ「枝分かれ」の発想なので、データ構造の木が頭にあるとコマンドの出力もそのまま読めます。
具体例
データ構造としての木 (TypeScript)
type TreeNode = {
value: string;
children: TreeNode[];
};const root: TreeNode = {
value: "root",
children: [
{ value: "src", children: [{ value: "index.ts", children: [] }] },
{ value: "package.json", children: [] },
],
};
// 深さ優先で全ノードを訪問
function walk(node: TreeNode, depth = 0) {
console.log(" ".repeat(depth) + node.value);
node.children.forEach((c) => walk(c, depth + 1));
}
walk(root);
tree コマンド
$ tree -L 2 -I "node_modules|dist"
.
├── package.json
├── src
│ ├── index.ts
│ └── utils
└── tests
よく使うオプションは次のとおりです。-L N で深さ制限、-I "pat" でパターン除外、-a で隠しファイルも表示、-d でディレクトリのみ表示、-J で JSON 出力。
使い分け / トレードオフ
データ構造の木はリスト (一直線) より検索が速い場面 (二分探索木、B-tree) で選びます。逆に挿入順序を保ちたい・全件走査が主な用途ならリストや配列のほうがシンプルです。
ディレクトリ可視化は GUI なら macOS Finder のリスト表示で代替できますが、CI ログや README に貼り付けるときは tree コマンドのテキスト出力が圧倒的に使いやすいです。