第四話 夜にだけ出る不具合
入社して二週目に入るころ、翔太はようやく朝のオフィスの匂いに驚かなくなっていた。
乾いた空調、古いカーペット、コーヒーの酸味、通電したばかりの機械が放つかすかな熱。毎日同じはずなのに、同じもののなかに少しずつ違う濃淡があることもわかり始めていた。月曜の朝は机がきれいで、木曜の夕方には書類の端がめくれている。人間の疲労は、たいてい物の置き方に先に出る。
翔太は自分の席でノートPCを開き、社内チャットに流れるメッセージを眺めた。
研修課題。レビュー依頼。会議室予約。障害連絡。
この会社では、朝から何かが静かに起きている。その「静か」が、以前より少しだけ怖くなくなっていた。
「佐藤君、今日の午後、夜間バッチまわりの確認を一緒に見てもらう」
木村が席越しに言った。
「夜間バッチ、ですか」
「うん。毎日夜に定期実行してる処理があるんだけど、最近たまにだけ失敗する。昼間は再現しない。まだ研修扱いでいいから、見学半分、手伝い半分」
翔太は一瞬だけ緊張した。
実案件に近いものへ触る機会が来るのはうれしい。だが、うれしさの裏には、自分が何もできないまま邪魔になるのではないかという恐れがついて回る。
「わかりました」
「今日は“答えを出す”より、“何が起きてるかわからない状態に慣れる”つもりでいて」
そう言って木村は、自分のモニターへ戻った。
何が起きているかわからない状態に慣れる。
翔太はその言葉を頭の中で転がした。学校には、そういう課題はなかった。何がわからないのかさえわからない、という状態そのものに耐える訓練は、たぶん職場に来て初めて始まる。
午前中の研修を終え、午後三時ごろ、翔太は木村に呼ばれて会議室へ入った。
小さな部屋だった。壁際にホワイトボード。中央に長机。モニターには障害報告の一覧が映っている。木村のほかに、運用担当の田中と、営業寄りの立場らしい女性社員の秋山がいた。
「新人の佐藤です」
翔太が頭を下げると、田中が軽く顎を上げた。
三十代後半、眠そうな目をした男で、椅子に座ったままノートPCを膝に引き寄せている。
秋山は笑顔を見せたが、その笑顔は対人用に整えられたもので、安心させるためのものではないとすぐわかった。
木村が説明する。
「問題は夜間バッチ処理の失敗。実行は毎晩二時十五分。失敗は週に一、二回。再実行すると通ることもあるし、通らないこともある。ログの出方が一定しない」
「入力データ側は?」
田中が短く聞く。
「いまのところ相関なし。件数、曜日、顧客、どれも決め手がない」
木村はそう答えてから、翔太のほうを見た。
「佐藤君、まずはこれ見て。過去二週間の障害ログ」
翔太は差し出された画面を覗き込んだ。
タイムスタンプ。ジョブ名。実行ステータス。例外内容。
エラーは一見するとばらばらだった。DB接続失敗、タイムアウト、ファイルアクセスエラー、データ不整合。だが、木村たちがわざわざ会議室で共有している以上、表面だけではない何かがあるのだろう。
「共通点、ありますか」
木村が言う。
翔太は黙ってログを追った。
同じジョブ。似た時間。発生タイミングは深夜。だが、曜日も入力件数も一定しない。
一度見て、もう一度上から見直す。
そのとき、ひとつだけ、違和感があった。
「……このタイムスタンプ、ですか」
翔太が指したのは、失敗したケースのうち三件に共通していた一秒未満の端数部分だった。
木村が顔を上げる。
「どこ」
「ここです。実行開始は二時十五分ちょうどなのに、失敗したログだけ、途中で記録のミリ秒が妙に飛んでます。普通なら連続してるはずなのに、一回だけ、時間が巻き戻ったみたいに見える」
田中がノートPCを寄せる。
「本当だ。なんだこれ」
秋山は意味がわからないという顔でログを見ている。
木村だけは、驚きよりも確認に近い表情だった。
「ほかには?」
翔太はさらにログを追い、息を止めた。
失敗ケースのひとつ、そのスタックトレースの末尾に、見覚えのある単語があった。
boundary
昨日、自分が見た“Boundary Layer mismatch”と同じ語だ。
だが、ここではそこまで不自然ではない。ライブラリ名や内部構造の一部として現れてもおかしくない綴りだった。だからこそ、余計に落ち着かない。見間違いでも冗談でもなく、どこかにその単語が本当に存在していることになる。
「佐藤君?」
木村に呼ばれて我に返る。
「すみません。……この boundary って、何の意味ですか」
田中が肩をすくめた。
「さあ。昔の共通モジュールにそういう名前のクラスがある。今の担当で中まで把握してる人はいない」
「いないんですか」
「古すぎて触りたがる人がいない。動いてるうちは後回しだよ」
田中の言い方は、諦めと現実主義が半分ずつ混ざっていた。
翔太は、その感覚を少し理解できるようになっている自分に気づき、嫌な気持ちになった。まだ二週間も経っていないのに、人はすぐ「とりあえず動いているもの」に従順になる。
会議のあと、木村は共有フォルダから関連ソースを取り出して見せた。
夜間バッチを呼び出すジョブ管理側、共通モジュール側、ログ出力側。翔太には全体像がまだぼんやりしていたが、流れだけは追えるようになってきた。
「昼間に見てもわからないんですよね」
「たぶんね」
「じゃあ、夜に見ないとだめですか」
「そういうことになる」
木村はそう言ったきり、少しだけ黙った。
その沈黙が何を意味するのか、翔太にはまだはっきり読めなかった。
定時を過ぎるころ、オフィスの一角にだけ残る人間がはっきりしてくる。
田中。木村。奥の席のインフラ担当。運用チームの二人。
翔太は帰るべきか迷った。新人が残っても足手まといではないかと思う一方で、自分の目で見たい気持ちもあった。
「木村さん」
「ん?」
「残って見てもいいですか」
木村は手を止めた。
眼鏡の奥で、少しだけ目を細める。
「親御さん心配する年齢だけど」
「一人暮らしです」
「そういう問題じゃないんだけどな」
それでも木村は追い返さなかった。
条件として、勝手な操作はしないこと、眠くなったら帰ること、何かあっても一人で判断しないこと。その三つを言い渡した。
夜九時を過ぎると、オフィスは昼とは別の生き物になる。
話し声は減り、キーボードの音だけが際立つ。窓の外のビル群は黒いガラスになり、室内の光を跳ね返している。自販機の冷却音が妙に大きい。コピー機の待機ランプだけが規則正しく点滅する。
翔太は木村の隣の席で、夜間バッチの関連ログを整理していた。
失敗した日、成功した日、差分のありそうな箇所。
データそのものには大きな違いがない。実行時刻の端数。クラス名。処理の順序。
細かな違和感が点のように散っているのに、まだ線にならない。
十一時過ぎ、田中が紙コップのコーヒーを配ってきた。
「眠気は敵だから」
翔太は礼を言って受け取る。
砂糖の多いインスタントコーヒーの匂いが、急に現実感を強めた。世界の謎より先に、人はまず眠気と空腹に負ける。そういう当たり前が、深夜の職場ではかえって頼もしかった。
午前一時四十分。
ジョブの実行準備が整う。
木村と田中が監視画面を開き、翔太も隣のサブモニターでログを追えるようにした。
「再現したら、慌てなくていいから」
木村が言う。
「はい」
「再現しなくても、慌てなくていい」
その言い方に、翔太は少しだけ笑いそうになった。
だが、二時を回るころには笑う余裕はなくなっていた。
二時十五分。
ジョブが起動する。
処理件数。接続開始。データ取得。整形。出力。
一行ずつログが増える。
順調に見えた。田中が小さく息を吐く。
次の瞬間、画面の一角でログが不自然に揺れた。
揺れた、ように見えた。
文字が一瞬だけ二重になり、タイムスタンプの秒表示が飛ぶ。
二時十五分四十二秒。
二時十五分三十九秒。
二時十五分四十三秒。
「……え」
翔太は思わず声を漏らした。
木村が素早く別ウィンドウを切り替える。田中が監視用ログを保存する。
エラーは出ていない。
処理はそのまま進んでいる。
だが、タイムスタンプだけが一瞬、順序を失った。
翔太の背中を冷たいものが走った。
単なるログ出力の遅延かもしれない。ミリ秒のズレかもしれない。そう思おうとした。
そのとき、サブモニターの末尾に、ほんの一行だけ、明らかに場違いな文が現れた。
date boundary unresolved
次の瞬間には消えた。
通常の処理ログに上書きされ、痕跡も残らない。
「見たか」
田中が低く言う。
木村は答えず、保存したログを開き直している。
翔太は自分の喉が乾く音を聞いた。
「いま……」
声がうまく出ない。
木村が静かに言った。
「今日はここまで。保存したログはこっちで確認する。佐藤君、帰れる?」
「……はい」
本当は帰りたくなかった。
だが、ここで何かを聞いても答えてもらえないことだけはわかった。
オフィスを出ると、午前二時半の街は別世界のように静かだった。
タクシーのヘッドライトだけが濡れた道路を滑っていく。コンビニの明かりは遠く、駅前の看板はもう消えていた。
翔太は歩きながら、自分がさっき見たものを頭の中で何度も再生した。
時刻が巻き戻った。
画面の文字が揺れた。
そして、date boundary unresolved。
見間違いだと決めつけるには、あまりに具体的だった。
帰宅しても眠れず、翔太はノートを開いた。
今日の日付と時刻を書き、見たことを箇条書きにする。
書くことで現実に引き戻せる気がした。
だが最後に、どうしても迷って、一行だけ余白に付け足した。
夜にだけ出る不具合は、本当に“システム”のものなのか。
書き終えた瞬間、アパートの壁の向こうで水道管が鳴った。
ただの生活音のはずなのに、どこか遠くで金属の扉が軋んだ音に聞こえた。




