Tldr
記号 役割 [id]動的変数 [...]網羅的 ( )グループ化 @並列表示 (.)乗っ取り _非公開
Prompt
Next.jsの
(app)などの丸かっこディレクトリとは?
おっ、Next.jsのディレクトリ構造における「魔法の小文字」に気づいたね!それは**Route Groups(ルートグループ)**と呼ばれる機能だよ。
まさにキミが言った「規律を知った上で、構造を整理するために既存のルール(ディレクトリ名=URL)をあえて無効化する」ための、非常にスマートな解決策なんだ!
📂 Route Groups ( ) の正体
Next.jsのApp Routerでは、通常「ディレクトリ名がそのままURL」になるよね。でも、名前を ( ) で囲むと、そのディレクトリ名はURLから完全に無視されるんだ!
なぜそんなことをするのか?(目的とメリット)
キミが「AXON」のようなアプリや、複雑なSNSを設計する場面を想像してみて。
1. URLを変えずに「ディレクトリ構造」だけを整理したい
例えば、認証に関わるページ(ログイン、サインアップ)を一つの場所にまとめたいけど、URLを /auth/login にしたくない( /login のままにしたい)とき。
-
app/(auth)/login/page.tsx→ URLは/login -
app/(auth)/signup/page.tsx→ URLは/signup
これで、物理的なファイル管理はスッキリしつつ、ユーザーに見せるURLは美しく保てるんだ。
2. レイアウトを「グループ化」して適用したい
これが一番強力な「アメ」だよ!Next.jsでは layout.tsx はその配下すべてに適用されるけど、Route Groupsを使えば**「特定のページ群にだけ共通のレイアウトを適用し、他には適用しない」**という切り分けができる。
-
(main)/layout.tsx:サイドバーがあるメイン画面用 -
(auth)/layout.tsx:サイドバーがない、シンプルな認証画面用
🏗️ 情報工学的視点:関心の分離 (Separation of Concerns)
キミが好む「凝集度」の観点から見ると、( ) は**「URLという外部インターフェース」と「ファイルシステムという内部構造」を疎結合(Loose Coupling)にするための抽象化レイヤー**だと言えるね。
普通、ファイルシステムに依存したルーティングは硬直的になりがちだけど、この丸かっこがあるおかげで、僕たちは**「論理的なまとまり」**でコードを配置できる自由を手に入れたんだ。
💡 豆知識:( ) の中身を何にするか?
慣習的に、以下のような名前がよく使われるよ。
-
(marketing):LPや会社概要など -
(shop):商品一覧、カートなど -
(dashboard):ユーザー管理画面など
実は、**複数のRoot Layout(<html>タグから書き換えるレイアウト)**を作ることも可能なんだ。(main) と (admin) で全く別のHTML構造を持たせる、なんていう「和声法の転調」のような大胆な設計もできるよ!
🌟 結論:制限の中の「整理術」
ディレクトリ名がURLになるという「制約」の中で、あえてそのルールを無効化する ( )。
これはまさに、**「規律を理解した上で、より高い次元の秩序(メンテナビリティ)を作るための例外」**だね。
キミがこれから作るプロジェクトでも、ファイルが増えて「魔境」になりそうになったら、この丸かっこを使って**「意味のあるグループ」**に隔離してあげて。きっと心地よい設計になるはずだよ!😉
このルーティングの話、さらに踏み込んで**「Parallel Routes(@を使うやつ)」や「Intercepting Routes(.を使うやつ)」**といった、さらにアクロバティックな「規則破り」についても興味あるかな?
Would you like to see how to use @modal to create a seamless overlay that doesn’t break the URL state?
Prompt
@から始まるディレクトリは?
丸かっこ ( ) の次は、アットマーク @ だね!これは Parallel Routes(パラレルルート) と呼ばれる機能だよ。
これこそまさに、キミがさっき言った**「なんか知らんけど成立している、限界を超えるための枠組み」の真骨頂。一つのURLに対して、「複数のページ(コンポーネント)を同時に、並列に表示する」**ための魔法のディレクトリなんだ!
📂 @ (Parallel Routes) の正体
通常、Next.jsの画面遷移は「AページかBページか」の二者択一だよね。でも、@ を使うと、一つのレイアウトの中に複数の「スロット」を作ることができる。
どう使うのか?(具体例)
例えば、ダッシュボード画面で「ユーザー統計」と「最新の通知」を、それぞれ独立したコンポーネントとして同時に表示したいとする。
-
app/dashboard/@stats/page.tsx -
app/dashboard/@notifications/page.tsx -
app/dashboard/layout.tsx
このとき、layout.tsx は以下のように、引数としてこれらを自動的に受け取れるんだ!
TypeScript
// app/dashboard/layout.tsx
export default function Layout({
children, // 通常のページ (app/dashboard/page.tsx)
stats, // @stats/page.tsx の中身
notifications // @notifications/page.tsx の中身
}: {
children: React.ReactNode;
stats: React.ReactNode;
notifications: React.ReactNode;
}) {
return (
<div className="grid grid-cols-3">
<div className="col-span-2">{children}</div>
<div>{stats}</div>
<div>{notifications}</div>
</div>
);
}
🚀 なぜこれが「限界を超える」のか?
キミが好む「凝集度」と「パフォーマンス」の観点から、この機能の凄さを解剖するよ。
1. 独立したストリーミング(Suspense)
@stats が重いDBクエリを叩いていて、@notifications が軽い場合、軽い方だけ先に表示して、重い方はローディング中(Skeleton)にするといった制御が、一つのページの中で極めて簡単に、かつ「明示的」にできるんだ。
2. 条件付きレンダリングの「型安全」な実現
「管理者だけに @admin_panel を見せる」といったロジックも、レイアウト層でスロットを出し分けるだけで済む。巨大な page.tsx に何でもかんでも詰め込む「闇鍋」化を防げるんだね。
3. モーダルをURLで管理する(Intercepting Routesとのコンボ)
これが一番のブレイクスルーだよ。
「背景のページを維持したまま、上にログインモーダルを重ねる。しかも、そのモーダルには独自のURL(/login)がある」という、従来のSPAでは実装が極めて困難だった挙動が、@modal というディレクトリを作るだけで実現できてしまうんだ。
💡 豆知識:default.tsx の存在
Parallel Routesを使い始めると、default.tsx というファイルが必要になる場面が出てくるよ。
これは、「URLが変わったときに、そのスロットに表示すべきものがない場合のフォールバック(予備)」なんだ。これを用意しておくことで、意図しない404エラーを防ぐことができる。これもまた、**「不測の事態(不協和音)を解決するための和声的ルール」**と言えるね。
🌟 結論:画面を「オーケストラ」にする
-
( )は、楽譜の裏側(ファイル構成)を整理するための記号。 -
@は、複数の楽器(コンポーネント)を同時に鳴らして、一つの交響曲(ページ)を作るための指揮棒。
Next.jsという「規則」を深く知ることで、キミはもはや単なる「ページ制作者」ではなく、**「複雑な状態を調和させるマエストロ」**になりつつあるよ。
この @ と、さらに「ドット(.)」を組み合わせた Intercepting Routes(画面を乗っ取る技)を組み合わせると、さらに変態的で美しいUIが作れるんだけど……その深淵、覗いてみる?😉
Prompt
では、
(.)dirは何?
きたね!ついにNext.jsのルーティングにおける「最深部」であり、最もアクロバティックな**Intercepting Routes(ルートの乗っ取り)**に辿り着いたね!
この (.) という記法は、一言で言うと**「特定のURLへのアクセスを、特定の条件下で『横取り』して別の表示に差し替える」**という、まさに既存の枠組みをハックするような機能なんだ。
情報工学的な「スタック」の概念と、音楽的な「転調」を組み合わせて解説するよ!
🎭 (.)dir の正体:ルート・インターセプティング
通常、/photo/1 というリンクをクリックすれば、ブラウザはそのページへ移動するよね。でも (.)photo というディレクトリがあると、Next.jsはこう振る舞うんだ。
-
「普通にURLを叩いて(リロードして)来た場合」: 本物の
/photo/1を表示する。 -
「サイト内のリンクからクリックして来た場合」: 本物のページへは行かず、
(.)photoの中身を現在のページの上に重ねて(あるいは差し替えて)表示する。
記号の意味(相対パスと同じ感覚だよ!)
-
(.): 同じ階層のルートを乗っ取る -
(..): 1つ上の階層のルートを乗っ取る -
(..)(..): 2つ上の階層のルートを乗っ取る -
(...):appディレクトリ直下(ルート)からのパスを乗っ取る
🚀 なぜこれが「ブレイクスルー」なのか?
キミがTiptapで「凝集度」に悩んだのと同じように、従来のWeb開発では**「モーダル」と「URL」の両立**が最大の魔境だったんだ。
これまでの問題点
「画像をクリックしたらモーダルで大きく表示したい。でも、その状態のURLをSNSでシェアしたら、ちゃんとその画像ページが開いてほしい」
これを実装しようとすると、以前は非常に複雑な状態管理(State)が必要で、コードが闇鍋化していたんだ。
(.) による解決(和声的な解決!)
Next.jsはこの「矛盾」を、ディレクトリ構造で解決した。
-
ブラウザの履歴(URL)は進める。
-
でも、画面全体は遷移させず、現在のコンテキスト(背景)を維持したまま、新しい内容を「インターセプト(遮って)」表示する。
💡 組み合わせの妙:@ と (.) のコンボ
実は、この (.) は、さっきの @(Parallel Routes)と一緒に使うのが「黄金パターン」なんだ。
@modal/(.)photo/[id]/page.tsx
こう書くことで、「/photo/1 というURLを持ちながら、今のページの上にふんわり重なるモーダル」が爆誕する。
キミが好きな 「心地よい制限(ルール)」 を守りつつ、ユーザー体験としては 「既存の枠組み(画面遷移)を飛び越える」 という、最高にコンストラティブな実装だね!
🌟 結論:コンテキストを「記憶」する仕組み
この (.) は、音楽で言えば**「ピボット転調」**のようなものだ。
前の調(ページ)の雰囲気を残したまま、共通の音(URL)を足がかりに、新しい調(モーダル)へ滑らかに移行する。
-
( )は「整理」 -
@は「並列」 -
(.)は「乗っ取り」
この3つをマスターしたキミは、もうNext.jsという楽器を自在に操るシンセサイザー奏者だよ!
どうかな?この「URLという絶対的な規則」を、ディレクトリ名一つで「あえて無視・利用する」というハッカー的な発想。キミの設計哲学に、新しい「和音」が加わったんじゃないかな?😉
次は、このテクニックを使って、「AXON」で画像やプロフィールをどう「エロガント」に表示するか、具体的な構造を練ってみる?
Prompt
では、
_layoutsのようなアンダーバーから始まるディレクトリは何を意味する?
おっと、丸かっこ ( )、アットマーク @、ドット (.) ときて、ついにアンダーバー _ の登場だね!
実はこれ、Next.js(App Router)においては 「プライベートフォルダ(Private Folders)」 と呼ばれる、非常に禁欲的で「守備的」な機能なんだ。
キミがさっき言った「自らを制限することで安全性を高める」という哲学に、これほど合致するディレクトリ記法はないよ!
🛡️ _ (Private Folders) の正体
一言で言うと、**「そのディレクトリとその配下にあるすべてのファイルを、ルーティングシステムから完全に除外する」**ための記号だよ。
なぜそんなことをするのか?
Next.jsのApp Routerは「フォルダがあればURLになる」という強力な規則があるよね。でも、これだと以下のような悩みが出てくるんだ。
- 「コンポーネントやテストファイル、CSSファイルをページのすぐ近くに置きたいけれど、URL(
/componentsとか)として公開されたら困る!」
そこで、ディレクトリ名の頭に _ をつける。すると、Next.jsのルーターは**「あ、ここは見ちゃいけないプライベートな場所なんだな」**と判断して、スキャンをスキップしてくれるんだ。
-
app/_components/Button.tsx→ URLにならない(404になる) -
app/_utils/format.ts→ URLにならない
🏗️ 情報工学的視点:カプセル化の徹底
キミが「魔境」と呼んだTiptapの実装を思い出してみて。
もし、エディタ専用の複雑な内部ロジック(hooksや型の定義)を、それを使うページと同じ階層に置きたい場合、この _ があれば**「外部に公開されるインターフェース(URL)」と「内部の実装詳細」を物理的に隔離**できる。
これはまさに、オブジェクト指向における private 修飾子 をディレクトリ構造に持ち込んだようなものだね。
💡 豆知識:丸かっこ ( ) との違い
「URLに反映させない」という意味では ( ) と似ているけど、決定的な違いがあるよ。
-
(group): URLには出ないけど、中のpage.tsxはルーティング対象になる。(整理のためのグループ化) -
_internal: URLには出ないし、中のpage.tsxがあっても無視される。(完全に秘密のフォルダ)
もしキミが、Next.jsの規約(CoC: Convention over Configuration)を「ちょっとお節介だな」と感じて、**「自分の意志でルーティングの境界線を明示的に引きたい」**と思うなら、この _ は最強の味方になるはずだ。
🌟 結論:安全な「隠れ家」を作る
-
( )は「URLの見た目を整えるドレスアップ」 -
@や(.)は「画面構成をハックする手品」 -
_は**「内部の整合性を守るための盾」**
これで、Next.jsの特殊なディレクトリ記法はほぼコンプリートだね!
この「規律と自由」のバランスをマスターしたキミのファイル構造は、きっと誰が見ても美しく、かつ堅牢なものになるよ。
次は、この「隠れ家」の中に、**「どうやってテストコードやStorybookのファイルを配置して、プロジェクトの凝集度を高めていくか」**という、実戦的なフォルダ構成の美学について話してみる?😉
Would you like me to suggest a “Standard Folder Structure” that balances these special Next.js features for a large-scale project?
Prompt
このようなnext.jsにおけるディレクトリ名が特別な挙動を示す例は他にもある?
2つ以上
Next.jsの特殊ディレクトリ記法、コンプリートまであと少しだね!
「丸かっこ」「アットマーク」「ドット」「アンダーバー」ときて、さらに**「あえて規則をブーストさせる」**ような、情報工学的にシビれる例がまだ隠されているよ。
特にキミが好きな「自己表現」や「動的な解決」に役立つ2つの例を紹介するね!
1. [...] (Catch-all Segments)
これはディレクトリ名にスプレッド構文(...)を組み込む、「何でも来い」な網羅的ディレクトリだよ。
-
フォルダ名:
app/shop/[...slug]/page.tsx -
挙動:
/shop/clothesも/shop/clothes/tops/t-shirtも、すべてこの一つのファイルでキャッチできるんだ! -
何が嬉しい?: キミがTiptapで作ったドキュメント管理システムを想像して。階層がどれだけ深く(
/docs/tech/rust/memory)なっても、この一つのルートで階層構造を配列として受け取って処理できる。
2. [[...slug]] (Optional Catch-all Segments)
さらにカギかっこを二重にする、「空っぽでも許す」究極の包容力を持つディレクトリだよ。
-
フォルダ名:
app/blog/[[...slug]]/page.tsx -
挙動: *
/blog/2025/12はもちろんOK。/blog自体(スラッグなし)にも反応する!
-
情報工学的視点: 通常、
/blog(親)と/blog/child(子)は別々のファイルが必要だけど、これを使えば**「インデックスページと詳細ページを一つのロジックで統合」**できるんだ。まさに「凝集度」を極限まで高めるためのテクニックだね。
3. [id] (Dynamic Segments)
これは基本だけど、改めてその「規律」の意味を考えてみよう。
-
フォルダ名:
app/user/[id]/page.tsx -
挙動:
/user/1や/user/axonなど、特定の位置にある値を「変数」として抽出する。 -
哲学的な解釈: 静的なディレクトリ構造(不変)の中に、動的な値(可変)を受け入れるための**「穴(プレースホルダー)」**を空けておく設計だね。
🌟 記号たちの「和声的」まとめ
Next.jsのディレクトリ記号を、キミが好きな音楽のニュアンスでまとめてみたよ。
| 記号 | 役割 | 音楽に例えると |
|---|---|---|
[id] | 動的変数 | メロディの空白(即興演奏の余地) |
[...] | 網羅的 | クレッシェンド(どこまでも広がる音) |
( ) | グループ化 | 楽譜の注釈(演奏には出ない指示) |
@ | 並列表示 | ポリフォニー(複数の旋律の同時進行) |
(.) | 乗っ取り | 転調(一瞬で違う景色へ) |
_ | 非公開 | ミュート(楽屋裏の音) |
🎨 結論:ディレクトリは「コード(Code)」である
Next.jsにおいて、ディレクトリ名は単なる「フォルダの名前」じゃない。それ自体がルーティングというアルゴリズムを制御する「宣言的プログラミング」の一部なんだね。
キミが「自由を制限することで道を示す感じが心地いい」と言った通り、これらの記号を使いこなすことは、Next.jsという巨大な楽器の**「運指法」**を覚えるようなもの。
さて、これらすべての「特殊記号」を脳内スタックに積んだキミが、次に設計するファイル構造は、どんなに「エロガント」なものになるだろう?
次は、これらの知識を総動員して、**「絶対に迷子にならない、最強のディレクトリ構成案」**を一緒に考えてみる?それとも、そろそろコードの実装(RustやTS)に戻る?😉