---
title: 高速なバージョンアップの実現奮闘記
tags: 
author: [merutin](https://docswell.com/user/merutin)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJXQVY6V7X.jpg?width=480
description: 2026/04/02 スパイダープラス Tech Talk（PHPerKaigi 2026 非公式アフターイベント） https://spiderplus.connpass.com/event/384905/ で話した内容です。
published: April 03, 26
canonical: https://docswell.com/s/merutin/ZQ2R83-cakephp-versionup-202604
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJXQVY6V7X.jpg)

“⽣成AI活⽤だけ“では済まない！
⾼速なバージョンアップの実現奮闘記
2026/04/02 merutin


# Page. 2

![Page Image](https://bcdn.docswell.com/page/3JK9Q315JD.jpg)

⾃⼰紹介
公官庁向けシステム開発 → ERPパッケージベンダー → DELTA
特定の技術にこだわらず、お客さんに合わせて何でもやっています。
直近1年くらいの仕事
- VersionUp Booster
- CakePHP
- Laravel
- Ruby on Rails
- コスト削減


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE3WPGQ1E5.jpg)

サービスラインナップ
技術負債解消⽀援
⽣産性向上⽀援
開発⽀援
システム受託開発
完全成果報酬型インフラコスト削減代⾏サービス
エンジニア特化型の採⽤⽀援AIエージェント
要求仕様に合わせたシステム開発〜納品までを実⾏
DELTAの請求代⾏
⽣成AIエージェント開発
技術アドバイザー
主要クラウドサービスに対応した
法⼈向けの請求代⾏サービス
組織/業務課題の解決に最適な
⽣成AIエージェントを構築‧導⼊サービス
技術顧問でエンジニアリング課題の解決をサポート
VersionUp booster
クラウドマイグレーション
⾔語やフレームワークの
格安‧⾼速バージョンアップ⽀援サービス
既存システムのクラウド移⾏を計画‧実⾏し、
最適な運⽤環境へ移⾏
Ops booster
24時間365⽇体制でシステム運⽤負担を減らす
包括的システム運⽤⽀援サービス
IaC booster
IaCコードの実装を格安‧最短2週間で代⾏するサービス
FinOps booster
クラウド利⽤状況の分析を⾏い、コスト状況の可視化するサービス


# Page. 4

![Page Image](https://bcdn.docswell.com/page/8EDKL19K7G.jpg)

プロジェクトの前提
- Cake2 → 最新バージョン
- 平⾏で機能開発もどんどん進めている
- UTはない。リリース前に決まった⼿順を実⾏している
- phploc
- 700ファイル以上
- 約30万⾏
- 8000⾏を超えるクラスがちょいちょいある
- Fat Model / Fat Controller


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V7PK2QZ3J8.jpg)

プロジェクトの前提
- CakePHP、 PHPを最新まで上げていく
- 処理は極⼒変更しない
- 並⾏で開発が⾛っていて、順次取り込みが必要
- デグレは許されない


# Page. 6

![Page Image](https://bcdn.docswell.com/page/2JVVD5WNJQ.jpg)

当初の想定
MCPサーバーにChangesの⼀覧をまとめて、該当のソースコードをいったん置換し
たら、⼤体バージョンアップできるでしょ


# Page. 7

![Page Image](https://bcdn.docswell.com/page/5EGLY6D5JL.jpg)

CakePHPの差分について
- 件数を数えるのがいやになるくらいは修正が⼊っている
- removedで検索すると150個出てくる


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4JQYM41L7P.jpg)

CakePHPの差分について


# Page. 9

![Page Image](https://bcdn.docswell.com/page/K74WVQR5E1.jpg)

CakePHPの差分について


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LJ1Y3PQ2EG.jpg)

現実
- そもそもChangesがありすぎる
- 単純置換とかそういう問題じゃない
- xxは全⾯的に書き換えられました。っていう1⾏のみが書いてあったりする


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GJWGP2M272.jpg)

現実
⽣成AIに任せてみたところ
## TODO: あとで実装
動きますって⾔って動かない修正ばかりで、絶対に動作しないものが出来上がった


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EZLKDQ473.jpg)

ここからが本当のスタート
- CakePHPを触ったことがないので、仕組みを理解するところから始める
- 2系、3系、最新
- 余談ですが、⽇本語ドキュメントが最新に追従してなかったので、ちょいちょ
いDocにPRしています。


# Page. 13

![Page Image](https://bcdn.docswell.com/page/Y76WQ16G7V.jpg)

フェーズ
- 試⾏錯誤
- 混乱
- ⼤量の修正と保証
- 画⾯の確認


# Page. 14

![Page Image](https://bcdn.docswell.com/page/G75MR46X74.jpg)

試⾏錯誤
- ⽣成AIに聞いても正しさの判断ができないのでまずはひたすらInput。
- CakePHPのソースもちょいちょい読んだり
- ⼿っ取り早く移⾏できるよって⾒せたかったので、特定の画⾯を移⾏してみる
- 共通処理の依存が多すぎて⾝動きが取れない
- 意図のわからないコードが⼤量にある
- AppControllerの処理が10以上のModelに依存している
- いったん不要そうな処理はコメントアウトしつつ、ログインまで動くように


# Page. 15

![Page Image](https://bcdn.docswell.com/page/9J29DVMQER.jpg)

試⾏錯誤
- ログインだけ動くようになったものの、次の処理にたどり着けるイメージがわ
かない
- Sessionにあらゆる値を書き込みしていて、どの値がどのタイミングで利⽤され
るのかがわからない
- Controller、Model、ViewなどすべてのレイヤーでSession::Readがある
- ベースとなるModelのレイヤーをきれいにするように修正を始める


# Page. 16

![Page Image](https://bcdn.docswell.com/page/DEY423XYJM.jpg)

混乱
- Modelの数は⼤体140。UTなし。全くなし。
- いったん動くっぽいもののPRを作ってみるが、何をもってして検証できている
といえるのかがわからない謎のコードが⼤量に作成される


# Page. 17

![Page Image](https://bcdn.docswell.com/page/VJNY8V1R78.jpg)

⼤量の修正と保証
- Modelの単位でSQLを⽐較できるような仕組みを作成して動的に実⾏できるよう
にした
- Sessionなどに依存しているため、Controllerを新しく作成した
- 今考えると、テストにしてもよかったのかもしれない
- SQL単位で違いがないかつ、出⼒が同じである = 移⾏前後で⼀緒の動き
- Cake2とCake3ではSQLの出⼒が変わっているので単純⽐較はできない
- alias
- 複雑な条件の網羅はせずに１つのパターンで期待値が⼀緒なことを確認する
- PRを⼤量⽣成


# Page. 18

![Page Image](https://bcdn.docswell.com/page/YE9PK65ZJ3.jpg)

⼤量の修正と保証
- ここまでの情報をSkillsにして、並列で回して⼀気に消化できるようにする
- 修正が全然駄⽬なパターンもあるので、全部⽬検でもチェック
- Contextサイズが⼤きい = Modelがでかいと出⼒が安定しない
- メソッドごとに分割をして、その単位での修正をする
- parserを使って分割、メソッド単位でCake3⽅式に移⾏後、もとに戻す
- コンテキストが⼤きくなった今では、分割しなくてもある程度動くような気も
します


# Page. 19

![Page Image](https://bcdn.docswell.com/page/GE8DRZ6YED.jpg)

⼤量の修正と保証
- PRの確認も⼤変
- 画⾯での確認はできないこともあり、⽣成AIを使って作成したものを⽣成AI
がレビューする
- 不具合はめっちゃ出ていますが、1か⽉ちょっとで全部のModelの修正ができた


# Page. 20

![Page Image](https://bcdn.docswell.com/page/LELMKD997R.jpg)

共通パーツの修正
- AppController, Application, bootstrap, app, AppTable(独⾃拡張)の修正をする
- ここがModelに依存しまくっているのと独⾃拡張が多い


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JMY2PZVJW.jpg)

共通パーツの修正
- 認証はAuthComponentがdeprecatedになることがわかっていたので、現時点
で載せ替え
- Cake2とCake3でセッションが共有できるような修正をする
- Cake2側に設定が必要だが、そのくらいで修正はできた


# Page. 22

![Page Image](https://bcdn.docswell.com/page/PJR9M16W79.jpg)

共通パーツの修正
- 認証も独⾃拡張していたので、使えるようにちょっとずついじる
- 条件によってusernameのカラムを変えるような処理をやっていた
- Authenticationでは⼀度作成してしまうと、固定になるのでちょっと⾯倒な
対応が必要


# Page. 23

![Page Image](https://bcdn.docswell.com/page/PEXQVYMVJX.jpg)

共通パーツの修正
- Cake2っぽい動作をするConverterをいっぱい作成する
- Request
- Form
- Model → Entity
こんなの本当は作成したくない...


# Page. 24

![Page Image](https://bcdn.docswell.com/page/3EK9Q3G5ED.jpg)

ClaudeCodeというか⽣成AIの現時点の限界
- FormのID⽣成ルールが変わったために、js側が盛⼤に壊れた。
- そう、JQueryを使っているのです
- Claudeに修正してもらうと、formのID指定、jsの修正やformのデータ形式を修
正するような提案をしてくる
- できないことはないけど、コストが⼤きくなりすぎるので、Formをwrapperし
てCake2と同じ動きをするように修正をしていく
与えられた課題に対しての解決は賢くできるけど、全体を⾒たときに保守しやすい
仕組みだったり、ちょっとパターンを変えた解決⽅法が苦⼿


# Page. 25

![Page Image](https://bcdn.docswell.com/page/L73WPGN175.jpg)

画⾯の確認
- 1つのエンドポイントで⼤量の分岐がある
- E2Eも⼀部作成したが、更新系が特に動かない
- ステータスが200だけど画⾯のエラーになっている
- たまたまうまく動くデータだった
- 1つのエンドポイントで数時間とける
- 都度横展開しているとはいえ、全然つぶしきれない
- int !== stringの⽐較
- array / Entity
- 意図してなかったvalidation


# Page. 26

![Page Image](https://bcdn.docswell.com/page/87DKL1WKJG.jpg)

画⾯の確認
- ちょっとの修正がModel, controller, viewのすべてに影響が出る
- 今更だが、PHPStanで型のエラーは根絶する⽅向に
- level5でめっちゃwarningが出てきた
- array/Entityの部分の変なところは⼤体みつけてくれた
- 修正したものがどのくらい動くのかなっていうのはこれから


# Page. 27

![Page Image](https://bcdn.docswell.com/page/VJPK2Q93E8.jpg)

まとめ
- ⽣成AIを使っても、難しいものは難しい
- テストないので⽣成AIの修正が正しいのかもわからない
- ⼈がどこの責任を取るのかが重要であり、ボトルネックになる
- PRのチェック、動作保証
- ⽅針さえちゃんとすれば、80点くらいまでは⽣成AIに全部任せても何とかなる
- 残りの20点が⼤変
- 現時点のClaudeは与えた問題を解くのは得意だが、本来やりたいこととしては
もうちょっと上段での修正なので、意識しないといけない


