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

レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート...

レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜

ある日、父から「あるWebアプリを新しく作り替えてくれない? 」と頼まれ、私は軽い気持ちで引き受けました。元になるのは10年前に父がクラウドワークスで発注、運用してきた業務システム。貰ったコードは1ファイルにHTML・CSS・JS・PHPが混在し、GET/POSTも同じファイルで処理する「あの頃のPHP」でした。

試しにLINEで父に要望を聞いたところ「定員には認可定員と利用定員の2種類があり、どちらも施設設定で管理します」との返事。私は気づきました。この人はドメインエキスパートなんだと。

本セッションでは、このレガシーなシステムを引き継ぎ、ドメインエキスパートとの対話や既存のコードからドメインを理解し、エンティティとユースケースを抽出した上で、Slim Framework + PHP-DI +Doctrine ORMとClaude Codeでビッグリライトする取り組みを紹介します。
https://fortee.jp/phpconodawara-2026/proposal/9098247b-2db7-4c74-a64a-0198fb298045

Avatar for panda_program

panda_program

April 10, 2026

More Decks by panda_program

Other Decks in Programming

Transcript

  1. 2 © 2012-2025 BASE, Inc. 自己紹介 • 所属: BASE株式会社(プロダクトリード) ◦

    フロントエンドもバックエンドもPjMもやります ◦ 2025年は管理画面デザインリニューアルPJのチームリードをしてました ◦ 直近はカート領域を担当してます • 激推しツール: Heptabase • 激推し漫画: さむわんへるつ、カグラバチ • 活動 ◦ 2025年の執筆 ▪ 技術書典18でチーム開発の書籍を自費出版(全85P)→ ▪ 2026年は執筆抑えてますが、またどんどんやりたい プログラミングをするパンダ(X: @Panda_Program)
  2. © 2012-2026 BASE, Inc. ことの始まり 77 役割分担 ⽗: 要望、現⾏のソフトウェアとの⽐較 私:

    要件定義‧仕様決め‧技術選定‧設計‧コードレビュー AI(Claude Code): 設計‧実装 週に⼀度30分から1時間の打ち合わせ (実質的にスプリントレビュー‧スプリントプランニング)
  3. © 2012-2026 BASE, Inc. ことの始まり 88 おことわり (プロポーザルの内容との違い) • 過去に作ったソフトウェアの改修かと思ったら「同じ機能はほしいけど、

    新しく作り直していい」と⾔われたのでレガシーからの移⾏ではなくなり ました(昨年12⽉のプロポーザル提出時は改修だと考えていた󰢛) • 現⾏の技術スタック Slim Framework + PHP-DI ではなく、Symfony + Doctrine ORM(後述) • この数ヶ⽉で起きたことは今⽇全てお伝えできません。「これはみんなに も⾯⽩いと思ってもらえるであろう」ことをピックアップしてご紹介しま す。興味ある⽅は懇親会で聞いてもらえればと思います
  4. © 2012-2026 BASE, Inc. レガシーPHP転生 10 10 1 2 3

    父親とのLINEが汚染された Agentic Coding の落とし穴に 全部落ちた まとめ
  5. © 2012-2026 BASE, Inc. レガシーPHP転生 11 11 1 2 3

    ドメインエキスパートとの協業 Agentic Coding による ゼロイチ開発の理想と現実 まとめ
  6. © 2012-2026 BASE, Inc. 1. ドメインエキスパートとの協業 21 21 ⽗親とのLINEが汚染された ドメインエキスパートと協業する

    ちなみに 認可定員 = ⾃治体が定めた形式上の受け⼊れ上限数 利⽤定員 = 保育施設が施設状況や職員数に応じて   設定する実際の受け⼊れ上限数
  7. © 2012-2026 BASE, Inc. 1. ドメインエキスパートとの協業 23 23 保育施設の業務を知った 「園児の情報を登録する機能が欲しい」

    → 入力するためのデータはどこから来る? → 背景にはどのような業務がある?
  8. © 2012-2026 BASE, Inc. 24 24 保育施設の業務を知った 紙の「児童票」を中心とした業務フロー 保護者: 「児童票を記入する」「保育施設に提出する」

    施設職員: 「ファイリングする」「連絡先等を参照する」 1. ドメインエキスパートとの協業 ソフトウェアは、 • 保護者による児童票の記入・提出 • 職員による児童票の保管・参照 という業務を効率化できる 引用: フレーベル館オンラインショップ https://ec.froebel-kan.co.jp/shop/g/gB-7506602/
  9. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 31 31

    早すぎるプロトタイプ作成 (2025/12) 「帰省から帰宅後、1週間で  プロトタイプを2パターン   作成!(HTML + CSS)」 「こんなに早く出来んの?めっ  ちゃ良い!使いやすそう。  採⽤!」 1ヶ⽉後 「表側の進捗はなし。裏側を作る  のに時間がかかってて...」 「進めてるって信じてるぞ」 (⽬には光がない) 理想: 爆速プロトタイプ 現実: 技術選定‧モデリング‧ インフラ構築 etc.
  10. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 32 32

    作りすぎたガードレール (2026/01) 「コーディングルールとし て、Skill 配下にサンプルコー ドを配置すると良いんだな」 「コノパターンハSkill + Reference ニシテ繰リ返シ参 照シマス」 「Skill内ノコーディングスタイル指 定ガ100パターン以上ダ(混乱)。 ルールガ多スギテ守リキレマセン」 「『コーディングルールを守ってる かチェックするSkill』まで作ったけ ど、厳守させる必要もないよな...」 理想: コーディングルールで    統⼀的なコードベース 現実: 過剰なチェック
  11. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 34 34

    作りすぎたガードレール (2026/01) ex. 「Entityにはただ のsetterを作らない」 → 全部で150以上の ミニルール
  12. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 35 35

    崩壊した実装フロー (2026/01) 「各レイヤーの実装⽤のSkillを 作ったぞ。これを順番に実⾏す るだけで実装が完了する!」 「Entity, Service, Action, Router, Twig デ Skill ガ分カレ テイテ、実装ガ明確デス!」 「/entity, /action create, /action read, /action update, /twig create-form, /twig list...実装の終わり を⾒張って次のスキルを実⾏。PCか ら離れられないよ...」 「実装シタカラレビューシテ。次ノ  指⽰クレ」    (注)この時はAgent Team 機能 がなく、     ウォーターフォールしか出来なかった 理想: 各レイヤーの実装は    対象のSkillを呼び出すだけ 現実: 延々と続くSkill呼び出し
  13. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 独⾃パターンでコンテキストを⼤量消費、AIの性能悪化へ (2026/02)

    理想: 独⾃パターンで    ライブラリ依存を減らす 現実: 独⾃パターンのロードでコンテキ   ストウィンドウを消費、性能悪化 「Slim を使って依存関係を減 らす。フルスタックフレーム ワークは不要!独⾃のパター ンでSimpleに作る!」 「パターン化サレテイルナラ ナンデモ再現デキマス!」 「ワタシハ知ラナイパターンデス。 Skillノルールヲ参照シマス」 「毎回スキルとコードベースの調査 だけで100k消費だ。compact されず に、実装完了までいけるかな...?」 (注)この時は subagent がなく、調査等全てがメイン コンテキストだけで実施されていた
  14. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 38 38

    独⾃パターンとはどんなものだったのか “Parse, Don’t Validate”を実践。 form の⼊⼒を VO or Error Message にする
  15. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 40 40

    独⾃パターンでコンテキストを⼤量消費、AIの性能悪化へ (2026/02) フルスタックフレームワークの採⽤を決めた
  16. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 43 43

    1. 早すぎるプロトタイプ作成 この不具合は現在、解消しております → 「いつ動く」という期待値調整を丁寧にした
  17. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 44 44

    1. 早すぎるプロトタイプ作成 2. 作りすぎたガードレール この不具合は現在、解消しております → 「いつ動く」という期待値調整を丁寧にした → phpstan-symfony の導⼊で独⾃ルール削除 (PHPUnit + E2Eテストもあるよ)
  18. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 45 45

    1. 早すぎるプロトタイプ作成 2. 作りすぎたガードレール 3. 崩壊した実装フロー この不具合は現在、解消しております → 「いつ動く」という期待値調整を丁寧にした → phpstan-symfony の導⼊で独⾃ルール削除 (PHPUnit + E2Eテストもあるよ) → Design Doc(+ ADR)作成後に実装するフローへ
  19. © 2012-2026 BASE, Inc. 2. Agentic Coding によるゼロイチ開発の理想と現実 46 46

    1. 早すぎるプロトタイプ作成 2. 作りすぎたガードレール 3. 崩壊した実装フロー 4. ビッグリライト この不具合は現在、解消しております → 「いつ動く」という期待値調整を丁寧にした → phpstan-symfony の導⼊で独⾃ルール削除 (PHPUnit + E2Eテストもあるよ) → Design Doc(+ ADR)作成後に実装するフローへ → モデルがSymfonyを学習済みなので、   コンテキスト量は⼤幅削減!   websearch で最新情報ゲット
  20. © 2012-2026 BASE, Inc. 3. まとめ 49 49 • AIで無双は幻想

    ◦ 実装期間が圧縮された結果、本来なら数ヶ⽉後に表⾯化 する問題が数⽇後に噴出する世界 ◦ ただし、失敗の過程は成⻑の過程。AI利⽤に⼀気に習熟 した • ソフトウェアが対象とするドメインと使ってくれるユー ザーに向き合って着実に作ろう ◦ デキるエンジニアが今までやってきたことの延⻑ ◦ SaaS は死なないと思う
  21. © 2012-2026 BASE, Inc. 3. まとめ 50 50 • アクセス数はそれほど多くないのにハイスペックなレンタルサーバー

    • レンサバのエディタ上で開発されてきたPHPコード(1ページ1PHPファイル、Git 管理なし、フレームワークなし、ORMなし、PHPUnitなし) • ⼀事業所につき1データベース(セキュリティ⾯が考慮された結果)でDBのマイ グレーションが⼤変 etc. • AI熱中(AI依存)からの軽い燃え尽きを経験 & 復活 • ALPSも活⽤したりした 改修ではなくゼロからの作り直しでよかった... (ただし、価値を⽣んでいるコードであり、リスペクトを忘れてはいけない) 今回盛り込めなかったこと (現⾏ソフトウェアのレガシー⾯)
  22. © 2012-2026 BASE, Inc. 付録 55 55 Design Doc(+ ADR)作成後に実装するフロー

    ⽣産性アップ: 設計ドキュメント作成 → ドキュメントレビュー → コード出⼒ → コードレビュー → 動作確認 → マージ
  23. © 2012-2026 BASE, Inc. 付録 56 56 Design Doc(+ ADR)作成後に実装するフロー

    ドキュメントレビューのために⾃作ツールを使っている