Dev Study
← 解説「パスが深い理由: 15階層を分解する」に戻る

サンプルコードで身につける: パスが深い理由: 15階層を分解する

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1深いパスの実物(tree)

で実際にビルドできる形で作った、2のプロジェクトです。 は使っていない素の Java です。強調した行が最も深いファイルで、の根から数えてスラッシュ区切りで15個になります。

$ tree repo(ビルド前。31 directories, 12 files)コマンド出力
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.java
 
31 directories, 12 files

215個を1段ずつ、誰が決めたかで分ける

最も深いパスを1段ずつ分け、決めた主体と、その段の子の数を並べた表です。子がディレクトリ1つ・ファイル0個の段を、通過するだけと数えています。7〜9段目の jp、co、example は、がいくつ増えても通過するだけのままです。

パスの分解(子の数は実測)表
# 階層 誰が決めたか 子dir 子file 通過するだけ
1 repo チーム (リポジトリ名) 1 0 yes
2 backend チーム (リポジトリ内の区分) 2 1 no
3 order-service チーム (モジュール分割) 1 1 no
4 src ビルドツールの規約 (Maven) 1 0 yes
5 main ビルドツールの規約 (test と分ける) 2 0 no
6 java ビルドツールの規約 (resources と分ける) 1 0 yes
7 jp 名前付けの慣習 (逆ドメイン) 1 0 yes
8 co 名前付けの慣習 (逆ドメイン) 1 0 yes
9 example 名前付けの慣習 (逆ドメイン) 1 0 yes
10 shop チーム (製品名) 1 0 yes
11 order チーム (機能名) 4 1 no
12 application チームの層の慣習 1 0 yes
13 service チームの層の慣習 1 1 no
14 impl チームの層の慣習 0 1 no
15 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段浅くなっています。

区切りの数の比較(NestJS 側は想定のパスで、実物は作っていない)表
Java (実物) repo/backend/order-service/src/main/java/jp/co/example/shop/order/application/service/impl/OrderServiceImpl.java 15
NestJS (想定) repo/backend/order-service/src/order/order.service.ts 6
 
差 9 の内訳
ビルドツールの規約 main/java 2
逆ドメイン jp/co/example 3
製品名 shop 1
層の慣習 application/service/impl 3
 
Ant のプロジェクト (実物) 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."