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
860
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
930
Other Decks in Programming
See All in Programming
Creating Composable Callables in Contemporary C++
rollbear
0
110
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
net-httpのHTTP/2対応について
naruse
0
480
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5k
Webフレームワークの ベンチマークについて
yusukebe
0
160
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.7k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
570
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
280
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
510
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
170
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Documentation Writing (for coders)
carmenintech
77
5.4k
Thoughts on Productivity
jonyablonski
76
5.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
WCS-LA-2024
lcolladotor
0
630
Rails Girls Zürich Keynote
gr2m
96
14k
Visualization
eitanlees
152
17k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
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 [検索]