tree コマンド入門 - ディレクトリ構造をツリー表示する

tree コマンド入門 - ディレクトリ構造をツリー表示する

この記事で解決できること

  • treeディレクトリ構造を一目で把握 できるようになる
  • -L深さを制限 して、巨大なフォルダでも見やすく表示できる
  • -d -a -I必要なものだけ を絞り込める
  • ls の繰り返しから 構造の可視化 に切り替えられる

対象読者:Linux 入門者、lscd でフォルダの中を行き来するのに疲れた方

導入:リナの「ls 迷子」事件

リナ: ライニー先輩、プロジェクトのフォルダがどんな構造になってるか確認したくて、ls して cd して、また ls して...ってやってるんですけど、全体像がぜんぜん頭に入ってこないんです。
ライニー先輩: あー、その「ls 迷子」ね。フォルダを一段ずつ潜って戻ってを繰り返すと、いま自分がどこにいるのか分からなくなるよね。
リナ: そうなんです! 紙に書き出したくなります。
ライニー先輩: その「紙に書き出した図」を一発で出してくれるのが tree コマンドだよ。ディレクトリの中身を 枝分かれの図 で表示してくれる。今日はこれを覚えよう。

結論を先に

  • tree = ディレクトリ構造を ツリー(枝分かれ図)で可視化 するコマンド
  • そのまま tree で現在地以下を表示、tree パス で場所を指定
  • 巨大フォルダは tree -L 2(深さ制限)と tree -I 'node_modules'(除外)が必須

1. tree とは何か?

結論: tree はディレクトリの中身を枝分かれの図で表示するコマンド。ls を何度も叩かなくても階層構造が一目で分かる。

リナ: tree って ls と何が違うんですか?
ライニー先輩: lsその場所の中身だけ を一覧にする。treeその下の階層をぜんぶ辿って、枝分かれの図で見せてくれるんだ。
リナ: つまり ls を全フォルダで自動的に実行してくれるみたいな?
ライニー先輩: イメージはそれで合ってる。しかも親子関係が線でつながって見えるから、「この設定ファイルはどのフォルダの下にあるか」が瞬時に分かる。

実際に表示するとこんな感じになる。

.
├── README.md
├── src
│   ├── index.js
│   └── utils
│       └── format.js
└── tests
    └── index.test.js

3 directories, 4 files

図の読み方

  • ├── └──:その階層にあるファイル / フォルダ(└── は最後の要素)
  • :枝が下に続いていることを示す縦線
  • インデント(字下げ)の深さ=階層の深さ
  • 最後の行:ディレクトリ数とファイル数の合計

2. インストール

結論: tree は標準では入っていないことが多い。apt / dnf でインストールする。

リナ: さっそく使いたいです! どうやって入れるんですか?
ライニー先輩: ディストリビューションによっては最初から入っていないことがある。tree と打って「command not found」が出たらインストールしよう。
# Ubuntu / Debian 系
$ sudo apt install tree

# RHEL / Fedora 系
$ sudo dnf install tree

# macOS(Homebrew)
$ brew install tree

パッケージ名はどのディストリビューションでも tree で共通。インストール後、tree --version でバージョンを確認できる。

3. 基本の使い方

結論: 引数なしの tree でカレントディレクトリ以下を表示。tree パス で対象の場所を指定する。

ライニー先輩: 使い方はとてもシンプル。まずは引数なしで叩いてみよう。

カレントディレクトリを表示

# いまいる場所の中身をツリー表示
$ tree

場所を指定して表示

# 指定したディレクトリを表示
$ tree /etc

# ホームディレクトリを表示
$ tree ~
リナ: tree って打っただけで、フォルダの奥の奥まで全部出てきました! ...ちょっと出すぎて画面が流れちゃいましたけど。
ライニー先輩: そう、そこが最初の落とし穴。treeデフォルトで一番下の階層まで全部 辿るんだ。だから大きいフォルダでそのまま叩くと、画面が滝みたいに流れる。次はそれを抑える方法を覚えよう。

4. 深さを制限する(-L)

結論: tree -L 数字 で表示する階層の深さを制限できる。巨大なフォルダはまず -L 1-L 2 で全体像を掴む。

リナ: さっきみたいに出すぎないようにするには、どうしたらいいですか?
ライニー先輩: -L(Level)を使う。-L 2 なら 2 階層目まで しか表示しない。これで全体像だけサッと確認できる。
# 1階層だけ(直下の中身のみ、ls に近い)
$ tree -L 1

# 2階層まで
$ tree -L 2 /var/log
/var/log
├── apt
│   ├── history.log
│   └── term.log
├── journal
├── syslog
└── dpkg.log

2 directories, 4 files

-L の使いどころ

  • 初めて見るフォルダは tree -L 1-L 2浅いところから 深掘りする
  • 深さは 1 以上の整数で指定(-L 0 はエラー)
  • 「全体の地図」が欲しいときは浅く、「特定フォルダの詳細」は深く

5. 表示するものを絞り込む

結論: -d でディレクトリのみ、-a で隠しファイルも表示、-I で不要なフォルダを除外できる。

ライニー先輩: 深さの次は「何を表示するか」を絞る方法。これを覚えると tree が一気に実用的になるよ。

ディレクトリだけ表示(-d)

# フォルダ構造だけを把握したいとき
$ tree -d -L 2
リナ: ファイルが多すぎて、フォルダの骨組みだけ見たいときに便利そう!
ライニー先輩: そのとおり。-d(directory)はファイルを全部隠して フォルダの骨格だけ 見せてくれる。プロジェクトの構成を説明するときに重宝するよ。

隠しファイルも表示(-a)

# .git や .env などドット始まりも表示
$ tree -a -L 1

tree はデフォルトで隠しファイルを表示しない

.bashrc.git のような ドット(.)で始まるファイル は、-a(all)を付けないと表示されない。「設定ファイルが見当たらない」ときは -a を付け忘れていないか確認しよう。

不要なフォルダを除外(-I)

# node_modules を除外して表示
$ tree -I 'node_modules'

# 複数を | で区切って除外
$ tree -I 'node_modules|.git|dist'
リナ: node_modules って中身が何万ファイルもあって、tree すると永遠に流れ続けるやつですよね...。
ライニー先輩: それ! だから -I(Ignore)で除外するのが定番。パターンは |(パイプ)で区切れば複数指定できる。node_modules .git dist あたりは除外の常連だね。

逆に「これだけ見たい」なら -P

特定のパターンだけ表示したいときは -P(Pattern)を使う。tree -P '*.js'.js ファイルだけを残せる。空のフォルダが邪魔なときは --prune を併用すると、該当ファイルを含まないフォルダが消えてスッキリする。

6. 見やすく・サイズ付きで表示する

結論: -F で種類の記号付き、-h --du でディレクトリの合計サイズ付き、-o ファイル でファイルに保存できる。

リナ: もうちょっと情報を足したいときってありますか?
ライニー先輩: あるある。ファイルの種類やサイズを一緒に出すと、調査がぐっと楽になるよ。

種類が分かる記号を付ける(-F)

# ディレクトリに / 、実行ファイルに * を付ける
$ tree -F -L 1

ls -F と同じ記号が付く。末尾の / でフォルダ、* で実行可能ファイルが一目で分かる。

サイズを表示する(-h / --du)

# 各ファイルのサイズを人間が読みやすい単位で
$ tree -h

# ディレクトリのサイズ(配下の合計)も表示
$ tree -h --du -L 1

--du の意味

--du は各ディレクトリのサイズを 配下にあるファイルの合計 として表示する(du コマンドと同じ発想)。-h(human readable)と組み合わせると 1.2K 3.4M のような読みやすい単位になる。「どのフォルダが容量を食っているか」をざっくり知りたいときに便利。

リナ: サイズが見られるなら、ncdu みたいに容量調査にも使えますか?
ライニー先輩: 静的なスナップショットとしてはアリ。ただし矢印キーで掘り下げたり、その場で消したりする 対話的な調査ncdu の方が向いてる。tree は「構造を図で残す」、ncdu は「容量を探して掃除する」と使い分けるといいよ。

結果をファイルに保存(-o)

# ツリーをテキストファイルに書き出す
$ tree -L 2 -o structure.txt

README に「ディレクトリ構成」を載せるとき、tree -L 2 の出力をコピペすると一瞬で構成図が作れる。除外したいものは -I で消してから貼ると綺麗になる。

7. ミニ課題:自分の環境で試してみよう

結論: 深さ制限・ディレクトリのみ・除外指定の3問で tree の実用オプションを定着させる。

ライニー先輩: 知識を定着させるために、自分の環境で次の課題をやってみよう。

課題 1:ホームディレクトリを tree -L 1 で表示し、直下に何があるかを把握する

課題 2tree -d -L 2 ~ で、ホーム以下の フォルダの骨組みだけ を表示する

課題 3:適当なプロジェクトフォルダで tree -I '.git' を実行し、.git が除外されることを確認する

課題 1 のヒント
tree -L 1 ~

-L 1 で 1 階層だけに制限すれば、ls のように直下の中身だけがツリーで並ぶ。

課題 2 のヒント
tree -d -L 2 ~

-d でファイルを隠し、-L 2 で深さを 2 階層に制限。フォルダの骨格だけが見える。

課題 3 のヒント
tree -I '.git'

-I の後ろに除外したい名前を書く。.git が消えて、ソースの構造だけが残る。複数除外したいときは '.git|node_modules' のように | で区切る。

8. よくある落とし穴

結論: 深さ無制限で巨大フォルダを叩く、隠しファイルの表示忘れ、除外パターンのクォート忘れに注意。

やりがちな失敗 3 つ

  1. 大きいフォルダで -L なしで実行node_modules などで画面が滝のように流れる。まず -L 1-L 2 から
  2. 隠しファイルが見えないと焦るtree はデフォルトで . 始まりを隠す。-a を付け忘れていないか確認
  3. 除外パターンをクォートし忘れる-I node_modules|.git のように '(シングルクォート)で囲まないと、| がシェルのパイプと解釈されて意図しない動作になる。-I 'node_modules|.git' が正しい

安全で使いやすい型

  • 初めて見るフォルダ:tree -L 2(浅く全体像)
  • 構成を説明したい:tree -d -L 2(骨組みだけ)
  • リポジトリを見る:tree -L 2 -I 'node_modules|.git|dist'(ノイズを除外)

次に読む