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 を例に考える、技術選定・技術との距離感 #技術選定_fi...
Search
izumin5210
January 23, 2024
Programming
6.9k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Next.js App Router を例に考える、技術選定・技術との距離感 #技術選定_findy / findy 2024-01-24
https://findy.connpass.com/event/306714/
izumin5210
January 23, 2024
More Decks by izumin5210
See All by izumin5210
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.7k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
870
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
2.8k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.2k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.8k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.4k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.7k
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
1.2k
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
5
940
Other Decks in Programming
See All in Programming
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Vite+ Unified Toolchain for the Web
naokihaba
0
310
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
ふつうのFeature Flag実践入門
irof
7
4k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
250
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.1k
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
210
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.6k
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
100
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
780
Featured
See All Featured
Making Projects Easy
brettharned
120
6.7k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Prompt Engineering for Job Search
mfonobong
0
350
Claude Code のすすめ
schroneko
67
230k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Bash Introduction
62gerente
615
220k
A Soul's Torment
seathinner
6
2.9k
Transcript
© 2023 LayerX Inc. Next.js App Router を例に考える、 技術選定・技術との距離感 2024-01-24
フロントエンドの技術選定 〜2023を振り返る〜 Lunch LT @izumin5210
2 © 2023 LayerX Inc. 今日話すこと 新プロダクト(バクラク請求書発行)での技術選定を例に、 技術選定、とくにフレームワークの選定で何を考えたかを振り返る 今日話すこと
© 2023 LayerX Inc. 3 ▸ Wantedly, Inc. (2018-04 -
2022-08) ▸ LayerX (2022-09-) ‐ バクラク事業部 Enabling Team ‐ Backend と Web Frontend 中心にやってます ▸ 最近のお気に入りパッケージは @eddeee888/gcg-typescript-resolver-files 画像を入れてね whoami @izumin5210
© 2023 LayerX Inc. 4 ▸ バクラクシリーズ 5番目のプロダクト ‐ 企業が扱う書類を作成できる
▸ エンジニア 3名 ‐ PdM 兼 TechLead ‐ ソフトウェアエンジニア 2名 ※片方が@izumin5210 ▸ 開発開始からリリースまで ‐ 短い! 新規プロダクト: バクラク請求書発行 前提 - バクラク請求書発行
© 2023 LayerX Inc. 5 ▸ Web Frontend は React
に寄せていく ▸ 今後 React でプロダクトを作っていくための “型” を、このタイミングで整備する ‐ 標準の技術選定, 共通実装(将来的にライブラリになるもの), etc. 以上! あとは全部決めなきゃいけない! 技術的に決まってたこと 前提 - バクラク請求書発行
© 2023 LayerX Inc. 6 前提 - 当時の状況(雑) Next.js 13.4
リリース App Router が Stable に バクラク請求書発行 リリース予定 Apollo Client 3.8 リリースされそう 2023-05-04 2023-08-24
7 © 2023 LayerX Inc. 今日話すこと Webフレームワークなど、一番外側の仕組みをどうするか決めたい 少なくともビルドとルーティングをどうするか決めないと動きづらいはず Next.js, Remix,
何かを組みわせて自分で頑張る, etc. みなさんならどう考えて、どう決めますか?
© 2023 LayerX Inc. 8 やる ▸ Next.js を採用! ▸
App Router を使う! やらない ▸ App Router への深入りはしない App Router は一歩引いて使う。 Server Componentsはごく一部だけ。 データ取得も基本クライアント。 キャッシュや高度なルーティングなど、 複雑な機能や Next.js 独自の機能は なるべく使わない。 開発スタート時の意思決定(Webフレームワークまわり) Web フレームワーク選定の意思決定
© 2023 LayerX Inc. 9 ▸ 前提: 何のために Web フレームワークを導入するのか
‐ 今回は「ルーティング機構とそれに最適化されたビルドシステム」がほしい ▸ Next.js にはルーティング機構, ビルドまわりなど、よく作り込まれたものが用意されている ‐ 今回の Web フレームワーク導入目的にも合致する ‐ 同じレベルで自作するとそれなりに手間はかかる ▸ Q. Next.js は学習コスト高くない? ‐ A. RSC, SSR などに深入りせず、単純な File-system based router としてみれば見かけ上はシンプル ▸ 世の中で広く使われているので、困っても情報が見つかりやすいはず Why Next.js? Web フレームワーク選定の Why
© 2023 LayerX Inc. 10 ▸ App Router (React Server
Components) がもたらす Web 開発の変化への期待と投資 ‐ Bet Technology ‐ 前回の発表: React Server Components で複雑さに立ち向かう * ‐ フルベットはしないけど、利用箇所を限定しながら試す ‐ 実アプリで試さないと見えてこないこともある ▸ いずれ App Router がメインストリームになるのであれば、早めに移行できるに越したことはない ‐ プロダクトが大きくなってからの移行は大変になりがち Why App Router? Web フレームワーク選定の Why
© 2023 LayerX Inc. 11 意思決定時に重要視したこと (@バクラク請求書発行) バクラク請求書発行における、Webフレームワーク選定の意思決定のポイント 追加学習コストを 下げる
Bet Technology, but 撤退可能 ?
© 2023 LayerX Inc. 12 ▸ この分野(Next.js, Remix など React
ベースの Web フレームワーク)は 発展の真っ最中 ‐ 👍 まだまだ良くなっていきそう ‐ 🤔 App Router が出たばかりすぎてエコシステムも追従しきれてない ‐ どれも決定的な差はなく、「いまは絶対こっち!」とは言えない ‐ もちろんコンテキストによるところはある ‐ 情勢の変化に追従しやすく(= 撤退しやすく)しておきたい 意思決定時に重要視したこと (@バクラク請求書発行) バクラク請求書発行における、Webフレームワーク選定の意思決定のポイント Bet Technology, but 撤退可能
© 2023 LayerX Inc. 13 意思決定時に重要視したこと (@バクラク請求書発行) バクラク請求書発行における、Webフレームワーク選定の意思決定のポイント 追加学習コストを 下げる
Bet Technology, but 撤退可能 (前提) 解決したい課題と 解決できる課題と その優先度を考える 「優先度を下げていいもの」も決まる 優先度が下がったものをあえて使わないことで、 学習コストや依存度を一時的に下げられる
© 2023 LayerX Inc. 14 意思決定時に重要視したこと (@バクラク請求書発行) バクラク請求書発行における、Webフレームワーク選定の意思決定のポイント 追加学習コストを 下げる
Bet Technology, but 撤退可能 これらは「初期は」「一時的に」でもある アクセルを思いっきり踏んでいい と判断できれば、 ガッツリ使っていけばいい 必要な学習コストを時間的に分散させるために 初期コストを下げている とも言える
© 2023 LayerX Inc. 15 技術選定には理由が伴う 技術選定 is むずかしい ▸
何のためにその技術を使うのか、ちゃんと考える ‐ 〇〇がすごい! もいいけど、それがプロダクト・チームの今や未来になぜ必要か も重要 ‐ 今回は「ルーティングとそれに最適化されたビルドシステム」が要求で、逆に言うとそれ以外は極論なくてもいい ‐ 「何のため」が決まれば、逆に優先度を下げても良い要素も見つけられる ‐ これは「ずっと使わない」ということではない ‐ 「将来的に使えると(ユーザ|開発者)体験が良くなりそうだけど、初期は控えめにしておく」みたいな話
© 2023 LayerX Inc. 16 距離を取るのも選択肢 技術選定 is むずかしい ▸
決定的な差がない場合、「適度に距離を取りつつ技術と付き合う」というのも選択肢になる ‐ 決定的な差 is … ‐ 「〇〇じゃないと実現できない機能があり、それがプロダクトにとって重要」 ‐ 「〇〇が他の技術と比べ △△という問題をうまく解いており、それがプロダクトやチームにとって重要」 ‐ etc. ‐ 入れる or 入れない の2択ではなく、濃淡もありうる ‐ 今使わないからずっと使わない ではない ‐ コストやリスクを時間的に分散させているだけ ‐ Web フレームワークなど、「ベッタリ依存するとコードのあらゆるところに染みるタイプの技術」ではとくに重要
© 2023 LayerX Inc. 17 とはいえ Bet したい 技術選定 is
むずかしい ▸ 撤退可能なパスを残しつつ、多少は Bet Technology のための余白を残しておくといい ‐ やっぱり未来を感じる技術に触れるのは楽しい! し、やってみないとわからないことはある ‐ 見えてなかった大きなメリットがあるかも ‐ 自分たちのプロダクトへのフィット感がわかるかも ‐ あとで剥がせるようにする・人に迷惑をかけないのは前提で、Bet する余白を作っておくといいかも ‐ バクラク請求書発行では自分(@izumin5210)が完全にコントロールできるところだけ Server Components を使ってサーバサイドでフェッチして… やってました
© 2023 LayerX Inc. 18 まとめ 技術選定 is むずかしい ▸
何のためにその技術を使うのか、ちゃんと考える ‐ 〇〇がすごい! もいいけど、それがプロダクト・チームの今や未来になぜ必要か も重要 ▸ 決定的な差がない場合、「適度に距離を取りつつ技術と付き合う」というのも選択肢になる ‐ 入れる or 入れない の2択ではなく、濃淡もありうる ▸ 撤退可能なパスを残しつつ、多少は Bet Technology のための余白を残しておくといい ‐ やっぱり未来を感じる技術に触れるのは楽しい! し、やってみないとわからないことはある ‐ あとで剥がせるようにする・人に迷惑をかけないのは前提で、Bet する余白を作っておくといいかも
© 2023 LayerX Inc. 19 で、プロダクトはどうなった? 技術選定 is むずかしい ▸
ちゃんと問題なくリリースできた! ▸ が、リリース直前に App Router から撤退し、Pages Router へ移行している ‐ App Router だと必要な機能が実装できなかったため ‐ navigation のキャンセルが難しかった ‐ (Pages Router は怪しい感じだけど一応できる) ‐ 深入りしてなかったので移行自体はすぐに完了 ‐ 撤退しやすいようにしててよかった… ‐ App Router に戻れないか、チャンスを伺い中…
© 2023 LayerX Inc. 20 まとめ 技術選定 is むずかしい ▸
何のためにその技術を使うのか、ちゃんと考える ‐ 〇〇がすごい! もいいけど、それがプロダクト・チームの今や未来になぜ必要か も重要 ▸ 決定的な差がない場合、「適度に距離を取りつつ技術と付き合う」というのも選択肢になる ‐ 入れる or 入れない の2択ではなく、濃淡もありうる ▸ 撤退可能なパスを残しつつ、多少は Bet Technology のための余白を残しておくといい ‐ やっぱり未来を感じる技術に触れるのは楽しい! し、やってみないとわからないことはある ‐ あとで剥がせるようにする・人に迷惑をかけないのは前提で、Bet する余白を作っておくといいかも
© 2023 LayerX Inc. 21 ※ 前回
© 2023 LayerX Inc. 22 対戦おまちしております ▸ LayerX OpenDoor [検索]
▸ バクラクフロントエンドVision [検索]