Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑なフォームに立ち向かう Next.js の技術選定

複雑なフォームに立ち向かう Next.js の技術選定

【Next.js特集】フロントエンド技術選定の裏側 〜直面する技術的課題とは?〜(Findy Job Lunch Talk)
https://findy.connpass.com/event/365033/

Avatar for Takashi Machinaga

Takashi Machinaga

September 16, 2025
Tweet

More Decks by Takashi Machinaga

Other Decks in Programming

Transcript

  1. 13

  2. 悩み:親⼦コンポーネントが相互依存しやすい - React は親から⼦コンポーネントへの単⽅向の依存が基本 - React Hook Form は⼦が親コンポーネントの関⼼事を把握 する設計になりがち

    - 本来は依存の向きを逆転させて親から⼦への単⽅向の依存 にするのが理想 - フォームの実体からしか型を抽出できない 14
  3. パフォーマンスの現実 - React Hook Form は Uncontrolled で⾼パフォーマンスを謳う - フォームが⼩規模な間は

    Controlled/Uncontrolled で性能差はほ とんどない - ⼤規模になると⼀⾒優位だが watch などを頻繁に使うため結局重 くなる傾向 - ⻑期的に⾼パフォーマンスを維持するには、変更容易性が重要 - React Hook Form の持ち込む複雑性が変更の余地を削る 17
  4. React Hook Form は - フォームが⼤きくなればなるほど⾟くなりがち - 本来ビジネス要件が複雑で⾟いこそライブラリに助けて欲しい - 複雑で⾟い時にライブラリでさらに⾟くなる

    - 複雑なフォームから React Hook Form を取り除くのは難しい - 複雑性を抱えたまま機能開発することになる - 「みんなが使っているから」で選べるライブラリではない ※ → どうすれば複雑なフォームの変更容易性を維持できるのか? ※ エコシステムを最⼤限活⽤する観点では⼀定合理的 18
  5. Server Actions - RPC のようにサーバーサイドで form の action を処理 -

    Next.js では v14 から利⽤可能 - 本質的なビジネス要件の複雑さを解決はしない - UX を考慮するとブラウザ上のバリデーションは残り続ける - テスタビリティが低い 19
  6. テスタビリティ 複雑なロジックに⽴ち向かうにはテストをどこまで徹底できる かが鍵 - サーバーとブラウザにまたがるテストは実装が困難 - ブラウザのみで完結する場合でも React Components や

    Hooks にロジックが集まるとまだテストが難しい - フロントエンドではテストコードの⽅が本体のアプリケー ションより書くのが⼤変なケースも多い 20
  7. テスタビリティ React の世界から離れて、テスタビリティを向上させる - React の世界の外側のステートとして Zustand を利⽤して ビジネスロジックを React

    から分離する - React ⾮依存の状態管理システムとしてテストできるよう になる - React の世界と繋ぐこともできる - テストは React の外で、アプリケーションは React の世界 で動作する 21
  8. 留意事項 - Global Store を推奨する意図はなく、むしろ Scoped Store を推奨 - Global

    Store がもたらす複雑性もある - ⽤法⽤量を守って正しくお使いください - Zustand は Scoped Store としても利⽤できる 22
  9. 23

  10. まとめ - 複雑な toB フォームで React Hook Form を使うと、コン ポーネント間の依存関係が複雑化し認知負荷が⾼くなる

    - Server Actions は本質的な複雑さは解決せず、テスタビリ ティが低い - Zustand でビジネスロジックを React から分離し、React ⾮依存でテスト可能な状態管理を構築 24