背景
TryCheckは当初、CakePHPで開発していました。
しかし現在、PHPフレームワークのシェアはLaravelが優勢になっています。
今後開発メンバーが増えた場合の保守性や採用難易度を考えると、Laravelへ移行した方が長期的に有利だと以前から考えていました。
とはいえ、
- 移行コストが大きそう
- 既存コードの理解が重い
- 影響範囲が読めない
といった理由から、なかなか踏み出せずにいました。
実際には、最初は「本当に移行できるのか?」という半信半疑の状態からスタートしました。
実践したこと
今回、AI開発エージェント(Claude Code)を併用して移行を進めたところ、想像以上に現実的な作業量で前に進められました。
この記事では、実際の移行作業を整理しながら、
- AIはどこで役に立ったのか
- 何が楽になったのか
- 気をつけるべきポイント
を実体験ベースでまとめます。
なぜAIを使ったのか
今回の方針はシンプルです。
CakePHPからLaravelへ移行したい
とAIに伝え、依存関係の整理や修正方針の候補を出してもらい、こちらで判断して進める方式にしました。
Claude Codeはリポジトリ全体を解析し、
- 依存関係
- ルーティング構造
- 認証構造
- DB設計
を横断的に把握し、移行時の判断材料を提示してくれます。
例えば、Controller間の依存関係や未使用処理の候補なども提示され、移行順序を決める際の判断材料になりました。
実際の流れ:
- AIが修正方針や候補を提示
- AIが移行コードを生成・修正
- 内容確認
- 承認して反映
- 疑問点のみ質問
AIは設計レビューやリサーチだけでなく、実際の移行コード生成や修正作業も担当しました。
ただし最終的な判断と確認は人間側で行う、という役割分担で進めました。
何をしたか(移行フェーズまとめ)
① 移行の土台づくり
- Laravelベース構成作成
- レイアウト/フロント基盤整備
- CSSリセット・フォント統一
- CakePHPフロント統合
- DBスキーマ移行
② ルーティング・テンプレ・認証統合
- API Routes / Web Routes統合
- Bladeテンプレート移行
- Laravel Auth + Sanctum導入
- CakePHP互換認証構築
- フォーム修正
③ セキュリティと運用面
- CAPTCHA実装
- エッジケース修正
- バリデーション整理
- 既存不具合修正
④ 移行完了整理
- 仕様書更新
- ドキュメント整理
- 移行完了明文化
AIなし vs AIあり(体感)
最大の差は 全体把握と移行コスト でした。
AI開発エージェントの利用では、
- 全体像把握が高速化される
- 差分抽出が早くなる
- 反復修正が楽になる
結果として「移行そのものの重さ」はかなり軽くなったと感じています。
| 項目 | 従来移行 | AI移行 |
|---|---|---|
| 全体理解 | 数週間 | 数時間 |
| 移行作業 | 1週間 | 1日 |
| 差分把握 | 手作業 | 即時 |
| 心理的障壁 | 高い | 低い |
Claude Codeが役に立ったポイント
-
既存コードの読み解きが速い
依存関係や影響範囲の把握がスムーズ。 -
移行時の修正パターンが整理できる
ルーティング、テンプレ、認証の差分が俯瞰できる。 -
細かい修正の反復がラク
UI調整や軽微な修正を高速に回せる。
移行で苦労したこと①:構造差の理解
AIによる移行自体はスムーズでしたが、設計思想の差をこちらが理解するのに少々手こずりました。
以下に、CakePHPとLaravelの差を列挙します。
ORM思想の違い
- CakePHP:Tableオブジェクト中心
- Laravel:Model中心(Eloquent / Active Record)
CakePHPはTableクラスがクエリ発行やバリデーションの主役となることが多いですが、LaravelのEloquentはモデルインスタンスそのものがデータ操作の責務を持つActive Recordパターンです。この「ロジックを置く場所」の思想が異なるため、単純な置換では対応できませんでした。
Middleware構造
Laravelでは、認証や認可、ログなどの処理がMiddlewareへ明確に分散されます。
CakePHPにもMiddlewareは存在しますが、既存の構成(特に旧バージョンからの慣習)ではControllerの beforeFilter などに処理が集中しがちです。Laravelへの移行にあたっては、Controller中心の設計から、責務を各層へ分離させる構造へマインドセットを切り替える必要がありました。
認証構造
- CakePHP:AuthComponent(旧)/Authentication plugin中心
- Laravel:Guard / Provider / Middleware の多層構造
CakePHPではComponentが担っていた役割が、Laravelでは「どう認証するか(Guard)」と「どこからユーザーを取得するか(Provider)」に分離されています。この多層的な構造を正しく理解し、Laravelの流儀に合わせることが、移行作業において特に重要でした。
移行で苦労したこと②:AIがこちらの指示を素直に聞きすぎる
Claude Codeで開発をしているとついつい漫然とエンター連打で編集を承認しがちになります。
しかし、AIもたまに困った提案をしてくるので承認前にきちんと目を通しましょう。
事例1:セキュリティを犠牲にして動かそうとする
主にミドルウェア周りで、「この提案、確かに動くようになるけど、セキュリティが犠牲になのでは?」という提案を何度かされました。
おそらくこちらが「なんとか動かして欲しい」と提案すると、セキュリティ問題よりも「動くこと」を優先してしまうのでしょう。
事例2:フロントのチラつきの多発
分岐として、「未ログインユーザだったら非表示」というケースだとします。
この際に、一度表示→未ログインだから非表示、と言うフローを提案され、フロントがちらつくと言う事例が多発しました。
これについても「非表示にして」しか指示を出しておらず、AIがそれを素直に聞いてしまったことによるものと思われます。
対策:claude.mdに明記する
あれ?と思ったら都度、下記のようにclaude.mdに追記していきましょう。
- セキュリティを犠牲にした編集は行わないこと
- フロントのチラつきには常に留意すること
ただし明記してもおかしな挙動は0にはならないので、AIの提案内容の確認はきちんと行いましょう。
Claude Code利用時の注意
レートリミット
長時間連続利用は制限に注意が必要です。
対策:
1タスク = 作業は小さく分割する
コンテキスト圧縮後のズレ
長いセッションでは文脈がズレることがあります。
対策:
1タスク = 1コンテキスト
AI開発エージェントを使って感じた本質
従来:
- 全体理解だけで1週間
- 大量手作業でエラーが大量発生
AI開発エージェント利用:
- 全体像把握高速化
- 差分抽出即時化
- 修正反復可能、エラーも最小限
AIはコード生成や修正も担ってくれましたが、
実際に最も大きな変化を感じたのは、
既存システムの理解コストを劇的に下げてくれた点でした。
今後、レガシー移行は「大規模プロジェクトだから難しい」のではなく、
AIを前提にどう進めるかが重要になると感じています。
まとめ
- CakePHP→Laravel移行はAI開発エージェントの利用でかなり容易になる
- Claude Codeは読み解き・実装・修正すべてで有効
- フレームワーク移行の心理的障壁は下がる
レガシー移行に悩んでいる場合、AI開発エージェントの利用は非常に有効な選択肢だと思います。
参考
Laravel Documentation
https://laravel.com/docs
Authentication
https://laravel.com/docs/10.x/authentication
Eloquent ORM
https://laravel.com/docs/10.x/eloquent
おまけ
本記事で触れた移行を経て、フィードバックツール「TryCheck」を先日公開しました。
CakePHPからLaravelへの移行やAI開発エージェントの知見も、このプロダクト開発の中で得られたものです。
もし興味があれば、こちらもご覧いただけると嬉しいです。
https://trycheck.jp/