質問: Java のプロジェクトを見ていると、独特の深いディレクトリ階層をよく目撃します。あまり適切な例を見つけられなかったのですが、例えば、このページにあるような com/xxxx/yyyy/zzz のようなものです。例えば、Typescript や C++ でも namespace 機能はあっても、必ずしも Java のようにディレクトリ階層と一致していないとも思います。 近い質問に「javaのpackage宣言の必要性はなんですか?」があり、Java はクラスを探す際に、パッケージ名に沿ってディレクトリを探すからだとは思うのですが、これはつまり: 1) Java のパッケージ名は慣習的にホスト名の逆順が使われる 2) Java はクラスをパッケージ名に沿ってディレクトリを辿り、探す 3) この慣習に沿って Eclipse のような IDE も Java プロジェクトをそのようなディレクトリ階層で作成する と言った要素の結果なのでしょうか? Eclipse 以外にも IDE (e.g. IntelliJ) やモダンなエディタはあり (e.g. Sublime Text, VS Code)、極端なことを言うと、Vim や Emacs で作成する時もこの慣習に従い、手作業で深い階層のディレクトリを皆さん作られてるのでしょうか? 一般的な Java 開発の知見が少なく、お恥ずかしい限りですが、実際皆さんどのように開発を開始されるのか伺えますと嬉しいです。
回答: 難しいことは分かりませんが、Java言語に関わらずパッケージやネームスペースがある言語は、別ライブラリの導入時に被っているとクラスのインポートに苦労します。 そのため、ユニークになるように作成しておくことで再利用や別のライブラリとの衝突を回避出来るものと思います。 手作業で深いディレクトリを作成される方がいるのかは分かりませんが、IDEが作成してくれるのであまり気にしない、またそれほど頻度が多い作業ではないと思うので手作業でも可能といえば可能です。