TL;DR
- 2026 年 10 月、PHP の緊急脆弱性(CVE-2026-109618・109619)を 「最低限のリスクで技術的負債を返せる千載一遇の大チャンス」 と捉え、6 年・4 万コミット超のコードベースを一晩でメジャーアップデートしました
- バックエンド 5 リポ: Laravel 5.7 / PHP 7.3 → Laravel 12 / PHP 8.4.27
- フロント 4 アプリ: Nuxt 2 → Nuxt 4(Vue 3・Vuetify 3・Vite)、Node.js 14 → 22
- 返した負債は、サポート切れから PHP 約 5 年・Laravel 約 7 年・Vue 2 約 3 年。直接の依存 247 個のうち 180 個を外すかメジャーアップデート
- 対象は 約 1.4 万ファイル・約 285 万行・900 画面超。本番環境は十数社分
- 決定から 8 時間 36 分で全社のバックエンド、さらに 42 分で全社のフロントエンドを切り替え
- 手を動かしたのは、Slack 上で自律・協調して動く AI エージェント 8 台。人間は「統括役」の AI 1 つに指示を出し、方針と GO を決めただけ
- 出した後の不具合は「Sentry → AI が切り分け → 会社ごとに即デプロイ」で潰し続けた(2 日で PR 283 本)
- 結論: 移行は成功。脆弱性は全社で塞ぎ、止めていた機能も翌朝には戻した(10 章)
はじめに
企業向けの業務システムを開発・運用しているエンジニアです。お客様ごとにVPSの本番サーバーを持つ形で、十数社に提供しています。
この記事では、PHP の脆弱性ニュースから始まった一晩のメジャーアップデートを、返した負債・規模・AI の体制・品質の仕組み・お客様に納得していただくための政治
そして「結局うまくいったのか」まで、まとめて書きます。
1. きっかけ:X でサボっていたら、脆弱性ニュースが流れてきた
10 月 21 日の朝 10 時すぎ、X を眺めていたら PHP の緊急アラートが流れてきました。すぐ社内の Slack に貼り、監視役の AI に「調べておいて」と投げました。
やはりエンジニアは、常に X を見てサボっていないといけない。
10 分後、AI からの報告:
- 修正版はその夜 23 時に公開される
- うちは PHP 7.3.33。7.3 は 2021 年に保守が終わっていて、修正版は出ない
- 160 を超えるDockerコンテナが PHP 7.3 で動いている
昼のうちに暫定の手当て(session.upload_progress.enabled=0)を、AI にコードを洗わせて影響ゼロを確かめてから、15 時半までに全環境へ。
2. 「対応しなきゃ」ではなく「千載一遇の大チャンスや!」
正直に書くと、私はこれを「めんど・・・脆弱性に対応しなきゃ」とは捉えていませんでした。
最低限のリスクで技術的負債を解消できる、千載一遇の大チャンス! と捉えました。
古い PHP でも、パッチはたぶん誰かが作るだろうし、それを当てたら脆弱性対応OK。でも技術的負債は残ったまま。「いつかやらなきゃ」が「何かあったらどうする」で動かせない典型的なシステム。
しかし今なら、リスクを最低限に抑える材料がそろっていました。
- 難所は越えてあった。実は事前に Laravel 5.7 → 11 / PHP 7.3 → 8.2 / Nuxt 4・Vuetify 3 への移行検証をAIでやっていた。
- 人手が要らない。自律・協調して動く AI エージェントが、すでに 11 台いた(5 章)
- お客様が理解してくださる空気がある。世界中が騒いでいる(次章)
3. 政治:このタイミングは二度と来ない
技術の判断と同じくらい大事だったのが、 お客様に納得していただく段取りです。
この脆弱性は TV のニュースにもなり、ついには国のトップまで動きました。
ここで上げれば、多少の不具合が出ても「世界的な緊急セキュリティ更新です」で、お客様に納得していただける。またとない、政治的大チャンスです。
なんと、高市総理が X に投稿しました。「今夜に対応して頂きたい大至急のお願い」です。
4. この機会に返した負債
一晩で返した負債のは、ここ数年「いつかやらないと」と言い続けてきたものです。
| 負債 | 更新前 | 更新後 | EOLからの年数 |
|---|---|---|---|
| PHP | 7.3(2021 年 12 月に保守終了) | 8.4.27 | 約 5 年 |
| Laravel | 5.7(2019 年 9 月にセキュリティ修正も終了) | 12 | 約 7 年 |
| Vue | 2(2023 年末に終了) | 3 | 約 3 年 |
| Nuxt | 2(2024 年 6 月末に終了) | 4 | 約 2 年 4 か月 |
| UI | Vuetify 2 | Vuetify 3 | |
| ビルド | webpack(Nuxt 2 同梱) | Vite | |
| Node.js | 14(2023 年 4 月に終了) | 22 | 約 3 年半 |
5. コードベースの規模:開発運用 6 年・4 万コミット・285 万行
| 項目 | 数 |
|---|---|
| 歴史 | 2020 年から 6 年、5 リポで累計 42,503 コミット |
| ファイル | 約 1.4 万(PHP・Vue・JS/TS・SQL・E2E) |
| 行数 | 約 285 万行(うちアプリ本体 約 200 万行・テストと E2E 約 85 万行) |
| バックエンド | PHP など 8,351 ファイル・約 153 万行、API ルート 2,400 超、コントローラ 574、マイグレーション 1,000 本超 |
| フロント | 4 アプリで 4,256 ファイル・約 86 万行、画面 902(最大のアプリだけで 744)、コンポーネント 2,694 |
| E2E | spec 1,636 ファイル・約 46 万行 |
このうち、移行の本体になった PR 9 本の変更は次のとおり。
| 項目 | ファイル | 追加 | 削除 |
|---|---|---|---|
| バックエンド 5 リポ | 646 | 3,083 行 | 3,105 行 |
| フロント 4 アプリ | 3,720(うち .vue 2,952) | 46,386 行 | 42,927 行 |
| 合計 | 約 4,400 | 約 9.5 万行の変更 |
その後の修正も含め、10/21 22 時からの 2 日間で merge された PR は 6 リポで 283 本。人間なら半年は余裕でかかる量です。
6. 体制:Slack で自律・協調する AI エージェント
AI エージェント(自律稼働・常駐 11 台)
- 1 台 = 1 コンテナ。同じ Docker イメージを設定だけ変えて台数分立てる
- Slack のメンションで動く。受付プロセスがキューに積み、常駐の AI(リーダー)が実装役とレビュー役のサブエージェントを都度立てて、実装 → 別の目でレビュー → PR → マージ → dev へのデプロイまで自律で回す
- 自律と安全の両立。dev と stg は人の承認なしで進める。本番への反映は人間の許可制。
8. 結果:決定から 8 時間 36 分
9. バグが出ても、即潰す
- 本番ログの見張り。AI の 1 台が、切り替えた会社のエラーログと 5xx を 15〜30 分おきに前日の同じ時間帯と比べる
10. 結局、移行はうまくいったのか
うまくいきました。 目的は 3 つありました。脆弱性を塞ぐこと、負債を返すこと、業務を止めないこと。前の 2 つは達成、3 つ目も「全面停止なし・戻さずに前へ直し切った」という形で守れたと判断しています。
| 見たもの | 結果 |
|---|---|
| 脆弱性 | 全社の本番が PHP 8.4.27(修正版)に。WAF で止めていた機能は 6 時 41 分に全社で解除(止めてから 12 時間 38 分) |
| 切り替え | 十数社すべて、決定から 9 時間 18 分でバックエンドとフロントを新しい版に。 |
| エラー | 切り替え直後の見張り(6 時 45 分〜9 時)で、新しい種類のサーバーエラーは 0。2 日間で、PHP 8・Laravel 12 そのものが原因でお客様が踏んだサーバーエラーは、把握している限り 3 種類。どれも当日中に修正 |
| データ | 影響が出たのは 1 つの機能の 603 件だけ。23 分でバックアップと補正まで済ませ、全社の本番を洗って他に無いことを確かめた |
| E2E | 最大のアプリで、新しい側だけの失敗は 0 |
| 速さ | 測った画面は更新前と同等(遅かったものは直した後。例: 保存の待ちが更新前 1.2〜1.4 秒 → 新しい画面 1.1〜1.3 秒) |
| 修正 | 2 日で PR 283 本。急ぎの報告は、受けてから本番の修正まで短いもので十数分、長いものでも 1 時間半あまり |
11. 人間がやったこと
- 気づく(X で)
- 「千載一遇のチャンス」と決めてAIへ指示。
- お客様に土下座(ボス)
それ以外のほぼ全部、つまりコードの移植、E2E の書き換え、全画面の検査、十数社への配布、見張り、原因の特定、データの補正、手順書づくりは AI がやりました。
おわりに:これから要るのは、AI のやることに責任が取れるエンジニア
AI にコードを書かせること自体は、もう誰でもできます。今回効いたのは、その外側です。
- AI が 自律して動きつつ、人へ判断を返す統括役がいること
- 出した後のエラーが、人より先に AI に届き、自立して直せること
- お客様に土下座する外交戦略
これがそろっていたから、脆弱性ニュースを「千載一遇のチャンス」として取りに行けました。これを設計して組める、AI のオーケストレーションと責任が取れるエンジニアが、これからいちばん要る人材だと思います。
というわけで、仕事ください。