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

月18万行の コーディングを行った話

月18万行の コーディングを行った話

レガシーなリポジトリをドメイン分析・CQRS・イミュータブル設計で再構築し、Claude Code(Sonnet 4.6)で月18万行のコーディングを走り切った話。AIを限界突破させないための設計とドキュメント戦略を紹介します

More Decks by 株式会社イノベーション(エンジニア)

Other Decks in Technology

Transcript

  1. LINEチャットBot要件 • 年齢や資産状況からユーザーを分類できる • 分類に応じてチャットの内容を出し分けられる • 管理画面にて以下を管理できる ◦ ユーザーの分類条件 ◦

    チャットの文言、分岐 ◦ 送客先 ◦ LINEに出すFlexMessage(リッチなメッセージ)のデザイン ◦ Adminアカウント/ログイン
  2. 当時の状況 • リポジトリ内には複数のアプリケーションが同居している ◦ みんなのマネースコア ◦ みんなのおサイフ事情(運営放棄状態) ◦ 旧Admin など •

    ドメイン分析が不足しており1テーブル1モデルになっている ◦ キーワード:ドメインモデル貧血症 ◦ あとこの辺り見ると良さそう「 やはりお前らのMVCは間違っている」 • ドキュメントが少数の巨大なファイルになっていた ◦ AIのコンテキストが一瞬で消費される • 再集計バッチが1日かけても終わらない ◦ 診断の計算ロジックとの共通化を優先し、速度が犠牲になってしまっていた
  3. やったこと準備編 • ドキュメントの再配置 • 新アーキテクチャ設計、ドキュメント作成 ◦ future-architecture/* にBefore/Afterを明示 ◦ ドメイン分析 survey,

    money_socre, line, referral, content, member, admin ◦ CQRS CRUDのRとCUDを別モデル化 ◦ 1テーブル1モデル → 1集約1モデル ▪ 例)診断結果保存と診断結果表示は別モデルで定義する。両者は同じテーブルを扱う ◦ イミュータブルなテーブル設計 • バッチを軸にリファクタリング ◦ Repositoryにビジネスロジックを集約し、実装は生 SQLにした(メリデメあり) ◦ Before:偏差値計算をローカルで実行  After:計算をDBで実行 ▪ 0.5秒で終わるようになった ▪ 分割実行処理がなくなりコードがシンプルになった
  4. やったことBot実装編 • プロジェクトドキュメントセットを作成 ◦ 画面ごとのユースケース洗い出し ◦ ドメイン整理 ◦ DB設計 ◦

    画面設計 ◦ タスク分割(AI向け、主に8タスクだった) • コーディングに入る前の分析はChatGPT • コーディング、セルフレビューはClaudeCode/Sonnet4.6 • 指摘対応 ◦ 簡単なものはChatGPTにGithubを接続して依頼 ◦ 難しいものはClaudeCode ◦ 指摘のたびに再発防止相談してドキュメントへ反映 ◦ ドキュメントが増えたら圧縮・分割・削除を検討
  5. 結果と学び • 5月のコード修正量は18万行を突破 ◦ 参考:肌感、普通にAIコーディングしていると 3万行程度っぽいです ◦ 参考:3年前では1万行でドヤれる世界だったようです • ClaudeCodeはほとんど限界突破することなく走り抜けられた

    ◦ ドメインを適切に分け、 ActiveRecordをやめ、CQRSで用途も限定的にしたことが効いたはず • Sonnetでも問題なかった感触 ◦ ドキュメントを細かく分けたのが効いてそう ◦ 旧Adminと新Adminを混同することが多く、困る場面も多数あった