例外修復譚

例外修復譚 第1話「序章」

夜は、いつだってバグを抱えていた。鈍く光るモニターが並ぶ小さな作業室の中で、二十九歳の男は冷めたコーヒーを前にしてじっと画面とにらめっこを続けていた。窓の外には開発ビルの裏手を濡らす小雨だけが見え、時計はもう深夜を回っている。彼の名は――まだ、記憶の中では単純な名前でしかなかったが、仕事場では誰より厳密だった。再現条件を作り、ログを比較し、修正を入れてまた再現試験を回す。正確に、なによりも確かめること。そこにだけ屈折のない道があると信じていた。

夜は、いつだってバグを抱えていた。鈍く光るモニターが並ぶ小さな作業室の中で、二十九歳の男は冷めたコーヒーを前にしてじっと画面とにらめっこを続けていた。窓の外には開発ビルの裏手を濡らす小雨だけが見え、時計はもう深夜を回っている。彼の名は――まだ、記憶の中では単純な名前でしかなかったが、仕事場では誰より厳密だった。再現条件を作り、ログを比較し、修正を入れてまた再現試験を回す。正確に、なによりも確かめること。そこにだけ屈折のない道があると信じていた。

この日は、発売前のテストビルドが抱える「おかしなもの」を追っていた。仕様外の出力、突発的に失われるセッション、ユーザーの行動ログの空白――日常的に目にする異常ではある。だが、端末の奥にひとつだけ、いつもとは違う名前が残っていた。ファイル名は短く、白いテキスト行にぽつんと書かれている。「生存者ログ」。それはこのビルドには存在しないはずの概念だった。仕様書にも、設計書にも、その名は見当たらない。

"何かの残骸か。テスターが仕込んだいたずらか" と彼は呟いた。言葉は出たが、その手は既にマウスを動かし、ファイルを開いていた。ログは一覧だった。識別子と時刻、短いメモ。どれもありふれた列に見える。だが、末尾の一行が、画面の黒にだけ濃く残っていた。

まだ一人いる

その短い句は、メタデータのどこにも紐づかない。差分チェックで他のビルドに照合しても、ただそこだけが「ある」。彼はプロトコルを思い出した。未承認のデータは消すべきだ。上司に報告して修正指示を待つべきだ。だが、慣性が彼の判断をねじ曲げる。ログを消すことは、証拠を消すことに等しい。検証者にとって、見つけた矛盾を放置することは、できない罪だった。

画面の端に、デバッグ用の差分ソフトが淡く動いている。彼は三つのウィンドウを同時に開き、行の一致率を叩き出した。いつもならこれで手続きが終わる。しかし、指先が止まらない。理由はない。単純な好奇心だった。あるいは、目の前の「まだ一人いる」という言葉が、消してはいけないフラグに見えたからかもしれない。彼は記録を別のドライブにコピーし始めた。

コピーは進んだ。秒が、細かいカウントで進んでいく。だが、三分の一ほど進んだところでモニターの表示がわずかに歪んだ。テキストの行間が微かにずれて、文字列の輪郭が赤い線で縁取られたように見える。彼は目を凝らした。プログラムの表示バッファにノイズが乗ったのか、あるいは疲れ目が生んだ錯視か。だが赤は違った。画面の中で、それは括弧の形をしていた。二つの弧が向かい合い、まるで何かを包み込もうとするように、淡く、だが確かにそこにある。

赤い括弧。そんな表示様式はUI規約にない。彼はすぐログ出力を止め、プロセスのツリーを眺めた。起動しているのはいつものデバッグツール、差分ツール、仮想環境。けれどそのいずれもが異常を報せていない。システムログにも致命的なエラーはなかった。なのに、モニターの中央で赤い線は広がり、画面の縁をなぞるように伸びていく。弧が交わるたび、文字列の一部が白く凍りついたように止まり、次にその停止した部分から、細い冷たい音が聞こえた——端末が発する微かな息のような静電気音。

"シャットダウン…" 彼の指が、強く、セーブを止めようとした瞬間、部屋の電灯が一度だけフラッシュし、世界が引っ張られるように変わった。画面上の文字がひとつの律動で波打ち、赤い括弧が裂け目のように横に裂けてゆく。裂け目は画面だけに留まらず、窓の外の雨までもを引き裂くように見えた。冷たい風が作業室に流れ込み、書類がめくれ、コーヒーカップの表面が内側から割れていく。

彼は何をしているかを理解していた。そんなことは物理的にあり得ない、という認識の筋道が、いつもどおり冷静に作業手順を組み立てた。だが体が先に反応した。彼はもう一つのキーを叩き、外付けドライブへの書き込みを強制的に完了させた。データのコピーは終わった。ファイル名は表示され、コピー先のディレクトリに、白い文字で「生存者ログ」と残った。

その瞬間、何かが終わった。あるいは、何かが始まった。裂け目は画面を越えて広がり、テレビのような画面の縁を押し広げた。光が、赤い括弧の輪郭に沿って、内側から泡のように沈んでいく。それは静かで、しかし確実な力を持っていた。彼は背中から刃物で切られるような痛みを感じ、座席から倒れそうになるのを手で押さえた。胸の奥が消えたような、空になったような感覚。視界が遠ざかる。

だが、視界の奥では、まだ声があった。最後に残った端末のウィンドウが、ひとつの短い行を吐き出した。白い文字が赤い縁に押されて溶け、音になった。

ロールバック――

その語は、彼の手帳の片隅に、学生時代にメモしたテスト用語と重なった。復帰と戻し、状態の巻き戻し。ソフトウェアの世界ではしばしば使う言葉だ。だがそれはここでは違う響きを持った。ウィンドウの下端から、ひとつの短い断片がこぼれ落ちるように現れた。

まだ一人いる

言葉が、息になり、霧になり、そして冷たい世界の中に散っていった。次の瞬間、彼の世界は裂けた。

白い光と冷たさ。雪はまだ凍っていない新しい、粉砂糖のような質感だった。息が、どこからともなく生まれ、目にしみる。彼は自分の身体を、まるで子供のように軽く感じた。手が小さく、指が短い。重力のかかり方が違う。思考は残っている。言葉は出ないが、検証の癖がそのまま残った。周囲の変数を無意識に並べて、彼は自分がどこにいるのかを推定しようとした。

空は灰色で、遠くに黒い建物の屋根が見える。人の声が低く、近づいてくる。粗末な布にくるまれた小さな身体。だれかがその身体を抱き上げる。手は温かく、乾いた匂いがした。こぶしを強く握る。泣き声が自分の口から出る。張り裂けるような、必死の声だ。周囲の人々がざわつき、低い声で言葉を交わす。

「──見つけた。寒かったろうに」

修道服のような布の襟。低く落ち着いた声。抱いたのは女だった。ひざまずいて、子どもの体を包む。彼は自分の視界の端で、白い息が赤い線に触れて溶けるのを見た。赤い括弧が、空の片隅に小さく残っている。モニターの余韻か、それとも今目の前にあるものがすでに別の規則でできているのか。判断するための参照が足りない。

「名前を付けましょうか。アルト家の古い名簿にある――リゼ、と」

声はやわらかく、その名は羽根のように舞った。リゼ。どこかで見覚えのある音だった。彼は震える身体の中で、その音を受け止めた。男としての記憶はまだぴたりと胸に残っている。だが今、声の主は自分ではない。自分の口は泣き声しか作れない。混乱と、奇妙な安堵が重なって、彼の思考は一本の導線を辿った──名前を与えられた子は、記録される。記録されれば、後から照合できる。存在の識別子。だがその同時に、何かを見落としている予感が、まるで画面の片隅でじっとこちらを見ている赤い括弧のように、胸に残った。

女はリゼを布に包み直し、肩に掲げた。雪の中、白い息がはっきりと見える。修道院の門は遠く、小さな石の塔が黒く突き出していた。誰かが小さな鈴を鳴らし、その音が氷を割るように澄んだ。鈴の音は青白く、細い針金で結ばれ