Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5分で予習する Next.js 「Layouts RFC」
Search
kimizuy
October 20, 2022
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分で予習する Next.js 「Layouts RFC」
2022/10/19に開催された第1回 LT 練習会(仮)の発表資料です。
https://gaji-lt.connpass.com/event/260558/
kimizuy
October 20, 2022
More Decks by kimizuy
See All by kimizuy
実践Server Actions
kimizuy
0
37
Exploring Hono
kimizuy
0
60
ざっくり知る tamagui v1
kimizuy
0
250
個人ブログをNext13のApp Directoryに移行しました
kimizuy
0
310
最近知った GitHub Actions の Tips
kimizuy
0
290
Other Decks in Programming
See All in Programming
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
140
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
130
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
1.7k
ALB ログから Trace を気合で繋げる技術
fohte
7
880
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
520
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
ソフトウェアラスタライザ
fadis
1
800
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
120
Building an Out-of-Order CPU
latte72
1
750
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Designing Experiences People Love
moore
143
24k
The Invisible Side of Design
smashingmag
301
52k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Everyday Curiosity
cassininazir
0
310
Producing Creativity
orderedlist
PRO
348
41k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Deep Space Network (abreviated)
tonyrice
0
300
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
5分で予習する Next.js 「Layouts RFC」 2022/10/19 第1回LT練習会(仮)発表資料 5分で予習する Next.js 「Layouts RFC」
@kimizuy
自己紹介 ID: @kimizuy 株式会社 Gaji-Labo フロントエンドエンジニア 最近は React や TypeScript
をメインで使っています。 https://github.com/kimizuy https://twitter.com/kimizuy 趣味: スプラトゥーン 3 5分で予習する Next.js 「Layouts RFC」 @kimizuy
そもそも Next.js とは React ベースのフレームワーク SSG、SSR、ISR 画像最適化 API Routes などのバックエンド側の拡張性もある
Vercel と組み合わせれば設定不要でデプロイ可能&Next.js の機能をフルサポート 5分で予習する Next.js 「Layouts RFC」 @kimizuy
Layouts RFC 「これまでの Next.js でもっとも大きな変更」 React18 の機能を引き出す目的 2022/10/25 のカンファレンスで Next13
の発表と一緒にリリースされる可能性が高い https://github.com/vercel/next.js/discussions/37136 RFC とは Request for Comments の略。開発者が提示した新機能の技術仕様に対して不具合や不 足する点がないか広くコメントを求めること。元々はインターネット関連技術の標準化 組織 IETF が策定し、定期的に発行している仕様文書のことを指す。 5分で予習する Next.js 「Layouts RFC」 @kimizuy
主な変更点 ルーティング 共有レイアウト 部分的なローディング 5分で予習する Next.js 「Layouts RFC」 @kimizuy
ルーティング Next.js はファイルシステムをベースにしたルーティング。 pages/index.js → / pages/blog/index.js → /blog pages/about.js
→ /about pages/blog/[slug].js → /blog/foo , /blog/bar 5分で予習する Next.js 「Layouts RFC」 @kimizuy
ルーティング 変更 フォルダ名が pages → app 、ページファイルは page.js に。 app/page.js
→ / app/blog/page.js → /blog app/about/page.js → /about app/blog/[slug]/page.js → /blog/foo , /blog/bar // app/page.js export default function Page() { return <h1>Hello, Next.js!</h1> } 5分で予習する Next.js 「Layouts RFC」 @kimizuy
ルーティング → フォルダがパスの定義、ファイル( page.js )がビューの定義に明確に役割が分けられた! 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト ヘッダーやフッター、サイドバーはページ間で再利用したい場合があります。そういったレ イアウトに関するコンポーネントをページ変更の際に再利用して状態を保持することで、画 面のチラつきの軽減やパフォーマンスの向上が見込めます。Layouts RFC ではより柔軟に共 有レイアウトの実装が可能になります。 これまでの書き方: // pages/_app.js
import Layout from '../components/layout' export default function MyApp({ Component, pageProps }) { return ( <Layout> <Component {...pageProps} /> </Layout> ) } 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト app 配下の layout.js に実装します。 {children} の部分にページコンテンツが入ります。 // app/layout.js export
default function RootLayout({ children }) { return ( <html> <head> <title>Next.js Layouts RFC in 5 Minutes</title> </head> <body>{children}</body> </html> ); } ↓ 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト app/page.js は、 app/layout.js の子としてレンダリングされます。 // app/page.js export default function
Page() { return <h1>Hello, Next.js!</h1> } ↓ <html> <head> <title>Next.js Layouts RFC in 5 Minutes</title> </head> <body> <h1>Hello, Next.js!</h1> </body> </html> 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト app/layout.js と合わせて /blog 以下で独自のレイアウトを共有したい場合。 // app/blog/layout.js export default function
BlogLayout({ children }) { return ( <> <aside> <nav>...</nav> </aside> {children} </> ) } ↓ 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト app/blog/page.js は app/layout.js と app/blog/layout.js の子としてレンダリン グされます。 <html> <head>
<title>Next.js Layouts RFC in 5 Minutes</title> </head> <body> <aside> <nav>...</nav> </aside> <h1>Blog Posts</h1> </body> </html> 5分で予習する Next.js 「Layouts RFC」 @kimizuy
共有レイアウト → layout.js にレイアウトコンポーネントの役割を集約でき、フォルダごとのレイアウト のカスタムもより柔軟に管理できるようになった! 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング loading.js は、ページや ネストしたセグメントを自動 的に React Suspence Boundary で囲みます。 Next.js
は、最初の読み込み の際と、兄弟ルート間を移動 する際に、ローディングコン ポーネントを表示します。 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング React Suspense とは 「データの読み出しが準備できているかどうかを React に伝える仕組み」です。データ取得 中の場合は <Suspense> に渡されたフォールバックの
UI が、代わりに表示されます。一部 のライブラリやフレームワーク(Next.js も)では、この機能を取り入れています。 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング Next.js では React Suspense をサーバ ーレンダリングと組み合わせてローディ ング UI とサーバーで生成された
HTML を入れ替えます。 これまでのサーバーレンダリングはペー ジ全体が生成されるまで待機する必要が ありました。しかし 「データ取得中の UI」と「それ以外 (ヘッダーやフッター)の UI」でペー ジのレンダリングを部分的に分けること でユーザーはより速くページを操作し始 めることができます。 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング app/loading.js と app/layout.js を組み合わせて利用できます。 // app/loading.js export default function
Loading() { return <YourSkeleton /> } // app/layout.js export default function Layout({children}) { return ( <> <Sidebar /> {children} </> ) } ↓ 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング app/loading.js と app/layout.js を組み合わせた結果。 <> <Sidebar /> <Suspense fallback={<Loading
/>}>{children}</Suspense> </> 5分で予習する Next.js 「Layouts RFC」 @kimizuy
部分的なローディング → ページレンダリングの中心がよりサーバーに寄せられることで、ブラウザ側で追加の JS を 読み込んでレンダリングする必要が少なくなり、クライアント側のナビゲーションがさらに 高速に! 5分で予習する Next.js 「Layouts
RFC」 @kimizuy
まとめ page.js : パスとビューの定義がより明確に分けられる layout.js : 共有レイアウトがより柔軟に実装可能になる loading.js : Suspense
などの機能が Next.js に統合され UX が向上する 5分で予習する Next.js 「Layouts RFC」 @kimizuy
Next.js Conf(10/25)が楽しみ! 以上、ご静聴いただきありがとうございました。 5分で予習する Next.js 「Layouts RFC」 @kimizuy
参考 https://vercel.com/blog/next-js-layouts-rfc-in-5-minutes https://nextjs.org/blog/layouts-rfc https://github.com/vercel/next.js/discussions/37136 5分で予習する Next.js 「Layouts RFC」 @kimizuy