個人開発の記録です。一昨日の夜、私が電車アプリの対象にしている都営浅草線が大幅に乱れる出来事がありました。単なる遅延ではなく、作っているアプリが、初めて”本物の大混乱”に出会った夜でした。予測の仕組みはコンテスト応募まで伏せますが、その夜に自分が何を見て、何を学んだかは記録しておきます。

Contents

まず結論

その夜、スマホに映った数字は最初「バグだ」と思ったのに、調べたら本物でした。同時に、本物の混乱の中に本当のバグも1つ紛れていました。この「どれが現実で、どれが自分のミスか」を切り分ける作業こそが、一番の勉強になりました。

「本物の遅延が来た日が、本当のテスト」と書いていた

少し前の記事で、私はこう書いていました。「次に本物の遅延が起きた日には、ここまで積んだ機能が一気に試される」と。アプリはそれまで、平常運転や小さな遅れでしか動かしていませんでした。大きく乱れた瞬間にどうなるかは、誰にも分からなかったのです。

その日が、一昨日の夜に来ました。帰りの時間帯、浅草線が大きく乱れ、手元のアプリの画面が、見慣れない数字を映し始めました。

第一印象は「壊れた」

画面に出たのは、常識ではありえない待ち時間と到着予測でした。普段なら数分で来るはずの区間が、桁違いの数字になっている。「バグだ」——それが最初の反応でした。

ここで、以前の自分ならそのまま「壊れてる」と決めつけて、原因を自分のコードの中だけで探し始めたと思います。でも、この数週間で何度も書いてきた教訓が、頭の中でブレーキをかけました。

驚くようなデータを、反射的に「バグ」と決めつけない。まず本物かどうかを疑う。

検証フェーズで、あり得ない数字を「保留」にした経験。欠測をゼロと読み違えかけた経験。あの積み重ねが、ここで効きました。

調べたら、数字は”本物”だった

落ち着いて確かめると、その異常な数字は、バグではなく現実そのものでした。実際に大きな乱れが起きていて、アプリはそれを正直に映していたのです。「壊れている」と思ったものが、実は「ちゃんと現実を見ている」証拠だった。これはちょっとした感動でした。ターミナルの中で作ってきた仕組みが、生きた混乱の断面を、初めて自分の目の前に描いて見せた瞬間だったからです。

ただし、本物の中に”本当のバグ”も紛れていた

ここからが難しいところでした。数字の大半は本物だったのですが、その中に1つだけ、どう考えても成立しない値が混ざっていました。現実ではあり得ない到着予測が出ていたのです。

つまりその夜の画面は、「アプリが正しく捉えた混乱」と「アプリのミス」が、同じ画面に同居していたわけです。全部が正しいわけでも、全部が壊れているわけでもない。この状態がいちばん厄介でした。「どこまでが現実で、どこからが自分のミスか」を1つずつ切り分けないと、正しい部分まで疑ってやり直す羽目になります。

初学者向けに一番の学びを言葉にすると、こうです。本物の信号とバグは、しばしば絡み合って現れる。だから「おかしい画面」を見たとき、全部を白か黒かで判断してはいけない。混乱の中から「これは現実」「これは自分のミス」を仕分ける——それがデバッグの本体でした。

もうひとつの発見:アプリは”向けた先”しか見ていなかった

さらに考えさせられたことがあります。浅草線は京急・京成・東武と直通運転をしていて、電車が各社の線へ乗り入れています。今回の混乱の本当の原因は、その直通先という、アプリがまだ十分に目を向けていない場所で起きていました。だからアプリ自身は「浅草線の中は正常です」と表示しながら、乗り入れ先から流れ込む乱れで現実は大きく荒れている、というちぐはぐが起きていたのです。

これは大事な気づきでした。システムは、こちらが観測するよう向けた範囲のことしか教えてくれない。見ていない場所で起きたことは、どれだけ現実に影響していても、画面には出てこない。「アプリが平常と言っているから平常だ」と鵜呑みにするのは危険で、アプリの”視野の外”を意識するのは、使う人間の側の仕事なのだと痛感しました。病院SEの仕事で、監視していない機器の異常は監視画面に出てこない、というのと同じ話です。

おわりに ── 混乱の夜が、一番の教材だった

正直に言うと、その夜のアプリは満点ではありませんでした。バグも出たし、出していた助言も、後から考えると鵜呑みにできないものでした。でも、平常運転を100日眺めるより、本物が乱れた1日のほうが、はるかに多くを教えてくれました

驚く数字をまず疑う。現実とバグを切り分ける。アプリの視野の外を意識する。どれも、混乱が起きなければ気づけなかったことです。次に同じ規模の乱れが来た日が、修正の本当のテストになります。そのときアプリがどう振る舞うか——今から、少しだけ楽しみにしています。


個人開発 / デバッグ / 実測主義 / 都営浅草線

このブログでは、ローカルLLM・Aider・個人開発の試行錯誤をそのまま記録しています。