← 解説「パスが深い理由: 15階層を分解する」に戻る
サンプルコードで身につける: パスが深い理由: 15階層を分解する
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1深いパスの実物(tree)
で実際にビルドできる形で作った、2のプロジェクトです。 は使っていない素の Java です。強調した行が最も深いファイルで、の根から数えてスラッシュ区切りで15個になります。
repo└── backend├── order-service│ ├── pom.xml│ └── src│ └── main│ ├── java│ │ └── jp│ │ └── co│ │ └── example│ │ └── shop│ │ └── order│ │ ├── OrderServiceMain.java│ │ ├── application│ │ │ └── service│ │ │ ├── OrderService.java│ │ │ └── impl│ │ │ └── OrderServiceImpl.java│ │ ├── domain│ │ │ ├── model│ │ │ │ └── Order.java│ │ │ └── repository│ │ │ └── OrderRepository.java│ │ ├── infrastructure│ │ │ └── persistence│ │ │ └── InMemoryOrderRepository.java│ │ └── presentation│ │ └── controller│ │ └── OrderController.java│ └── resources│ └── application.properties├── pom.xml└── shop-common├── pom.xml└── src└── main└── java└── jp└── co└── example└── shop└── common└── util└── IdGenerator.java31 directories, 12 files
215個を1段ずつ、誰が決めたかで分ける
最も深いパスを1段ずつ分け、決めた主体と、その段の子の数を並べた表です。子がディレクトリ1つ・ファイル0個の段を、通過するだけと数えています。7〜9段目の jp、co、example は、がいくつ増えても通過するだけのままです。
# 階層 誰が決めたか 子dir 子file 通過するだけ1 repo チーム (リポジトリ名) 1 0 yes2 backend チーム (リポジトリ内の区分) 2 1 no3 order-service チーム (モジュール分割) 1 1 no4 src ビルドツールの規約 (Maven) 1 0 yes5 main ビルドツールの規約 (test と分ける) 2 0 no6 java ビルドツールの規約 (resources と分ける) 1 0 yes7 jp 名前付けの慣習 (逆ドメイン) 1 0 yes8 co 名前付けの慣習 (逆ドメイン) 1 0 yes9 example 名前付けの慣習 (逆ドメイン) 1 0 yes10 shop チーム (製品名) 1 0 yes11 order チーム (機能名) 4 1 no12 application チームの層の慣習 1 0 yes13 service チームの層の慣習 1 1 no14 impl チームの層の慣習 0 1 no15 OrderServiceImpl.java Java (public クラス名 = ファイル名)pass-through on this path: 8 of 14 directories
3通過するだけのディレクトリを数える
上の の12ファイルのパスから、子がディレクトリ1つだけでファイルを持たないディレクトリを数えるプログラムです。実行すると、32個のうち18個が通過するだけだと分かります(tree の 31 directories は根の repo を数えていません)。責務が無いように見える、という感覚を数にしたものです。
Java
4NestJS の想定パス、Ant のプロジェクトと比べる
同じ場所に NestJS の公式の例にならって置いた場合の想定パスと比べると、差は9段です。うち3段は層の呼び名で、言語とは関係がありません。下の2行は の回のプロジェクトで、 が無いぶん2段浅くなっています。
Java (実物) repo/backend/order-service/src/main/java/jp/co/example/shop/order/application/service/impl/OrderServiceImpl.java 15NestJS (想定) repo/backend/order-service/src/order/order.service.ts 6差 9 の内訳ビルドツールの規約 main/java 2逆ドメイン jp/co/example 3製品名 shop 1層の慣習 application/service/impl 3Ant のプロジェクト (実物) shop/src/jp/co/example/shop/web/HelloController.java 8同じクラスを Maven の規約で shop/src/main/java/jp/co/example/shop/web/HelloController.java 10
5IDE は通過するだけの段を畳んで表示する
IntelliJ IDEA と VS Code の公式ドキュメントの記述です。IntelliJ IDEA は中に別のしか無いパッケージを、VS Code は子が1つだけのフォルダを、1行にまとめて表示できます。VS Code のリリースノートは、Java のパッケージ構造を用途の例に挙げています。
IntelliJ IDEA 2026.2 Help "Project tool window"Compact Middle Packages/Hide Empty Middle Packages"(Empty packages are ones that contain nothing but other packages.)""If the option is on, empty packages are shown compacted."VS Code 1.41 release notes "Compact folders in Explorer""In the File Explorer, we now render single child folders in a compact form.""Useful for Java package structures, for example.""Setting explorer.compactFolders controls this behavior. By default, this setting is turned on."