0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIが一晩でやってくれました。PHPの脆弱性ニュースを「大義名分」に285 万行の技術的負債をAIで一括返済した話

0
Last updated at Posted at 2026-10-23

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 のオーケストレーションと責任が取れるエンジニアが、これからいちばん要る人材だと思います。

というわけで、仕事ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?