寝ていない頭
外に出ると朝の光が、やけに白く見えた。
体はすごく疲れてる。たった一時間か二時間眠ったくらいでは、どうにもならない疲れ方だった。
それでも、頭のどこかだけは妙に冴えていた。
シャワーを浴びて、着替えて、駅まで歩く。朝の空気は冷たかったはずなのに、頬に当たってもあまり実感がない。電車に揺られながら窓に映る自分の顔を見ると、目の下に薄く影ができていた。
(……ひどい顔だな)
そう思うのに、不思議と足取りは完全には重くなかった。
昨日の朝、いや、もう今日の朝と言った方が正しいのかもしれない。画面が動いた瞬間の感触が、まだ指先のどこかに残っていた。黒い画面に白い文字が並ぶだけだったログの向こうで、ようやく自分の書いたものが形になったあの瞬間。あのとき、心の中で握った拳の熱だけは、まだ消えていなかった。
会社に着くと、フロアはすでに動き始めていた。
席に鞄を置き、ノートPCを開く。起動音を聞いた瞬間、昨日から何も切れていない線の上に、そのまま座り直したような気がした。
少しして、隣に藤堂が来た。
「おはよう」
「……おはようございます」
自分の声が思ったより掠れていて、水瀬は少しだけ咳払いをした。
藤堂は椅子を引きながら、ちらりと横目でこちらを見る。
「寝た?」
「少しだけ……」
「少し、って便利な言い方だよね」
責める調子ではなかった。むしろ、半分くらいは呆れたような、でもどこか分かっている人の声だった。
「昨日、動いたんだっけ」
「はい。朝方に、なんとか」
「じゃあ、まずはそこ、もう一回ちゃんと見てみようか。昨日は昨日で良かったけど、今日も同じように動くかは別だから」
水瀬は小さく頷いた。
昨日の夜に直した箇所を開き、画面を立ち上げる準備をする。条件も手順も、頭の中では追えていた。ここまで来たら、あとは確認するだけだと思っていた。
だが、画面は表示されなかった。
「あれ……?」
ブラウザには、昨日とは違うタイミングで、見覚えのある汎用的なエラーメッセージが表示された。必要以上に丁寧でもなければ、不親切なほど乱暴でもない、どこにでもありそうな文言。
しかし、昨日の朝に見たものと同じではなかった。
(なんで……)
マウスを持つ指先に、じわりと汗がにじむ。もう一度操作をやり直す。手順を戻って、値を入れ直して、再度実行する。
同じだ。
「今朝は、動いたのに……」
声に出してから、自分でも少し驚いた。口にしてみると、その事実が急に現実味を持って胸に落ちてくる。今朝動いた。確かに動いた。朝焼けの光の中で、自分はそれを見た。あれは勘違いではなかったはずだ。
なのに、今は動かない。
隣で様子を見ていた藤堂が、すぐに答えを言う代わりに、落ち着いた声で聞いた。
「正常に動いたときの条件、覚えてる?」
「条件……ですか」
「うん。値とか、日付とか。そういうのに、何か条件はなかった?」
水瀬は画面を見たまま、記憶を辿ろうとした。
昨日の夜。いや、今日の朝。空調の音だけが響いていたフロア。デバッグモードで一つずつ処理を追いながら、やっと動かした。何を入れて、どこを通ったのか。昨日の自分なら思い出せる気がしたのに、今の頭では、その輪郭が妙にぼやけている。
「……たぶん、同じようにやったはずなんですけど」
「“たぶん”だと厳しいかな」
藤堂の声はやわらかいままだった。
「昨日、無茶したあとだし。すぐ思い出せなくてもおかしくないよ。いったんコードとデータ、両方見直してみようか」
「はい……」
画面だけを追っていても埒が明かない。水瀬はコードを開き、処理の流れを上から追い始めた。条件分岐。取得している値。参照しているテーブル。昨日の夜、自分が通ったはずのルートをもう一度、今度は昼の頭で辿り直していく。
だが、読んでいるつもりなのに頭に入ってくるのが遅い。視線だけが文字をなぞり、理解が一拍遅れてついてくる。集中しているはずなのに、脳の奥に薄い膜がかかったような感覚があった。
(だめだ……遅い)
焦りが出る。焦ると、なおさら意味が頭に残らない。
それでも、昨日の自分を信じるしかなかった。何か理由があって動いて、何か理由があって今は止まっている。その差は、必ずどこかにある。
コードから参照先のテーブルへ飛ぶ。レコードを開いて、項目を一つずつ見る。ID。フラグ。ステータス。更新日時。開始時刻。終了時刻。
そのときだった。
「あっ……」
思わず声が漏れた。
接続先のテーブルに入っている日時データが、過去の時刻になっていた。
画面側の処理を改めて追うと、この画面はアクセス時に、対象データの時刻が現在時刻より未来に設定されていないと弾く仕様になっていた。昨日の朝は、その値がたまたま条件を満たしていたのだろう。だが今は、時刻が過ぎてしまっている。
「時刻……」
水瀬は小さく呟きながら、条件文を見返した。
確かにそうなっている。なのに、エラーメッセージは汎用的すぎて、そこまで読み取れなかった。値が悪いのか、処理が悪いのか、画面だけを見ている限りでは分からない作りだった。
「見つかった?」
藤堂が聞く。
「はい……日時です。この画面、テーブルに入ってる時刻が今より未来じゃないと、弾かれるみたいで」
「ああ、なるほど」
「でも、エラー文言が汎用的すぎて……気づけませんでした」
「うん。気づきにくいね、それは」
水瀬は急いでテーブルの時刻データを修正し、もう一度画面を立ち上げた。
ブラウザが切り替わる。
今度は、表示された。
昨日の朝に見た画面が、今度は白い昼のフロアで静かに立ち上がる。胸の奥に、安堵がじわっと広がった。
「……出た」
昨日みたいに心の中で大きく拳を握ることはなかった。ただ、肩の力が抜けるのが先だった。
水瀬はそのまま藤堂に向き直った。
「時刻が原因でした。データの日時が過去になってて、それで条件に引っかかってました」
「うん、ちゃんと辿れたね。よかった」
藤堂は画面を見ながら、小さく頷いた。
「ただ――」
その一言で、水瀬は少し背筋を伸ばす。
「今回みたいに、データ条件で落ちる可能性があるなら、やっぱりエラーの扱いはもう少し考えたいかな」
「……やっぱり、ですよね」
「うん。今のだと、動かなかったときに何が悪いのか分かりにくいから」
藤堂はモニターの端を指先で軽く示した。
「システムのバグなのか、入ってるデータが悪いのか、それとも通信で落ちてるのか。このへんがある程度でも切り分けられないと、あとで困るんだよね」
「問い合わせ、来たときに……ですか」
「そう。問い合わせって、画面見た人が『動かない』って言ってくるところから始まることが多いから。そこから毎回コード追って、データ見て、通信も疑って……ってなると、調べる側もしんどいし、答えるまで時間もかかる」
水瀬は表示された画面を見つめた。
ついさっきまで、再表示されたことだけでほっとしていた。けれど、その先にまだ見るべきものがあることを、すぐに突きつけられる。
「エラーの分岐って、地味だけど大事だよ」
藤堂は続けた。
「ちゃんと動いたときだけじゃなくて、どういうときに、どう止まるかも設計のうちだから」
その言葉が、静かに刺さる。
昨日の朝、自分は画面が出たことだけでいっぱいになっていた。動いた。出た。やった。そう思っていた。
もちろん、それは間違いではないのだろう。あの朝の成功は確かに自分のものだった。けれど、それだけで終わりにしてしまえるほど、仕事は単純じゃなかった。
(……甘かったんだな)
少しだけ、恥ずかしくなる。
心の中でガッツポーズをした自分を否定したいわけではない。けれど、その拳を握ったまま、「もうできた気」になっていたのなら、それは明らかに早すぎた。
午前のうちは、そのままエラーハンドリングの見直しに入った。
どの条件で何を返すか。どのメッセージなら最低限の切り分けに役立つか。ユーザーに見せる文言と、ログに残す情報はどう分けるべきか。考えることは増えたが、不思議と午前中はまだ頭が動いていた。
昼休みになり、会社近くのご飯屋さんで簡単に昼を済ませる。定食を頼み、運ばれてきた味噌汁の湯気が目の前で揺れていた。いつもなら何となく聞こえてくる周りの会話も、今日は遠くで鳴っている音みたいにぼやけている。
席に戻って、午後の作業を再開する。
そこで、限界が来た。
最初は、ただ少しまぶたが重いだけだった。コーヒーでも飲めば何とかなる程度の眠気だと思った。だが、数分もしないうちに、文字の並びが意味ではなく模様に見え始める。
コードを読む。
数行進む。
気づくと、また同じ行を読んでいる。
(……あれ)
もう一度読む。
また頭に残らない。
瞼の裏に砂でも詰められたみたいに重かった。目を開けているのに、視界の奥がゆっくり暗くなる。指先はキーボードの上に置いてあるのに、打つべき文字が頭の中で繋がらない。
焦る。
けれど、焦りは何も前に進めてくれなかった。
水瀬は一度だけ席を立ち、藤堂の方へ小さく顔を向けた。
「すみません、ちょっと休憩スペース行ってきます」
「うん、行っておいで」
すぐに返ってきた声が、ありがたかった。
休憩スペースのソファに座った瞬間、体が沈み込む。蛍光灯の白い光がやけに平たい。壁の時計の秒針だけが、妙に正確に進んでいる。
少しだけ目を閉じるつもりだった。
気づくと、十五分ほど経っていた。
戻らないと、と思って立ち上がる。頭は少しだけ軽くなった気がした。だが、それはほんの短い錯覚だった。
席に戻って作業を再開すると、またすぐに瞼が落ちてくる。読んでも読んでも、同じところを往復している気がした。カーソルだけが点滅し、時間だけが静かに過ぎていく。
夕方が近づくころ、藤堂が小さく声をかけてきた。
「水瀬くん」
「……はい」
「さっきから同じところ見てない?」
水瀬は画面から目を離せないまま、小さく息を詰めた。
「だいぶ眠そうだけど、大丈夫?」
「……大丈夫、です。たぶん」
言ってから、自分でも苦しかった。たぶん、の時点で全然大丈夫じゃない。
藤堂は少しだけ黙ったあと、やわらかく言った。
「ちょっと村瀬さんに相談してくるね」
「え、あの――」
「今の状態で進めても、たぶん今日はいい判断にならないから」
その声に強さはなかった。けれど、止めるべきところでは止める人の声だった。
少しして、村瀬がこちらにやって来た。
机の横まで来ると、水瀬の顔を見て、一瞬だけ眉を上げる。
「……あー、これはもう駄目だな」
「すみません」
「謝る前に、自分の顔見た方がいいって。今たぶん、相当終わってるぞ」
冗談めかしているが、言い方は軽すぎなかった。村瀬は画面をちらりと見て、それから机の上のメモを見た。
「今日どこまでやった?」
「えっと……時刻条件で落ちるところは追えて、表示は戻せました。で、エラーの分岐が甘いので、その見直しを……」
「どこまで直して、どこが残ってるか、書き出せるか?」
「はい……」
「じゃ、それだけやったら今日は上がれ。せめて電車あるうちに帰れ」
水瀬は思わず顔を上げた。
「でも、まだ――」
「まだ、はあるよ。あるに決まってる」
村瀬は即座に言った。
「でも水瀬くん、たぶん読めてないだろ」
図星だった。
何も言い返せない水瀬に、村瀬は少しだけ声を落とす。
「昨日頑張ったのは分かる。でも仕事って、今日で終わりじゃないからな」
その一言が、胸の奥にそのまま落ちた。
昨日の自分は、動かしたかった。あのまま止まるのが嫌で、画面が出るところまで見たかった。その気持ちは嘘じゃなかった。あの朝の達成感も、たぶん本物だ。
けれど、その先の今日まで含めて考えられていたかと言われたら、たぶん答えは違う。
徹夜して動かしたこと自体が間違いだったとは思わない。けれど、勢いのまま走り切れば何とかなると思っていたのなら、それは明らかに甘かった。
「……分かりました」
水瀬は小さく答えた。
そこからは、手を動かすことより、残すことに集中した。どの条件でエラーになったのか。原因は何だったのか。何を直したのか。どこから先が未着手なのか。自分でも後から追えるように、できるだけ短く、できるだけ具体的に書いていく。
途中で藤堂が覗き込み、メモを見て小さく頷いた。
「うん、それだけ残せてれば十分だよ」
その言葉に、少しだけ肩の力が抜けた。
PCを閉じるころには、外はもう暗くなっており、オフィスのビル街の灯りもちらほら見えるくらいになっていたなっていた。
帰りの電車では、座った途端に意識が沈みそうになった。窓の向こうを流れていく街の色はぼやけていて、駅名の表示だけが時々はっきりと目に入る。
頭のどこかに、まだ昨日の朝焼けが残っていた。
画面が動いた瞬間に握った拳の熱も、確かに消えていない。
けれど、それだけで走り続けられるほど、この仕事は単純じゃなかった。
動かすこと。直すこと。伝わるように残すこと。次の日もまた動けること。
その全部を含めて、ようやく仕事になるのだと、眠気で重くなった頭の奥で、水瀬はぼんやり考えていた。
昨日の自分は、たしかに前に進んでいた。
でも、前に進むことと、無理を重ねることは、同じじゃない。
揺れる電車の中で、水瀬は目を閉じた。
眠りに落ちる直前まで、朝焼けの中で握った拳の感触だけが、静かに残っていた。




