app ディレクトリの中にコンポーネントやテスト用のファイルを置いても、URL として公開されてしまいませんか。
公開されません。フォルダを作っただけではルートになりません。公式も、そのセグメントに page か route が置かれるまでルートは公開されないと説明しています。
面接官が見ているのはルーティングの条件を正しく理解しているか。
よくある答えと、面談でどう見られるか
- 公開されない。page か route が無ければルートにならない
だからコロケーション(関係ファイルを近くに置くこと)が安全に行えます。 - 公開される。app の中は全部ルートになる
なりません。フォルダはルート構造を定義するだけで、page か route が置かれるまでそのパスは公開されません。 - 公開されないが、心配なら app の外に置く方がよい
app の外に置く構成も公式が認めています。好みの問題です。ただし「公開されるかもしれないから外に置く」という理由づけは正しくありません。 - 拡張子が .tsx なら公開される
拡張子ではなくファイル名です。page / route という決まった名前が条件になります。
面接官は何を見ているか
- page か route が無ければ公開されないと答えた
- フォルダを作っただけではルートにならないと理解している
- コロケーションが安全だと言えた
模範解答
公開されません。フォルダを作っただけではルートになりません。
公式の説明では、ルート構造はフォルダで定義されますが、そのセグメントに page.js か route.js が置かれるまで、そのルートは公開されません。さらに、公開された場合でも外に出るのは page や route が返した内容だけです。
なので、コンポーネントやテスト、ユーティリティを対応するルートのフォルダに置く(コロケーション)のは安全です。関係するファイルが近くにまとまるので、むしろ読みやすくなります。
明示的に「ここはルートではない」と示したい場合は、フォルダ名の先頭にアンダースコアを付けるプライベートフォルダにできます。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
括弧付きのフォルダ、たとえば (marketing) は何のためにありますか。一部しか触れられなかった場合
layout.tsx と page.tsx は、それぞれ何をするファイルですか。触れられなかった場合
layout.tsx と page.tsx は、それぞれ何をするファイルですか。