第十話 障害の夜
十月の終わり、金曜の夜。
その日は朝から空気が悪かった。天気のことではない。
小さなトラブルがいくつも重なり、何かがずれたまま一日が進んでいる感じがした。
顧客先の問い合わせが普段より多い。田中は午前中からDBの遅延対応に追われ、秋山は仕様変更の火消しに走り、木村はレビューと会議のあいだを行き来している。
翔太も朝から二件の修正を抱え、昼休みを削ってようやく追いついた。
そういう日は、たいてい夜に何か起きる。
根拠はない。ただ、この半年で身についた嫌な勘があった。
定時を過ぎたころ、社内チャットに通知が飛んだ。
本番環境 一部機能停止
集計系ジョブだけではない。画面遷移の一部でもエラーが出始めている。
田中が短く「来たか」と言い、木村はすぐ監視画面へ切り替えた。
「佐藤君、残れる?」
「はい」
答えるより先に、残るつもりだった。
二十時。
オフィスの空気がひとつの方向へ揃う。
誰も騒がない。だが全員の視線が画面とチャットと電話に散り、ひとつの障害を別々の角度から囲み始める。
インフラ側の疎通確認。
業務側への影響整理。
顧客への一次連絡。
ログ採取。
暫定回避策の検討。
翔太は木村の指示で、影響範囲の見える関連ジョブ一覧を洗い出し始めた。
「夜間バッチだけじゃない」
木村が画面を見ながら言う。
「共通部品を噛んでるところ、全部揺れてる」
共通部品。
つまり boundary を含むあの領域だ。
「原因はそこですか」
「まだ断定しない」
そう答えながらも、木村の手は最短距離でそのモジュールへ向かっていた。
もう疑っている。
たぶん昔から。
二十一時十分。
画面の一部で入力エラーが連続発生。
二十一時二十二分。
別機能でタイムスタンプ不整合。
二十一時三十分。
監視ツールが瞬断。
正常に戻る。
また揺れる。
まるでシステム全体のどこか深い場所で、目に見えない歯車が噛み合わなくなっているようだった。
翔太はログ採取を続けた。
手元で保存して、比較して、時系列を並べる。
その最中、また現れた。
Boundary Layer mismatch
座標再解釈に失敗しました
維持式低下
境界層損傷率 17%
今度は四行。
しかも増えている。
翔太は即座にスクリーンショットを取った。
保存成功の表示が出る。
だが開いた画像には、通常ログしか写っていなかった。
「くそ……」
思わず声が漏れる。
「見えたか」
木村が低く聞く。
「四行です。さっきより増えてる」
木村は頷き、驚かなかった。
田中がそのやり取りを聞きながら、別のログ採取を続けている。
「木村さん、もう“普通の障害”じゃないですよね」
翔太の声は、思ったより冷静だった。
冷静であることが逆に自分を怖がらせた。
木村は短く答える。
「昔から、そうだった」
それだけで十分だった。
もう引き返せない。
少なくとも、見てしまった側としては。
二十二時を過ぎると、影響はさらに広がった。
顧客環境からの応答が一部不安定になり、運用側の確認用画面でも値が一瞬だけ化ける。
秋山が電話口で必死に一次説明を続ける。
インフラ担当がサーバ再起動の可否を確認する。
だが木村は再起動を止めた。
「いま切ると何が飛ぶかわからない」
その言い方が、サーバの話をしているように聞こえなかった。
二十二時四十分。
木村は翔太へ共有フォルダの奥にある古いリポジトリを開くよう指示した。
「ここ?」
「そう。高瀬さんが最後に触ってた枝」
翔太は一瞬、息を呑んだ。
ついにその名前が、実際のファイルの場所と結びつく。
古いブランチには、通常の修正とは別に、コメントだけが異様に多いファイルがいくつも残っていた。
説明というより、警告に近い文。
意味のわからない単語。
削除済みのコード断片。
そして、ひとつのファイルの末尾近くに、それはあった。
// ここまで読めたなら、まだ戻れる
翔太の背筋が冷たくなる。
その下に、未使用のメソッドがコメントアウトされたまま残っている。
メソッド名は奇妙だった。
open_gate()
「これ……」
木村が横から画面を見つめる。
「高瀬さんが消える少し前に残したやつだ」
「なんで残したんですか」
「消そうとして、消せなかったのかもしれない」
その曖昧さが、妙に本物だった。
意図して残したのか、途中でやめたのか、わからない。
わからないまま残るものだけが、後から発見される。
「実行したことあるんですか」
木村は答えなかった。
代わりに、ファイル内検索を指示する。
翔太が検索窓に gate を入れると、別の箇所にも古い参照が出た。
ジョブ管理側。ログ整形側。共通部品側。
すべてコメントアウトされているか、未使用扱いになっている。
けれど完全には切れていない。
まるで、閉じたはずの配線がどこかでまだ細くつながっているようだった。
二十三時五分。
オフィスの照明の一部が一瞬だけ明滅した。
誰かが顔を上げる。
停電ではない。
だが、同じタイミングで監視画面のログが崩れた。
英語。日本語。見慣れない記号。
消える前に、翔太は一行だけ読み取った。
召喚文への遷移条件を満たしました
「何だよ、それ……」
田中の声がかすれる。
彼にも見えたのだ。
初めて、“残らない側”が複数人の現実になった。
木村が即座に言う。
「サーバは触るな。ネットワークも切るな。佐藤君、そのメソッド開いて」
翔太の指が震える。
だが操作は止まらなかった。
高瀬が残した open_gate()。
コメントアウトされた内部処理を開く。
そこにはJavaともC#とも言い切れない、混じりもののような記述があった。
関数。引数。例外処理。
その中に、明らかにコードではない文字列が挟まっている。
──境界定義の再解釈を開始
──外部思考形式の接続を試行
──保守要員を要請
翔太は画面を見つめたまま、低く言った。
「これ、コマンドじゃない」
木村が答える。
「たぶん、召喚文だ」
その言葉が発せられた瞬間、オフィスの空気が変わった。
比喩ではなく、本当に圧が変わったように感じた。
耳が詰まり、奥歯に鈍い振動が伝わる。
モニターの白が強くなり、文字の輪郭だけがやけに鋭くなる。
翔太は画面から目を離せなかった。
コードの中に、もうひとつ別の文法が混ざっている。
自分はそれを読める。
読めてしまう。
外部思考形式。
それが自分のことだと、理屈ではなくわかった。
「閉じろ、佐藤君」
木村の声が遠く聞こえる。
「いま閉じるんだ」
だが指が動かなかった。
画面の中ほど、コメントアウトされているはずの行が、勝手に色を取り戻していく。
緑だった文字が白へ変わる。
無効だったものが実行可能なものへ戻っていくみたいに。
停電のような暗転が一瞬だけ来た。
次の瞬間、翔太のモニター全体に、黒い背景と白い一文が浮かぶ。
括弧が閉じれば、門は開く。
その下で、カーソルがひとりでに点滅している。
待っている。
入力を。
翔太は息を呑んだ。
何を打てばいいのかわからない。
なのに、指先のどこかでは、もう知っている気がした。
背後で木村が机を蹴る音がした。
田中が何か叫んでいる。
秋山の声も聞こえる。
だがそれらは急に水の底みたいに遠くなった。
翔太の右手が、意思とは半分無関係にキーボードへ伸びる。
開き括弧。
閉じ括弧。
ただそれだけを打ち込む。
()
Enter。
世界がひっくり返るとき、音はしなかった。
まずモニターの白が限界まで強くなり、次にオフィスの輪郭が紙みたいに薄くなった。机、椅子、木村の腕、田中の顔、天井の蛍光灯、それらがいっせいに「画面の向こう側」に退いていく。
代わりに、見たことのない文字列が空間そのものに走った。
床が傾く。
耳の奥で金属の門が開く音がした。
最後に見えたのは、木村がこちらへ手を伸ばしている姿だった。
その口が何かを叫んでいる。
聞こえない。
ただ唇の形だけで、翔太にはその言葉が読めた。
戻れ。
次の瞬間、光がすべてを飲み込んだ。




