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

DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Book...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI

Think ! FrontEnd by DMM #10
https://dmm.connpass.com/event/397656/

スライド11の見出しで文字化けがおきています
正: AIの判断の余地を減らすかを基準にコンテキスト整備

Avatar for Kentaro  Matsushita

Kentaro Matsushita

August 28, 2026

More Decks by Kentaro Matsushita

Other Decks in Technology

Transcript

  1. DMMブックスのNext.js化を進めている • • • ⽬的 ◦ ユーザー体験向上 ◦ レガシーシステム脱却 状況

    ◦ 昨年度 3ページを移⾏完了 ⼈⼿で移⾏ ◦ 今年度 8ページを移⾏予定 ⼈⼿ + AIで移⾏ ◦ 5⼈のフロントエンドエンジニアで対応を進めている 課題 ◦ ⼤量の移⾏を、品質を落とさずに効率よく進めること
  2. 1ページの移⾏は画⾯移⾏とルーティング移⾏に分かれる 移⾏に必要な作業 画⾯ • 画⾯: React → Next.js 既存のReactコンポーネント資産を活かしつつ Next.js基盤へ移⾏

    • React ルーティング: PHP → Next.js 従来のPHPサーバーのルーティング処理を Next.js基盤へ移⾏ ルーティング Next.jsへ統合 画⾯ & ルーティング PHP 移⾏⼿順書をもとに、各メンバーが作業 / 既存仕様どおりに動くよう移⾏
  3. 画⾯移⾏では既存のReactコードを流⽤できる 移⾏のアプローチ 技術スタック‧設計の差異への対応 既存コードの書き換え作業がメイン データ取得 新規実装ではなく、すでに存在するコード資産 を活かした形で進めている。 全体共有の値 独⾃hook →

    TanStack Query グローバル変数 → hooks 経由で取得 想定される作業規模 1ページあたり 約10種類 の書き換え ※ 右記の記載内容は対応の⼀例 画⾯遷移 アンカー要素 → Next.js の Link その他 リポジトリ規約に合わせるための様々な対応が必要
  4. 1ページの移⾏は4つのフェーズで進む 01 02 03 04 設計 実装‧レビュー 検証 リリース 移⾏対象を調査し、タ

    スク洗い出し‧実装⽅ 針を決める 画⾯とルーティングを 実装し、レビューする デグレードがないかを 様々な観点で確認 カナリアリリースで 安全にリリースを⾏う QA / 異常系 / トラッキ ング / UX / 脆弱性/ SEO → リリース判断
  5. 既存の移⾏⼿順書をスキル化した スキル 空ページ作成 Next.js基盤側に共通レイアウトを適⽤したページを作成 コピー 既存のReactコードをそのまま移動する 配置 規約に沿って既存コードをディレクトリを置き直す ⼊⼒ 出⼒

    パス + ページ名 ページの雛形ファイル⼀式 作業対象ディレクトリ 移⾏元と同⼀構造のコピー 作業対象ディレクトリ アーキテクチャ規約準拠の配置 作業対象ディレクトリ 10種類の書き換え + 型エラー解消 ※ 再帰的に依存関係を確認して対応 適応 技術スタック差分の書き換えと、共通機能への繋ぎ直し (判断がいるところは⼈が⼊る) スキル = 決まった作業⼿順を、AIが実⾏できる形にしたもの
  6. AIの判断の余地を減らすかを基準にコンテキスト整備 区分 内容 どこに何を置くか (アーキテクチャ規約) 書いた 書いていない ⽤途別に使う関数‧ライブラリを指定する (⽇時の取り扱いやCookie操作、デバイス判定など) なぜ

    置き場所が⼀意に決まる 実現⽅法が複数あるものを、1つに絞る Lintで担保できないルールだけ書く 機械で防げることは書かない なぜそうなったかの経緯 ⼈向けの説明は、AIには冗⻑ アーキテクチャ規約を中⼼で構成 規約 = ディレクトリを処理責務で分け、各レイヤーの責務‧禁⽌事項‧実装ルールを定めた⽂書 ※ 従来より規約はドキュメント化済み、それをベースに作成
  7. 作業⽬的に応じて適切な情報を渡す形で運⽤ • 移⾏先のリポジトリにAGENTS.mdを作成 ◦ • 同じリポジトリを、作業⽬的の違う2チームが触る運⽤ ◦ • 実装‧レビューで同じものをAIが参照する形になっている エンハンス(機能改修)

    / 基盤提供(Next.js化)のチームが存在 作業⽬的に応じて適切な情報をAIに渡す形にしている ◦ リポジトリ規約はコンテキストに含む ▪ ◦ 作業内容が何であっても守るべきだから PRD‧ADR‧Issueは個別で渡す ▪ 作業⽬的や内容によって変わるものだから
  8. 実際のページで移⾏トライアルを実施した • スキルとコンテキストを⽤意して、まず1ページで試した ◦ • Claude Code と Devin を、メンバーごとに割り振って試した

    ◦ • ⾒た観点:コスト‧作業時間‧完了できるか∕作業のしやすさ‧精度 チーム全員がスキルで実装できることを確認した 移⾏ツールとしてClaude Codeを選んだ ◦ 実装中にAIにフィードバックしながら、成果物を仕上げていくスタイルを好むメ ンバーが多かった トライアルで分かったこと → AIに作業を任せると、開発者1⼈でページ全体のコードを扱えるようになる
  9. 画⾯移⾏を機能で分けるのをやめ、ページを並⾏させた 従来(1ページの中を機能単位で分担) 現在(1ページ最⼤2名 × 3ページ並⾏) ページ A ページ A 画⾯移⾏

    機能 a 👤 機能 b 👤 機能 c 👤 ルーティング移⾏👤 ページ B 画⾯ 👤 画⾯ 👤 ルーティング ルーティング 👤 👤 ※ ページ B は、まだ着⼿できない 1ページの分担は、画⾯移⾏ + ルーティング移⾏ の最⼤2名 = 並⾏の単位が、ページ内の機能からページそのものに変わった ページ C 画⾯ 👤 ルーティング (兼任)
  10. 実装は「反復」だけど「定型」ではなかった 当初の想定 実際の状況 ⼿順書があるから、スキルに落とし込める 暗黙の判断やばらつきが多く、修正が多発 実装⼿順も、⽬指す成果物も、移⾏元コードの設計⽅ 針も似ているため、⾃動化が可能と予測していた • ページごとの実装のばらつき(コーディングス タイルや利⽤ライブラリ)をスキルが拾いきれ

    ない • ⼈⼿のときは開発者が「よしなに」やってい た、⼿順化されていない判断の繰り返しが浮き 彫りに 結論:反復だけど定型じゃない(定型の度合い=分岐や考慮の少なさ) どうあるべきか(ゴール)は共通していたが、どうやるか(アプローチ)はページごとに異なっていた
  11. スキルは使いどころを選ぶものだった • 2ページを並⾏で開発し終えたあと、AI活⽤をチームで振り返った • ページごとにばらつきがあり、スキルを全⾯的には使えない • ⾜りない部分は、⼈+AI協業でカバーした ◦ • (コンテキスト+対話で最終成果物まで作り込む)

    開発者は熟練者が多く、AIとの対話で最終成果物まで作り込める ◦ スキルの出⼒は中間成果物。そこから仕上げる⼿間を考えると、 最初から最終成果物を⽬指したほうが速いと感じる場⾯があった → スキル利⽤は任意でよい、とチームで確認した
  12. 品質を落とさず、並⾏して移⾏できるようになった 昨年度の移⾏体制 今年度の移⾏体制 ⼈⼿による逐次移⾏ ⼈⼿ + AI による並⾏移⾏ 1ページずつ進める開発プロセス 最⼤

    3ページ を同時に並⾏して移⾏可能に 進捗状況(2026年度) ‧4⽉〜7⽉:2ページをリリース(今年度計画:8ページ) ※リリース後も安定稼働中 ‧現在:3ページの移⾏を並⾏して推進中 ※ 検証⼯程の⾒直し もあわせて実施し、開発プロセスの並⾏化に追従できる体制を構築
  13. 1⼈が扱えるコード量を増やせたことが移⾏に効いた 対象 想定 実際 スキル ⼿順書があるから、実装を⾃動化できる 成果物の修正が頻発し、 ページごとの差分を拾いきれなかった コンテキスト 実装とレビューの精度を上げる

    想定どおり効いた。 増えたコード量を⽀える⼟台になった 作業範囲 (当初は論点にしていなかった) ここが⼀番効いた。 1⼈が扱える量が増え、分担を変えることに繋がった スキルは、期待した範囲まで⾃動化できなかった。それでも移⾏は回った AIに合わせて作業範囲を広げ、増えたコード量をコンテキストで⽀えた ⼈⼿時代の分担のままでは、これは成⽴しなかった
  14. 条件が変われば、⼿段も変わる • 今回の判断は、既存コードを流⽤でき、⼿順が確⽴していた条件で出たもの • この先には jQuery のページの移⾏を予定している • ◦ 既存コードの流⽤が効かない

    ◦ 移⾏の実績も、確⽴した⼿順もない ゼロから作るなら、逆にスキルが効くかもしれない → 今回のやり⽅が通じるかは、次のjQueryページ移⾏で試すことになる