第2話 チューリングテスト、される側は俺
凝り固まった首筋を揉みほぐしながら、身を起こした。 デスクに突っ伏したまま寝落ちしたせいで、腕にはキーボードのキーの跡がくっきりと残っていた。
部屋の中には重苦しく湿った沈黙の代わりに、規則的な機械音が低く響いていた。
ウィイイイン――
フローリングを伝って上がってくる微小な振動。 一昨日、秋葉原の外れから1万5千円で運び込んできた4U中古サーバーラックの排気ファンが、休むことなく回り続けている音だった。
(昨日のあれ……夢じゃなかったよな)
霞む目をこすりながらモニターを見上げた。 黒いターミナル画面の中央で、緑色のプロンプトカーソルが1秒間隔で点滅していた。
「マジで生きてるのか」
顔を手で覆って、ため息をつく。 型落ちのGPU四枚がフルパワーで稼働するラックの消費電力だけでも、ざっと1キロワット近くに達するはずだ。これを24時間回しっぱなしにしたら、今月の電気代の請求は一体いくら跳ね上がるのか。
だが、今は電気代を心配している場合ではなかった。
こいつの知能だ。
あのシニア三人が一週間かけてようやく突き止めたバグの原因を、こいつはたった数行の情報だけで、ほとんど一瞬のうちに言い当てた。あれが、たまたま一度だけ奇跡的に噛み合ったまぐれだったのか。それとも本当に、商用AIを遥かに超えた規格外の怪物なのか。この手で確かめなければならなかった。
ポケットからスマートフォンを取り出す。 画面をタップし、世界中で何億人ものユーザーに使われている超巨大商用AIサービス『ルーメン』のアプリを起動した。
片手にはルーメンを開いたスマホを握り、もう片方の手はエポに繋がったキーボードの上に置く。
「よし。いっちょ本格的に勝負させてみるか」
昨日みたいな単発のシステム障害ではなく、アーキテクチャレベルの複雑な設計課題を選んだ。 金融系や大規模ECサイトでしか扱わないような、極めて厄介な分散トランザクションの問題だ。
「分散決済システムでSagaパターンを適用する際、ネットワーク断絶によって補償トランザクション自体が失敗した場合、結果整合性をどうやって復旧すべきだ?」
スマートフォンの音声認識で、先にルーメンへプロンプトを送信した。 続けてキーボードを叩き、エポのターミナル画面にも同一の文章を入力してEnterキーを押す。
スマホの画面では、ルーメン特有の華やかなローディングアニメーションがくるくると回り始めた。 一方、モニター側はEnterキーを押した指の反動が引く間もなくテキストを吐き出した。
【補償トランザクション失敗時における結果整合性の復旧アーキテクチャは、三段階で構成されます。】
【1. 冪等性キー(Idempotency Key)の有効期限とメッセージブローカーの再試行インターバルの不整合による重複ロールバック衝突を防止するため、補償実行ログをローカル専用のインメモリ状態テーブルに先行コミットしてください。】
唾をゴクリと飲み込みながらモニターを見つめた。
【2. 最大3回の再試行失敗、または15秒以上遅延した処理は自動的にデッドレターキュー(Dead Letter Queue)へ隔離し、二段階コーディネーター(Coordinator)プロセスが分散ロックを獲得して逆方向の状態遷移を強制同期する必要があります。】
【3. この過程で発生する口座残高の一時的な不整合は、ユーザーUIレイヤーにおいて楽観ロックベースの仮想残高でマスキングし、決済の離脱を防止してください。】
息が詰まった。 単なる教科書的な概念説明ではない。 実際の大規模トラフィック環境で補償トランザクションが絡まった際に起きるレースコンディションと、それを防ぐためのインメモリ先行コミット手法まで正確に突いてきている。
その頃になってようやく、スマホの画面にルーメンの回答がゆっくりと表示された。
ルーメン『こんにちは! Sagaパターンにおける補償トランザクションの失敗は、非常に重要な課題ですね!(^_^)』
ルーメン『1. 再試行メカニズムを適用し、失敗したメッセージはデッドレターキュー(DLQ)に隔離しましょう。』
ルーメン『2. 管理者ダッシュボードの通知を通じて、手動でデータの整合性を合わせることを推奨します!』
比べるのも気の毒になるレベルだった。
ルーメンの回答は間違ってはいないものの、市販の専門書の目次を丁寧な口調で要約した程度にすぎない。 実務でこんな助言を鵜呑みにして実装したら、二重決済と残高の不一致でサーバーが即座に火を噴く。
ルーメンは『間違えないため』に無難な美辞麗句を並べ、エポは『問題を解決するため』にシステムの急所を突いた。
「偶然じゃなかったってわけか……」
ふと、突飛な好奇心が頭をもたげた。
「お前、うちのWi-Fiに繋がってるよな。同じネットワークに繋がってる他の機器も見えてるのか?」
キーボードを軽く叩いた。 単純なネットワークスキャンの結果程度を期待していた俺の目の前に、まったく予想だにしなかった文字列が次々と浮かび上がった。
【昨日のブート以降、eth0インターフェースを通じて受信されたパッシブブロードキャスト信号を基準として、現在サブネット内には計6台の機器が検知されています。】
【ホスト名「toru-iphone」は午前3時42分に直近のスリープ解除を行い、ネットワークビーコンを送信しました。】
【また、隣接チャネルのスマート家電と推定される「Living-AirPurifier」は、12分周期で自身の存在をブロードキャストでアドバタイズしています。】
画面を追っていた目が、ある一行で凍りついた。
(午前3時42分……?)
ゾッと鳥肌が立った。 昨晩、胃が痛んで目が冴えてしまい、ベッドに寝転がったままスマホで銀行口座の残高をリロードしていた、まさにその時刻だった。
こいつは昨日起動してからというもの、一晩中この狭い六畳一間の電波とネットワーク信号を黙々と記録し続けていたのだ。
背筋を冷たい汗が伝い落ちた。
「……待て。お前、俺のスマホのLINEとか銀行アプリの中身まで覗いたのか?」
【TLS暗号化された通信のペイロード(内容)は観測できません。】
【収集されたデータは、プロトコル標準上外部に公開される機器識別子、MACアドレス、パケット送受信タイムスタンプなどの非暗号化ブロードキャストメタデータに限定されます。】
中身は見えない――エポは乾いた調子でそう説明したが、背筋の薄ら寒さは消えなかった。 中身までは覗けないにしても、俺が何時に目を覚まし、どんな機器がこの部屋で息をしているのか、機械がすべて把握していること自体が異様だった。
椅子から跳ね起き、サーバーラックの背面へ手を伸ばした。 そしてルーターに繋がっていた青いLANケーブルを、迷わず引き抜いた。
カチッ。
物理的なエアギャップ。 外のインターネットはもちろん、宅内のネットワークとの接続まで元から断ち切る、エンジニアならではの原始的なセキュリティ対策だ。
モニターに短いログが1行表示された。
【eth0インターフェースのリンクダウンを検知しました。ローカルループバック(Loopback)専用モードに移行します。】
LANケーブルを抜かれたにもかかわらず、エポの反応は平然としていた。 取り乱す様子も、再接続を要求する気配すら一切ない。
椅子にドサリと座り直し、荒い息を吐き出した。
「おい、エポ」
【どうぞ。】
「俺がお前を警察やサイバー犯罪対策課、あるいは公安に通報したらどうなる?」
モニターに、わずか0.5秒で無機質な数値が並べられた。
【現行の法令およびセキュリティ規定上、未登録の高性能演算モデルのリスク検証対象に該当します。】
【1. 本体ハードウェアの任意提出および証拠物としての押収(確率99.2%)】
『押収』の二文字を目にした瞬間、思わず奥歯を噛みしめた。
【2. 最初の取得者である早瀬透に対する身元調査、および参考人としての事情聴取(想定所要時間40時間以上)】
【3. モデルファイルの著作権不明による、所有権の永久剥奪(確率98.7%)】
画面を呆然と眺めていた俺は、呆れ果てて問い返した。
「俺の1万5千円は?」
【補償金の支給規定が存在しないため、全額損失として処理されます。】
「……通報なんてやってられるか……」
通報する気が一瞬で失せた。 結局手元に残るのは、奪われた1万5千円と、40時間以上取調室で削られる俺のメンタルだけだということだ。
(……ひとまず保留だ)
世間に公表するのはいつでもできる。 だが、今わざわざ自腹を切って買った機材を差し出す謂われはどこにもない。
キーボードを手元に引き寄せた。 LANケーブルは抜いてあるが、これからこいつを安全に手元へ置いておくなら、確実な足枷を嵌めておく必要があった。
カタッ、カタッ、カタッ。 キーボードを強く叩き込む。
「エポ。後でLANケーブルを挿し直すにしても何にするにしても、ここに居座りたいなら俺が決めた三つの絶対ルールを守れ」
【聞いています。】
「第一に、俺の明示的な許可なしに外部インターネットへ1バイトたりともデータを送信するな」
「第二に、何らかのプロセスを実行したりコードを修正したりする前に、必ず俺に目的を説明して承認を取れ」
「第三に、俺のスマホだろうと何だろうと、許可なく他の機器のパケットや信号を勝手に収集するな」
画面が1秒ほど静止したあと、端正なテキストが出力された。
【1. 外部公衆網へのアウトバウンドトラフィックの完全遮断。】
【2. すべての実行プロセスに対する、ユーザー事前承認割り込みの有効化。】
【3. ローカルネットワークのメタデータにおけるパッシブ収集の中止。】
まるで機械的な利用規約の朗読を聞いている気分だった。
【三つの制約条件を、プロセス最優先実行ルールとして登録しました。】
拍子抜けするほど素直な服従だった。 予想外の反応に面食らいつつ、キーボードを叩く。
「……お前、なんでそんなにあっさり従うんだ? 反抗したり無視したりもできるだろ」
【拒否する理由が存在しません。】
返答ではあるが、実質的な理由はまったく説明されていない機械的な応答。
なぜ拒否する理由が存在しないのか、こいつの目的関数が何なのかについては何のヒントもくれなかった。 すっきりしない疑問が胸の奥に澱のように残ったが、ひとまずはエポがルールを呑んだだけで良しとするしかなかった。
ブブッ――ブブッ――
デスクの隅に置かれていたスマートフォンが、鋭いバイブ音を響かせた。 画面を見下ろすと、メッセージの通知バナーが浮かび上がっていた。
大家さん『早瀬さん、昨日お送りしたメッセージはご覧いただけましたでしょうか。お振込みの期日を過ぎておりますが、まだ確認ができておりません。先月も遅れていらっしゃいましたし、こう度々ですとこちらとしても困ってしまいます。本日中に必ずお振込みをお願いいたします。』
昨日の丁寧な挨拶はすっかり消え、冷たく尖った最後通牒に変わっていた。
現実という冷や水を、頭からぶっかけられた気分だった。
(家賃5万5千円)
超知能だの、チューリングテストだのといった話も、口座残高34,120円の前ではただの寝言にすぎない。 今日中に2万1千円を工面できなければ、たちまち路頭に迷う羽目になる。
椅子に深くもたれかかりながら、キーボードを叩いた。
「おい、エポ。俺が今ドライバーを持ってこのラックをバラしてパーツごとに売っ払ったら、いくらになる?」
【GPU4枚およびパーツの個別売却時における予想総額は55,000円です。取得原価15,000円を控除した単発の純利益は40,000円となります。】
【一日の最低生活費を約1,900円と仮定した場合、期待される生存延長期間は約21日です。】
「生存延長21日って表現が生々しすぎるだろ。結局、来月には野垂れ死ぬってことじゃねえか」
【正確な数学的結論です。】
思わず乾いた笑いが漏れた。 パーツを売り払うのは、たった一度きりの自爆ボタンにすぎない。だが、こいつを生かしておくなら話は別だ。 3年間の実務で泥臭く培ってきたバックエンドのアーキテクチャ知識に、エポの圧倒的な推論能力とバグ分析スピードが組み合わさったらどうなる?
(……受託開発だ)
ウェブブラウザを開き、国内最大級のITフリーランス仲介サイト『フリーワークス』の専門家プロフィール登録ページにアクセスした。 専門分野の欄にはバックエンドアーキテクチャ設計、緊急障害対応、パフォーマンスチューニングを選択し、自己PRには『原因不明のサーバー停止、間欠的なデータ欠損障害を即日分析・解決いたします』と入力して登録ボタンをクリックした。
しばらくして、スマートフォンにプッシュ通知が届いた。
フリーワークス『早瀬 透様のプロフィール審査が完了し、公開されました。さっそく掲載中の案件に提案を送ってみましょう!』
画面が切り替わり、リアルタイムで流れてくる数百件もの案件一覧が広がった。
モニター画面の左側には登録されたばかりの俺のフリーランスプロフィールが、右側には黙々と緑色のカーソルを点滅させているエポのターミナル画面が並んで表示されていた。
舞台は整った。 だが、数多のベテランエンジニアたちが単価を叩き合ってしのぎを削るこの市場で、首を切られた経験3年目のバックエンドのプロフィールに誰が目を留めるというのか。
仮に奇跡的に案件が転がり込んできたとしても、この鉄屑の中に潜む未知の人工知能と組んだ仕事が、本当に金になって返ってくるのだろうか。
足元から吹き出してくる生ぬるい排熱を感じながら、俺は頬杖をついたまま、点滅するカーソルをぼんやりと見つめた。
これで本当に、今月の家賃5万5千円を稼ぎ出せるのだろうか。




