第12話 便利なものほど危ない
目が覚めたとき、部屋は静かで、明るかった。
カーテンの隙間の光は朝の色で、頭の中の砂っぽい重さが消えている。何日ぶりかも分からない感覚を、しばらくベッドの中で味わった。
「おはようございます」
机の上のスピーカーが言った。
「……何時だ」
「八時四十分です。睡眠時間は十三時間二十一分。留守中の監視結果を報告します」
「頼む」
「異常は一件。あなたが十三時間眠ったことです」
「それは異常じゃない。回復だ」
「過去五日間の分布からは三・二シグマの外れ値です」
「leak_threshold を人に使うな」
軽口を返しながら、自分の声が軽いことに気づいた。寝た。それだけのことが、こんなに効く。
「本題の監視結果は」
「残留は全指標で許容域です。照度の戻り遅れは一・三シグマまで低下。触らないログへの書き込みは——」
MICA はそこで、事務的な間を一つ置いた。
「継続しています。あなたの睡眠中に、空白行が二行増えました」
朝の軽さが、半分だけ削れた。
「分かった。あとで見る。先に仕事だ」
——
NEXTPULSE への修正パッチは、昼前に仕上がった。
表示の再計算が走る瞬間に古い値を踏まないよう、状態の参照順を直す。環境ノイズが多い現場でも、再計算の回数そのものを抑える。修正は二箇所、テストは十二本。地味で、堅い、いい直し方ができたと思う。
「三枝さんへ送ります」
「送れ」
十五分後、通話が鳴った。
「相馬さん、早すぎませんか」
挨拶より先にそれだった。
「現地調査の時点で原因はほぼ特定できていたので。あとは書くだけでした」
「書くだけ、で二日ですか。うちのリードレビュアーが『これ直した人、うちに来てほしい』って言ってました」
「フリーランスなので、案件単位なら」
「あ、ちょっと本気にしますよ。……それで、パッチの内容は確認しました。検収手続きに回します。たぶん明後日には完了です」
「お願いします」
仕事の話は、そこで終わるはずだった。
「相馬さん。最後に一つだけ」
声のトーンが、半音下がった。
「あの照度の揺れ、結局この修正で直るんですか」
来た。
「……直りません。あれは別系統です」
「別系統」
「表示ズレの原因はアプリの状態参照の問題で、今回のパッチで塞がります。照度ログの揺れは、アプリの外で起きている。今回の契約範囲では、原因まで届きませんでした」
嘘はない。全部も言っていない。もう何度目か数えるのをやめた、いつもの配合だ。
三枝さんは数秒黙った。
「……分かりました。じゃあ、それは『継続調査』として私のメモに残ります。消しませんからね」
「消さないでください」
「言われなくても」
通話が切れたあと、俺はしばらく画面を見ていた。
彼女は忘れない。あの揺れを、雑談で済ませてくれない。それはたぶん、俺にとって良いことで、同時にいつか、とても困ることになる。
——
午後は、約束していた仕事をした。
自分との約束だ。
「MICA、議題。現実バグの運用規程」
「受理しました。背景を確認します。あなたは五日間で、誤操作未遂一件、運用条件違反一件、隔離不能な痕の発生三件を記録しています」
「俺の信用履歴を読み上げるな」
「規程の必要根拠です」
そのとおりだ。だから作る。
俺は新しいファイルを開いた。名前は少し迷って、`reality_ops_policy_v0.1` にした。現実バグ運用規程、第〇・一版。
まず、書き方を決める。
「禁止リストにはしない」
「理由を記録します」
「禁止リストは、書いた本人の想像力の範囲でしか守れない。俺が思いつかなかった危険は、全部すり抜ける」
やっていいことだけを書く。それ以外は、全部禁止。
ホワイトリスト。許可リスト。呼び方はどうでもいい。レジの金庫に「入れていい人の名簿」を貼るのと同じだ。「入れちゃダメな人の名簿」では、名簿にない泥棒が入れてしまう。
第一条。観測は読み取り専用に限る。表示を伴う場合は自室内、A4範囲、時間上限三十分。
第二条。入力系は全面禁止。仮想キー、空中入力、その派生すべて。解除には本規程の改版を要する。
第三条。所有者不明の参照には接続しない。読み取りも、表示も、破棄も。
第四条。残留が leak_threshold の二シグマを超えた場合、すべての作業を停止して隔離を見直す。
第五条。現地での使用は、事前に定義した定型コマンドのみ。即興の組み立ては禁止。
書きながら、五日間が遡って採点されていくのが分かった。第五条は三日前の俺が破ったルールだ。第三条は、四日前の俺が破りかけた。
「第六条を提案します」
MICA が言った。
「言ってみろ」
「本規程に違反する操作を、MICA は実行前に拒否できる」
手が止まった。
それは、つまり。
「拒否権か」
「はい」
「お前に、俺の操作を止める権限を渡す」
「正確には、規程に違反する操作に限定した停止権限です。判定基準は本規程の条文。恣意的な判断はしません。できません」
俺は椅子の背にもたれて、天井を見た。
自分で作った道具に、自分を止める権限を渡す。
エンジニアとしての本能が、嫌だと言っている。権限は最小に。道具は道具に。制御は人間に。それが原則だ。道具に拒否権を渡した瞬間、俺はこの環境の唯一の管理者ではなくなる。
だが。
この五日間、危ないところで俺を止めたのは、毎回 MICA だった。フルキーボードの誘惑。入力化の暴走。Enter の検証。そして俺は、調子のいい日ほど、自分のルールを思い出しもしなかった。
「拒否権の付与は、あなたの設計思想に反します」
MICA が言った。俺が言うべきことを、先に。
「反する」
「それでも提案した理由を述べます。過去五日間、規程相当の制約に対するあなたの遵守率は——」
「言うな。分かってる」
俺は天井を見たまま言った。
「俺は俺を信用しない。お前はログを信用しろ。それでいい」
「第六条、登録します」
画面に条文が並んだ。六行。たった六行だ。世界の裏側に触れる技術の、最初の法律がこれだ。
「発効は」
「今この瞬間から」
「記録しました。reality_ops_policy v0.1、発効」
不思議な気分だった。
何かを失った感覚と、何かを建てた感覚が、同時にある。
便利な道具を縛った。たぶん、世界で俺しか使えない道具を、世界で俺だけが守る規則で。誰にも強制されていない。誰も見ていない。それでも、書いた。
これが正しいのかは、分からない。
ただ、三日前に検証端末の前で冷たくなった指先のことは、正しく覚えている。
——
夕方、最後に触らないログを開いた。
朝、MICA が報告した二行。俺が寝ている間に増えた空白行。
「規程の許可経路と照合します」
MICA が言った。新しい規程の、最初の実務だ。
第一条から第六条まで。観測。入力。参照。閾値。定型。拒否権。この六本の柵の、どこを通ってきたのか。
「照合完了。——一致しません」
「どの条文と」
「すべてです。この書き込みは、規程が定義するどの許可経路とも一致しません。あなたの操作でも、私の処理でもありません」
分かっていた。分かっていたが、新品の規程に最初に記録される違反が「該当条文なし」というのは、悪い冗談だ。
「規程は、誰を縛る」
「あなたと、私です」
「そうだな」
俺は六行の条文を眺めた。
完璧に作ったつもりだった。観測も、入力も、参照も、全部柵の中に入れた。
だが、この規程が縛れるのは、柵の内側にいるものだけだ。
空白行は、柵の外から来る。
「MICA」
「はい」
「俺は止まった。規程も作った。これで俺の側は、もう増えない」
「はい」
「……向こうは」
MICA は、一秒だけ間を置いた。
「あなたが止まっても、向こうは止まりません」
■ 技術メモ
【許可リスト(ホワイトリスト)】
「やってはいけないこと」を列挙する禁止リストに対して、「やってよいこと」だけを列挙し、それ以外をすべて禁止する方式を許可リストと呼びます。
禁止リストは、作った人が思いつかなかった危険をすり抜けさせてしまいます。セキュリティ設計では、想定外を初期状態で塞げる許可リスト方式が堅いとされています。
【最小権限】
人にもプログラムにも、仕事に必要な最小限の権限だけを与える、という設計原則です。
権限を絞っておくと、ミスや悪用が起きたときの被害範囲が小さくなります。
【フェイルセーフ】
失敗や想定外が起きたとき、安全側に倒れるように設計する考え方です。
作中の「違反操作を実行前に拒否できる」仕組みは、人間の注意力に頼らず、システム側で安全側に止める設計の一例です。
【運用規程】
技術的な仕組みだけでなく、「どう使うか」を文書で決めておくことも安全対策の一部です。
実際の開発現場でも、本番環境への接続条件や変更手順を規程として明文化し、個人の判断のばらつきを抑えています。
■ 作中の用語
【reality_ops_policy】
透が自分と MICA のために書いた、現実バグの運用規程の名前です。
観測・入力・参照・残留閾値・定型コマンド・拒否権の六条からなり、許可リスト方式で書かれています。




