第13話 読んでいないログ
規程を作った日の午後に、規程の出番が来た。
「触らないログに変化があります」
MICA が言った。
「空白行か」
「いいえ。中身が入り始めました」
俺は手を止めた。
触らないログ。読み取り対象から外し、要約対象からも外し、MICA にすら食わせない隔離フォルダ。そこに移した空白行たちは、今朝までただの空白だった。
画面に出された差分を見る。
空白だった行に、文字列が入っている。一行ではない。この一時間で、十四行。
「規程の判定は」
「観測は読み取り専用に限る——第一条の範囲内です。読むだけなら、許可経路です」
「拒否権の出番はなし、と」
「現時点では。ただし、内容によっては第三条の判定に移行します」
所有者不明の参照には接続しない。読むのが接続に当たるかどうか。新品の規程は、さっそく解釈問題を抱えた。
「画面に出すだけだ。向こうには触らない」
「同意します。表示します」
並んだ十四行は、一見、俺の観測ログに似ていた。
時刻。座標。残留値。形式は近い。だが、読み進めるうちに、肌が粟立ってきた。
これは、俺のフォーマットじゃない。
時刻の精度が違う。俺はミリ秒で揃えている。この行はマイクロ秒まで刻んで、しかも末尾が必ずゼロ二つで終わる。座標の丸め方も違う。俺は小数二桁。これは整数に切り捨て。それに、俺のログにあるはずの観測条件のフィールドが、ごっそりない。
「MICA。これ、俺たちのログか」
「いいえ。あなたの出力形式とも、私の整形形式とも一致しません」
「じゃあ、誰のだ」
「不明です。ただし、各行に共通する未知のフィールドが一つあります」
MICA が一列を強調表示した。
`issuer: qx41-08213-55960212`
`issuer: qx41-08214-55960512`
`issuer: qx41-08215-55960812`
イシュアー。発行者。
ログには、内容のほかに「誰が書いたか」が残る。アプリのログなら、プロセス名。データベースなら、接続ユーザー。署名のようなものだ。本人は意識しなくても、書いた手の癖は、必ずどこかに残る。
俺のログの発行者フィールドは `soma` だ。MICA の整形を通れば `mica` が付く。
`qx41` は、どちらでもない。
「……来たな」
声が少し掠れた。
知らない痕。第三の揺れ。知らない点。知らない参照。五日間、向こうはずっと「現象」だった。形と座標はあっても、名前のない何かだった。
今、初めて、名前が見えている。
「規程の判定を更新します。これは所有者不明の参照ではなく、所有者情報を含む混入データです。読解は第一条の範囲内」
「いい解釈だ」
「条文を書いたのはあなたです」
俺は椅子を引き寄せて、画面に向き直った。
読むだけじゃない。解析する。向こうが落としていった名刺だ。隅から隅まで読ませてもらう。
——
`qx41-08213-55960212`
三つの部品に見える。固定の `qx41`。五桁の数字。八桁の数字。
「MICA、十四行ぶんの issuer を全部並べろ。差分だけ見たい」
並んだ。
固定部は全行 `qx41`。
五桁部は、〇八二一三から〇八二二六まで。一行ごとに、きれいに一ずつ増えている。
八桁部は、行ごとに三〇〇ずつ増えている。
「五桁部、欠番は」
「ありません。完全な連番です」
「八桁部の増分は」
「全行で三〇〇。例外なし」
俺は背もたれから身を起こした。
連番。等間隔。
人間は、こんなログを残さない。
人間が手で何かをすれば、必ず揺れる。作業に詰まって五分空く。休憩で三十分飛ぶ。ミスして同じ番号を二度使う。深夜は止まって、朝に再開する。ログの間隔は、生活の形に歪む。
このログには、生活がない。
「八桁部が時刻系だとしたら」
「三〇〇を秒と仮定すると、五分間隔です。十四行の発行時刻は、本日十三時五十分から十五時に整列します」
五分に一回。正確に。休まず。
「五桁部は実行回数のカウンタ。八桁部はスケジュール時刻。`qx41` はジョブの識別子」
口に出しながら、確信が固まっていく。
これは名前じゃない。
バッチの実行 ID だ。
深夜バッチ。定期実行。cron。呼び方は何でもいい。決まった間隔で、決まった処理を、自動で回し続ける仕組み。八日前の夜、配送管理サービスで俺が直したのと同じ種類の、ありふれた仕掛け。
それが、現実の層で回っている。
「こいつは、自動化してる」
「人間の手作業では、この規則性は出ません」
「誰かが——現実を集めるスクリプトを、回してる」
言ってしまってから、部屋が一段静かになった気がした。
趣味の愉快犯が、面白半分に痕を残しているんじゃない。偶然の漏れが、たまたま俺の観測に混ざったんでもない。
設備を組んだやつがいる。
書いて、テストして、スケジュールに載せて、回しっぱなしにして、たぶん今はもう画面の前にすらいない。それくらいの、業務の匂いがする規則性だ。
五日間「何かがいる」と思っていた。
違った。「何かが動いている」だ。誰かが作って、放してある何かが。
「MICA。観測対象の中身は読めるか。こいつらが何を集めてるのか」
「混入しているのは記録の断片のみです。収集対象のフィールドは——」
MICA が一瞬止まった。処理の遅延ではない。確認の間だ。
「座標です。各行に観測対象の座標リストが含まれます」
「出せ」
座標が並ぶ。整数で切り捨てられた、そっけない数字の列。
その三行目で、目が止まった。
`(112, 37)`
知らない点の座標だ。anchor_a から x 方向に百十二ミリ、y 方向に三十七ミリ。三日前、俺が投影格子の上に見つけて、灰色の破線で囲った、あの点。
そして、続く行に、もっと嫌なものがあった。
`(0, 0), (210, 297)`
俺のアンカーだ。レシートの角と、クリップの先端。俺が自分で決めた、俺の観測の原点と対角。
「MICA」
「はい」
「こいつのログに、俺の観測点が載ってる」
「確認しました。あなたの投影アンカー二点、および隔離対象の座標が、収集対象リストに含まれています」
読んでいないログだと思っていた。
読まれていたのは、こっちだった。
——
夜になって、三枝さんからメッセージが届いた。
「検収前の最終テストで、また照度が揺れました。今回のはこれまでで一番はっきりしています。一昨日お話しした生データ、今回の分と合わせて送ります。継続調査の件、よろしくお願いします」
添付されたログを、俺は regulation どおり読み取り専用で開いた——規程どおり、だ。自分への言い訳の語彙まで英語になってきている。疲れている。だが、今夜はまだ寝られない。
照度の揺れは三回。時刻は、十三時五十分。十四時十五分。十四時五十五分。
俺は qx41 の発行時刻の列を隣に置いた。
十三時五十分。十四時十五分——いや、こちらは十四時十五分ちょうどに実行記録がある。十四時五十五分。
三回とも、五分間隔のスケジュールの上に、ぴったり載っている。
「一致します」MICA が先に言った。「三枝氏側の照度変動は、qx41 の実行時刻と整合します。さらに一点」
「まだあるのか」
「四日前の Enter 検証で記録した unmapped fluctuation の時刻も、この間隔系列に載ります」
対応する入力のない揺れ。俺のじゃない入力だとしたら、と一度だけ口にして、名前を付けずに棚へ入れた、あれ。
あれは、qx41 の定期実行だった。
俺が空中で Enter を押していた、その横を、五分間隔のバッチが通り過ぎていっただけだった。
俺は天井を見上げて、息を吐いた。
怖さの種類が、変わっていた。
幽霊は、いなかった。代わりにいたのは、もっと馴染み深くて、もっと嫌なものだ。
監視カメラでも、覗き屋でもない。在庫管理だ。定期巡回で、座標を集めて、リストを更新する。俺のアンカーも、知らない点も、たぶん莉央さんの端末も、同じ台帳の上に、番号付きで並んでいる。
読んでいないログが、こちらを読んでいる。
機械的に。定期的に。
——たぶん、俺が気づくずっと前から、ずっと。
■ 技術メモ
【ログの発行者】
ログには、内容のほかに「誰が(何が)書いたか」を示す情報が付くことがあります。
プロセス名、接続ユーザー、サービスの識別子など、形式はさまざまですが、書いた主体の癖や素性が残るという意味で、署名に似た役割を持ちます。
【バッチ処理と定期実行】
決まった処理を、決まった時刻や間隔で自動的に実行する仕組みです。
人間の手作業と違って、間隔が正確で、休みがなく、番号が飛びません。ログの規則性から「これは人間ではなく自動処理だ」と見分けられることがあります。
【識別子の命名規則】
連番、時刻、固定の接頭辞など、識別子には設計者が決めた構造が現れます。
中身が読めなくても、構造を解析するだけで「何回目の実行か」「どんな間隔か」「どの系統のジョブか」が推定できる場合があります。
【時刻の突き合わせ】
別々の場所で記録されたログでも、時刻を揃えて並べると、同じ出来事の別の面が見えてくることがあります。
作中では、未知の実行記録と、離れた場所のセンサーの揺れが、同じ五分間隔の上に載ることで関係が確認されています。
■ 作中の用語
【qx41】
透が混入ログの発行者フィールドで見つけた識別子の固定部です。
五桁の連番と八桁の時刻様の数値を伴うことから、透は「自動化されたバッチ処理の実行 ID」と解析しています。正体はまだ分かっていません。




