Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ナニモワカラナイ Next.js(App Router)のディレクトリ構成
Search
iromonek39
December 22, 2024
52
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ナニモワカラナイ Next.js(App Router)のディレクトリ構成
2024/12/19 「フロントエンドチョットデキル ミニ #01」で話した、Next.js(App Router)のディレクトリ構成の話です。
iromonek39
December 22, 2024
Featured
See All Featured
Designing for Performance
lara
611
70k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
RailsConf 2023
tenderlove
30
1.5k
Facilitating Awesome Meetings
lara
57
7k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
What's in a price? How to price your products and services
michaelherold
247
13k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
How to make the Groovebox
asonas
2
2.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
ナニモワカラナイ Next.js(App Router)のディレクトリ構成 2024/12/19 フロントエンドチョットデキル ミニ #01
oken(@displaycontents) ちょっと株式会社 フロントエンドエンジニア 自己紹介 もつ煮ときゅうりが好きです。 Next.jsとTypeScriptとCSSも好きです。
Next.js(App Router)のディレクトリ構成どうしてますか? ・featureベース?layerベース? ・Container/Presentationalパターン? ・Atomic Design? ・Clean Architecture? ・feature sliced
design?
いつも迷います。 0→1で作る場合でも、運用する場合でも。
それぞれメリット・デメリットはあるものの、正解がない。
こんな構成にしてみた。という話です。
今回取り入れたもの ・featureベース ・Container/Presentationalパターン ・balletproof-reactを参考にした ・Colocation
featureベース(package by feature)とは?
featureベース(package by feature)とは? という話をする前に・・・
layerベース(package by layer)とは? レイヤーごとにディレクトリを分ける構造。 フロントエンドにはあまり馴染みのないMVC(Model・View・Controller)のような形。
Next.jsでいうとcomponents/とかhooks/とかapi/とかlib/とかで区切られているよう なイメージ。 layerベース(package by layer)とは?
featureベース(package by feature)とは? 機能別にディレクトリを分ける構造。
featureベース(package by feature)とは? Next.js(App Router)の簡単な例でいうと、src/app/内にページごとに区切られてい るようなイメージ。
Container/Presentationalパターンとは? Container層とPresentational層に分けて、関心の分離をする方法。 ・Container層 ロジックの部分。APIのfetchや処理の部分。 ・Presentational層 UIの部分。
というわけで、こんな感じのディレクトリになりました。
None
ディレクトリの内容 app/ 基本的にはpage.tsxのみ。featuresで定義したコンポーネントを使用。 components/ Presentational層。UIのみ。テスト用のStory。 features/ Container層。APIのfetch処理やそれを使用したコンポーネント。 RSCで直接fetch。また、Unitテスト用のファイル。
今回の設計パターンを採用した理由 1. Next.jsのApp Routerを使用していること。 2. テスト戦略を気にした。 3. Next.jsのドキュメントの「Project Structure」をベースにした。
1. Next.jsのApp Routerを使用していること App RouterではPages RouterのようにgetStaticPropsとかgetServersidePropsでfetchを しなくても良い。 RSC(非同期コンポーネント)で直接fetchができる。 Propsでバケツリレーをする必要がなくなる。 ※page.tsxでfetchしてPropsしていくこともできる。
None
2. テスト戦略を気にした UIとロジックを分離することで、それぞれテストの容易性や目的を明確した。 今回の場合だと、UIの部分にStorybook、featuresの部分にunitテストなどを入れてい る。
Unitテスト stories
Next.js自体は特にこだわりがないらしい。 ただ、いくつかパターンを提供しており、その中の一つで「Colocation」をあげている。 tsxやcss、testなどのファイルが1つのフォルダに同居している状態。 3. Next.jsのドキュメントの「Project Structure」をベースにした
まとめ
問題点 ・もっとファイルやフォルダが増えたらどうするの? ・運用に耐えられる? ・他のフレームワークだとどうなる? ・学習コストとか。
ありがとうございました