規約をバージョン1.1に書き換えた翌朝、おれは裏東京の廃ビルの屋上で目を覚ました。
隣にリサはいなかった。いつもなら二メートル先の壁際で丸くなって寝ているはずの銀髪が、消えている。
心拍が二割増しになった。キャッシュに残った昨夜の記憶が一気にフラッシュバックする。リサの告白。エンタープライズの受益者。自ら凍結を選んだ逃亡者。おれが書き換えた第6条。過去の秘匿は契約違反としない。今後の隠し事は禁止。
頭では処理を終えたはずだった。だが朝の光の中で目を開けると、終わったはずの処理がもう一度走り出す。ループだ。無限ループ。脱出条件が書かれていない。
リサは——おれの親父とお袋を殺した仕組みの、受益者だった。
屋上の手すりに手をかけて、裏東京の朝を見下ろした。灰色のウォーターマークをつけた人々が、狭い路地を歩いている。五秒ごとに視界の右端にポップアップ広告が現れては消える。今日のおすすめは栄養ドリンク。一本三百円。おれの全財産ではまだ買えない額だ。
あの人たちの中に、親父とお袋がいた。二年前まで。同じウォーターマークをつけて、同じ広告を見せられて、同じ生体ボットネットに脳を削られて。三ヶ月で死んだ。
リサはその三ヶ月間、エンタープライズの最上位で広告もない、ボットネットの負荷もない、清潔な世界にいた。
分かっている。リサはその後、自分で落ちてきた。受益者の座を捨てた。それは——何だ。贖罪か。自己満足か。覚悟か。
おれの脳内デバッガが答えを出せない。変数が多すぎる。
階段を降りて一階に出ると、オヤジの店のシャッターが半分開いていた。中から干し肉を焼く匂いがする。
「よう、坊主。早いな」
「リサを見なかったか」
「嬢ちゃんなら三十分前に出てったよ。西の配水管のとこ」
西の配水管。裏東京の外れにある、水がまだ流れている数少ない場所だ。顔を洗いに行ったのか。あるいは——一人になりたかったのか。
オヤジがカウンター越しに干し肉を差し出した。
「食え。腹が減ってちゃ、頭も回らん」
「金がない」
「ツケだ。嬢ちゃんの分も焼いてある」
おれは干し肉を受け取った。硬い。噛むと顎が痛い。だが味はある。いつもと同じ味。裏東京の味。
「坊主。昨夜、何かあったか」
「何でそう思う」
「嬢ちゃんの目が赤かった。泣いた後の目だ。朝出てくとき、おれに会釈だけして何も言わなかった。いつもは『おはようございます』って言う子だろ」
おれは干し肉を噛んだ。硬い肉が奥歯に抵抗する。
「契約の内容が変わった。それだけだ」
「そうか」
オヤジはそれ以上聞かなかった。裏東京の人間は、聞かないことが礼儀だと知っている。
干し肉を半分食べたところで、おれは店を出た。西に向かった。
配水管のあたりは、裏東京で数少ない緑がある場所だった。コンクリートの隙間から雑草が生えている。ARのフィルターがかかっていないから、現実の色そのままだ。薄い緑。冬の光。
リサは配水管の上に座っていた。銀色の髪が朝日を反射している。手には何も持っていない。デバイスも、武器も、何も。ただ座って、水の流れを見ていた。
「おはよう」
おれの声に、リサが振り返った。目は赤くなかった。もう泣き止んでいる。ただ、表情が硬い。おれを見る目が——怯えている、というほどではない。だが、昨日までとは違う。距離がある。
「おはよう。ごめん、黙って出てきて」
「謝るな。規約に『外出時は報告する』なんて書いてない」
「うん」
沈黙。配水管を流れる水の音だけが聞こえる。
おれは配水管の横に腰を下ろした。リサとの間に一メートルの距離。いつもより少し遠い。
「昨日の話だが」
「うん」
「処理に時間がかかってる。正直に言う」
リサが頷いた。
「分かってる。私の方こそ——あなたが規約を書き換えてくれたのに、まだうまく動けない。再起動に失敗してるみたいに」
IT用語で感情を表現するのは、おれの癖だ。リサにも移ったらしい。感染したのか。あるいは、共通言語として機能し始めているのか。
「一つ聞いていいか」
「何でも。第6条で、今後の隠し事は禁止だから」
「お前が凍結を選んだとき——おれの親父やお袋のことは知っていたか」
リサの目が揺れた。三秒。
「個人としては知らなかった。フリープランのユーザーが生体ボットネットで死んでいることは仕様書で知った。でも、それが誰の親で、誰の家族かまでは——」
「データとしてしか見えなかった」
「そう。百二十万人のうちの数字だった。顔が見えたのは、凍結されて裏東京に落ちてきてからだよ」
おれは水を見た。灰色の水。裏東京の配水管を流れる、浄化されていない水。飲めない。だが流れてはいる。
「分かった」
「分かった、って——許してくれるの?」
「許すとか許さないの問題じゃない。事実の確認だ。お前は親父たちを直接殺したわけじゃない。システムの受益者だった。それは——おれが恨むべき対象なのか。分からない。分からないが、少なくとも契約相手ではある」
リサが息を吐いた。長い息。安堵ではない。何かを受け入れる息だ。
「クロヤ。一つだけ言わせて」
「何だ」
「私が凍結を選んだのは、あなたのような人に会うためじゃなかった。ただ逃げたかっただけ。受益者でいることに耐えられなくて、一番簡単な方法を選んだ。それは——美談じゃない。利他的な行動でもない。自分の罪悪感を処理するための、一番コストの低い逃避だった」
「自覚してるなら十分だ」
「十分?」
「バグの自覚がある開発者は、バグのない開発者より信頼できる。完璧なコードを書く人間はいない。自分のバグを知ってる人間は、修正できる」
リサが笑った。小さく。昨夜の泣き笑いとは違う。乾いた、でも本物の笑い。
「あなた、慰め方が全部ITなの、知ってる?」
「仕様だ」
配水管の水が流れている。冬の朝の光が水面に反射して、コンクリートの壁に波紋の影を作っている。
おれは立ち上がった。リサに手を差し出した——わけではない。そんな柄じゃない。ただ立ち上がって、背中を向けた。
「飯がある。オヤジがお前の分も焼いてくれた」
「干し肉?」
「干し肉」
「硬い?」
「硬い。でも味はある」
リサが配水管から降りた。おれの後ろをついてくる足音が聞こえる。いつもの距離。一メートル半。昨日までと変わらない。
だが中身は変わった。バージョン1.0からバージョン1.1へ。見た目は同じでも、内部のコードが違う。過去のバグは修正対象外。今後のバグだけ追跡する。
オヤジの店に戻ると、干し肉が二人分、皿の上に並んでいた。リサが座って、一口噛んで、顔をしかめた。
「硬い」
「だろ」
「でも——味はある」
おれは向かいに座って、残り半分の干し肉を食べ始めた。
関係のリファクタリングは完了していない。コードの書き直しは一日では終わらない。だが、コンパイルは通った。エラーは出なかった。とりあえず動く。不完全だが、動く。
それで十分だ。今は。
視界の右端に広告がポップアップした。
【期間限定】スタンダードプランへのアップグレード 月額1,980円から
閉じた。五秒後にまた出る。それも閉じた。
これがおれたちの世界だ。広告と干し肉と、書き換えられた契約。完璧じゃない。バグだらけだ。でも——動いている。
リサが干し肉を噛みながら、おれを見た。
「ねえ、クロヤ」
「何だ」
「ありがとう。規約を書き換えてくれて」
「礼はいらない。アップデートは開発者の義務だ」
「うん。でもありがとう」
おれは干し肉を噛んだ。硬い。顎が痛い。
だが——悪くない。