Ubuntuのtreeコマンド実践入門:ディレクトリ階層の可視化と便利な活用法

概要

多層化されたファイルシステムやプロジェクト構成をターミナル上で直感的に把握したい場合、tree コマンドが極めて有効な選択肢となります。本記事では、ツールの初期セットアップ手順から始まり、探索階層の絞り込み、ドットファイルの可視化、パーミッション情報の付与、パターンマッチングを用いたノイズ除去に至るまで、実務で即戦力となるテクニックを網羅的に解説します。システムの保守点検や設計書のドキュメント作成に役立つスマートな活用手法を身につけましょう。

treeユーティリティの導入とディレクトリツリーの基本描画

Ubuntuの環境で作業を始めるにあたり、ローカルのリポジトリ情報を最新化して tree パッケージをシステムへ組み込みます。

apt-get update -qq && apt-get install -y tree

動作検証用のモデルケースとして、mkdir -p demo_project/src demo_project/docs demo_project/tests を実行して階層化されたワークスペースを一括構築します。

mkdir -p demo_project/src demo_project/docs demo_project/tests

配置された各フォルダー内に配置するダミーファイルを touch コマンドで用意します。

touch demo_project/src/main.py demo_project/src/utils.py demo_project/docs/README.md demo_project/tests/test_main.py

引数に対象ディレクトリを指定して tree を呼び出すと、配下に存在するリソース群がグラフィカルな樹形図としてコンソールに出力されます。
追加パラメーターを付けずに実行した場合、サブディレクトリ全体が再帰的にスキャンされ、最下段に走査対象となったファイルおよびディレクトリの総数が集計されます。
⚙️ [主要オプション一覧]

-a : 通常は隠蔽されるドット(.)プレフィックス付きファイルも含めて全件列挙します。
-d : ファイルを省き、フォルダ構成のみを抽出してツリーを生成します。
-L level : 再帰的にたどる階層深度の上限値を指定します。
-f : 相対パスを含めたフルパス形式で各ノードを描画します。
-p : ファイルの種別およびアクセス権限(パーミッション文字列)を併記します。
-h : ストレージ消費量を人が読み取りやすい単位(KB、MB、GBなど)に換算して表示します。
-s : データサイズをバイト単位の数値で出力します。
-I pattern : 指定したワイルドカード表現に該当するエントリを出力対象から除外します。

tree demo_project

探索階層の深度指定(-L)とディレクトリ限定フィルタ(-d)

より複雑な構造での挙動を確認するため、mkdir -p demo_project/src/components demo_project/src/assets/images を実行してさらに深い階層のディレクトリ群を追加配置します。

mkdir -p demo_project/src/components demo_project/src/assets/images

新設したフォルダへ touch demo_project/src/components/button.py demo_project/src/assets/images/logo.png を実行し、検証用のアセットを格納します。

touch demo_project/src/components/button.py demo_project/src/assets/images/logo.png

tree -L 2 demo_project を実行すると、ルートから数えて最大2段階までの深さに限定して探索が行われます。
第3階層より深部に位置する細かなファイル群がトリミングされるため、規模の大きなコードベースであっても大枠のモジュール構成を迅速に把握できます。

tree -L 2 demo_project

続いて tree -d demo_project を発行すると、ファイル要素がすべてフィルタリングされ、純粋なディレクトリ骨格のみが表示されます。
大量のファイルが存在するプロジェクトにおいて、パッケージ構成やフォルダの命名規則を俯瞰したい場面で非常に重宝します。

tree -d demo_project

隠しファイルの網羅(-a)ならびに権限・容量の可視化(-p, -h)

隠しエントリの取り扱いを検証するにあたり、touch demo_project/.env demo_project/.gitignore を用いて典型的なドット設定ファイルを生成します。

touch demo_project/.env demo_project/.gitignore

機密情報の保護を想定し、chmod 600 demo_project/.env で作成した環境設定ファイルのパーミッションを所有者のみの読み書き権限に制限します。

chmod 600 demo_project/.env

通常の出力では省略されてしまう隠しファイルですが、tree -a demo_project オプションを渡すことで、ルート直下に置いた .env や .gitignore まで余さずツリー内に反映されるようになります。

tree -a demo_project

さらに tree -p -h demo_project を適用すれば、セキュリティ設定を確認できる属性フラグ(-p)と可読性に優れたヒューマンリーダブルなファイル容量(-h)が各項目の先頭に整然と付加されます。
ストレージの圧迫要因やパーミッション設定のミスがないかを同一画面内で素早く監査することが可能です。

tree -p -h demo_project

パターン抽出(-P, -I)とブラウザ向けHTMLレポート出力(-H, -o)

フィルタリング検証のノイズ用データとして、touch demo_project/temp.log demo_project/debug.tmp を投入して作業ログや一時ファイルを再現します。

touch demo_project/temp.log demo_project/debug.tmp

特定種別のファイルのみに焦点を当てたい場合は、tree -P "*.py" demo_project を活用します。
ワイルドカードで指定したPythonスクリプト(.py)のみが抽出され、関連しないドキュメントやリソースを排除した無駄のないソースコード配置図が得られます。

tree -P “*.py” demo_project

反対に開発の本質と無関係なキャッシュや中間成果物を除外したいときは、tree -I "*.tmp|*.log" demo_project のようにパイプ記号(|)でパターンを連ねます。
作業ログなどの雑多なファイルを隠蔽することで、コアとなる設計資産の構造が浮き彫りになります。

tree -I “.tmp|.log” demo_project

ドキュメント共有を目的とする場合、tree -H http://localhost -o demo_project/structure.html demo_project を実行すると強力な効果を発揮します。
基底パスとして機能するベースURL(http://localhost)を埋め込みつつ、各項目にリンクが設定された独立したHTMLレポートが静的ファイルとして書き出されます。

tree -H http://localhost -o demo_project/structure.html demo_project

出力されたHTML文書の構文を確認するため、head -n 15 demo_project/structure.html で先頭のヘッダー領域とスタイル定義をチェックします。

head -n 15 demo_project/structure.html

本稿ではUbuntu環境における tree コマンドの基本的な使い方から、実務での効率化に直結する高度なフィルタリングおよびレポート生成手法までを解説しました。
プロジェクトの規模や用途に応じて各種オプションを臨機応変に組み合わせ、日々のインフラ運用やコードレビュー作業にお役立てください。