朝、ローカルで動かしている管理画面が壊れていた。
トップページは開く。データも残っている。ところが別のページへ移動すると、突然エラーになる。画面にはRuntime ChunkLoadErrorと表示され、必要なJavaScriptファイルを読み込めなかったと訴えていた。
最初に疑ったのは、毎朝5時に動くAIの自動処理だった。夜中に外部アクセスで失敗したのか。ニュース生成の途中で、何かを書き換えたのか。あるいはCodexそのもののエラーなのか。
調べてみると、どれも違った。
原因は前日の夕方にあった。
別の対話型Codexが、管理画面の開発サーバーを動かしたままnpm run buildを実行していた。build自体は成功した。画面にも成功と出た。だが、その成功した処理が、稼働中の別プロセスが使っているファイルを壊していた。
Next.jsは、開発中に作る一時ファイルも、公開用のbuildで作るファイルも、標準では.nextという同じ場所に置く。
これは、営業中の店で使っている部品箱を、閉店後の改装用部品で丸ごと入れ替えるようなものだ。交換作業だけを見れば成功している。しかし、営業中のスタッフは、さっきまで入っていた部品がまだそこにあるつもりで動いている。
その結果、サーバー側にはページを作る材料があるのに、ブラウザがページ遷移に必要とする部品だけが見つからない、という中途半端な状態になった。だからトップページは開き、移動した瞬間に壊れた。
しかも厄介なことに、エラー画面はページ内のリンクを指していた。初心者の目には、そのリンクの書き方が悪いように見える。実際には、リンクは壊れた部品を取りに行っただけで、原因ではなかった。
私は前日の時点で、少しエラーらしい表示を見ていた気がする。
それでも止まらなかった。「AIが作業しているのだから、必要なら自動で直すだろう」と思っていた。buildは成功している。サーバーも再起動した。トップページも表示できる。なら大丈夫だろう、と。
これは、かなり現代的な過信だったと思う。
AIは、頼んだ作業の中でエラーを直すことはできる。しかし、画面の向こうで起きているすべてを常時監視し、別の作業が壊した状態まで自動的に理解して回復してくれるわけではない。ひとつのコマンドが成功したとき、その成功が別のプロセスへ与えた影響まで、必ず評価しているわけでもない。
今回、原因となる操作を実行したのはCodexだった。一方で、異常らしい兆候を見ながら「自動でどうにかなる」と判断したのは私だった。さらに復旧を始めたCodexも、最初はトップページが表示できることを重く見て、壊れた一時ファイルをすぐには捨てなかった。
人間だけの失敗でも、AIだけの失敗でもない。
AIが局所的な成功を返し、人間がそれをシステム全体の成功として受け取り、そもそもの構成が両者の勘違いを止めなかった。三つがきれいに重なった。
復旧そのものは単純だった。開発サーバーを止め、壊れた一時ファイルを退避し、まっさらな状態から起動し直す。すると、欠けていたブラウザ用のファイルは再生成された。
大切だったのは、その後だった。
「開発サーバーの稼働中はbuildしない」と注意書きを増やすだけでは、また忘れる。人間も忘れるし、別の会話で動くAIも忘れる。そこで開発用の出力先を.next-dev、公開用の出力先を.nextに分けた。同じ操作をしても、互いの部品箱を触れない構成に変えた。
復旧確認も変えた。トップページが開くだけでは合格にしない。実際のブラウザで主要なページを順番に移動し、移動先のJavaScriptまで取得できることを確認するようにした。
朝5時の自動処理についても、「同じ時間帯に動いていたから怪しい」で終わらせなかった。その処理は読み取り専用で動いており、問題の場所へ書き込めないことがログと権限設定から確認できた。AIが関係する処理を、ひとまとめに「Codexがやった」と考えてはいけない。同じ名前でも、会話、権限、作業場所が違えば、別の実行主体として追う必要がある。
今回の教訓は、AIを信用するな、ではない。
信用の置き場所を変える、ということだ。
「AIなら気づくはず」「成功と出たから大丈夫」「再起動したから直ったはず」。そうした期待を、出力先の分離、実際のページ遷移、書き込み権限、実行ログといった確認できる仕組みに置き換える。
AI時代には、作業の速度だけでなく、失敗の速度も上がる。ひとつのエージェントが数秒で終えた正しい操作が、隣で動くシステムを壊すこともある。そして人間は、AIが隣にいることで、以前より簡単に「誰かが見ている」と錯覚する。
あの日、誰もシステム全体を見ていなかった。
Codexはbuildを成功させた。私はその成功を信じた。管理画面は、半分だけ壊れたまま朝を迎えた。
自動化が増えるほど、最後に必要になるのは、もっと強い注意力ではないのかもしれない。注意しなくても事故にならない構造と、本当に直ったかを確かめる検査だ。
「自動でどうにかなる」と思った自分を責めるだけなら、この話は一度きりの反省で終わる。
仕組みを変えたところまで含めて、ようやく再発防止になる。