ハローサマー、グッドバイ(14) 頼むから静かにしてくれ
エアコンの効いた指揮車両内に戻ると、さすがにほっとした。温度だけの問題ではなく、Zの大群という物理的な危機から逃れたという安堵感だ。もっともブラウンアイズたちバンド隊員たちが、外で危険にさらされていることを思うと、自分だけ安全な場所に逃れてきたのが後ろめたい。ブラウンアイズは、ぼくが車内に入るのを見届けると、元の場所に引き返している。
「おつかれ」島崎さんがぼくを迎えてくれた。「暑かったでしょ」
「それどころじゃないですよ。Zの大群なんでしょ?どう対応するんですか?」
「さあ。やり過ごすんじゃないかな」
臼井大尉は、ナビゲーターシートではなく、後部のモニタの前にいた。30 インチモニタに映し出された空撮映像を見ながら、難しい顔をしている。
「大尉」小清水大佐が心配そうな顔で言っている。「凝固でやりすごすのかね?」
「できればそうしたいんですがね」臼井大尉は画像を指で上下左右に動かして状況を確認しながら答えた。「やりすごすには、少しばかり数が多いですね。この映像によると、群れといってもかなりまばらで、先頭から末尾まで1 キロほどにわたってます。奴らの進む速度は時速3キロ以下ですから、全部をやり過ごすには1 時間かそこらかかりますね。もっとかもしれない。とてもそんな時間はかけてられません」
「別のルートはないのかね」
「こっちは菊名駅に向かっていますが、狭い道路の上に、行き止まりです。右に入ると線路沿いの、やはり狭い道路で、そのまま進むと反対側に出てしまいます。どちらにせよ、狭い道は隊員の安全面から行きたくありません。そもそもCCV が通行できるかどうか」
「じゃあどうするんだね」
臼井大尉は肩をすくめた。
「火器の使用許可を出して、強行突破するのが最善の策ですかね」
その途端、朝松監視員が立ち上がった。全身に怒りをまとわせて。
「許可できん」
「ああ、やっぱり」予想していたらしい臼井大尉は落ち着いた声で応じた。「そう仰るんじゃないかと思っていました」
「当たり前だ」朝松氏は断固とした口調で言った。「特に隊員の生命が危険にさらされているわけではないだろう。銃の使用など認められんね」
「隊員たちの銃に装填されているのは、全てレスリーサル弾です。奴らの足を止めるだけですよ」
「ラバー弾だって至近距離から発砲すれば、頭部に重大な損傷を与えることになるだろう」
「足を狙いますから、そんな心配はご無用です」
「確実に足に当たるという保証はない」
「うちの隊員たちは皆、一級射手です。対Zの経験も豊富です」
「その経験は海外で積んだものだろうが。Zの殺戮が許されている、いや推奨されている国々でな。信用できん」
「小清水大佐が緊急事態だと判断すれば、監視委員会の許可なくZを排除することは可能なんですがね」
「やってみるがいい」臼井大尉の挑発に、朝松氏は冷静に応じた。「帰還したら隊員全員を告発してやる。もちろん、大佐と君もだ。その前に私は、君たちを制止するために、全力を尽くすがな」
その言葉と同時に、朝松氏の手にハンドガンが出現した。銃口は下を向いているが、指はトリガーにかかっている。ぼくは、思わず後ずさった。監視員が持つのはテイザーガンだと思い出した後も、元の位置に戻る気にはなれなかった。
「大尉、大尉」小清水大佐が慌てて割り込んだ。「こう仰っている以上、強行突破は無理だよ。凝固でやり過ごせばいいではないか」
「凝固って何ですかね」ぼくは小声で島崎さんに訊いたが、臼井大尉の耳にはしっかり届いていたようだ。
「凝固というのはな」臼井大尉はぼくに向き直った。「Zが通過するまで、じっと動きを止めることだ。命令があるまで、音を立てるような動作はできんし、もちろん声も出せない。無害な樹木にでもなった気持ちでひたすら耐える。できるか?」
「このCCV の中で、ですよね?」ぼくは確認した。
「そうだ。ただしエアコンは停止するぞ。モーターも止めて、各システムはバッテリー駆動に切り替わるからな。それでも君たちはまだ室内だからいい。隊員たちは外で凝固する。炎天下の中で1 時間。誰か1 人がZに発見されても、場合によっては見殺しにしなければならん。それでも凝固でやり過ごしますか?」
最後の問いは小清水大佐に投げられたものだった。小清水大佐はうろたえたような顔で、ボリス、朝松氏、島崎さん、胡桃沢さんを見たが、やがて力なく首を横に振った。
「君に任せる」小清水大佐は横を向いた。「ただし火器使用は許可できない」
「私としては、突破が無理なら一旦オペレーションを中断して、港北基地に引き返すことを提案します」臼井大尉は挑むような目で小清水大佐を見た。「すでにソリストには問題があることが判明したわけですから、そのバグだか何だかを解決した上で出直すのがベストではないでしょうか。暑い中、外に出てまでデータ収集してくれた鳴海さんには悪いが」
最後の言葉はぼくに向けられていたが、もちろん文句を言うような心境ではなかった。ここで引き返してくれるのなら、むしろ諸手を挙げて歓迎したい。だが、小清水大佐は、ぼくと異なる見解を持っていたようだった。
「論外だ」小清水大佐は声を上げた。「問題外だ。ここでオペレーションを中止するなど、絶対に許可できん。まだ隊員に被害が出たわけではないではないか」
「私も同意見ですね」ボリスも小清水大佐に同調した。「まだ、テストは開始されたばかりですからね」
誰かがもっと強硬に作戦中止を主張してくれないものか、と思っていたが、臼井大尉もそれ以上反論をしなかった。
「では、分隊を脇道に進ませて、花火を上げさせましょう。群れをそっちに誘導しておいて、街道が空いたところでCCV は全速で突破する」
「隊員たちはどうするんですか?」ぼくは思わず訊いた。
「分隊は大きく迂回して、この先で合流する」臼井大尉は信頼の笑みを浮かべた。「心配いらんよ。移動速度は隊員たちの方が速いからな。それより、鳴海さん、ソリストの方のデバッグを進めてくれ。本来ならこの種の作戦行動は、最低でも支援車両3 台と中隊規模で行うのが常だ。それを、ソリストがあるからという理由で、一個小隊で来ているんだからな」
それを聞いた小清水大佐は顔を逸らし、ボリスが肩をすくめた。
「バグ出しもテストの目的のうちですよ。それに優秀なプログラマも同行しているんですから、すぐに修正してくれるんじゃないですかね」
どうやら「優秀なプログラマ」というのは、ぼくを指しているらしいが、ボリスがぼくを見る目は、最大限に好意的に解釈しても「下請けプログラマくん」と言っていた。こういう人種は前の会社でよく見かけた。プログラマを使い捨てできる消耗品だとしか思っていない奴だ。まともに取り合っても、時間を浪費するだけで得るものは何もない。
「お褒めいただいてどうも」
ぼくはそれだけ口にすると、デバッグ画面を開いた。せっかくブラウンアイズの協力で得られたデータをムダにしたくなかったのだ。
ソリストが、得られたデータからZを判定する解析ロジックは、その大部分はjar ファイルの中にあり手が出せない。いや、たとえソースがあったところで、膨大な量に決まっているロジックを解析し、修正し、テストする作業を短時間で終えるのは不可能だろう。ハウンドと佐分利のエンジニア、さらに下請け、孫請けのプログラマが数ヶ月以上かけて実装したロジックを、一介の――しかも2 年以上のブランクがある――プログラマがどうにかできる、という幻想を、ぼくは抱いてはいなかった。
ぼくが思いついた唯一の方法は、それらのメソッドに渡すデータを加工することで判定条件を操作することだった。たとえば、本来なら体温が摂氏30 ℃から34 ℃でtrue になるべきところが、32℃から33℃という判定をしているためにfalse になってしまっているなら、33 ℃に変更して渡してやればいい。ただし、やり過ぎると本来の判定ロジックが意味をなさなくなってしまうので、まずは現在のロジックがどうなっているのかをテストする必要がある。そのために生データを収集したのだ。
指揮車両がゆっくりと動き出していたが、ぼくはほとんど気に留めず、ソースに集中していた。最初に行ったのは、判定ロジックが含まれているクラスを特定することだった。ダウンロードすることができたjar ファイルは329 個。sls40_004A006G-a.jar のように面白みのない名前になっている。このシステムを設計した奴は適切な命名による利点を学ばなかったのか、それともあまりにもクラスが多すぎて管理ができなかったからなのか。
やむを得ず、ぼくは次善の策を取ることにした。jar ファイルはzip 形式の圧縮ファイルなので、クラス単位に解凍することができる。329 個のファイルを手動で解凍していては日が暮れてしまうので、まず、指定のディレクトリ内のjar ファイルを解凍するプログラムを書いた。
「おい」不意に胡桃沢さんが声をかけてきた。「対応できそうなのか?どういう方針でやるんだ」
「えーとですね......」
ぼくが簡単にやろうとしていることを説明すると、胡桃沢さんはしばらく黙ったまま何か考えていたが、やがて小さく頷くと自分の席に戻っていった。
「まあ、あの人のことは気にしないでいいから」島崎さんが囁いた。「マネジメントしてるんだってことをアピールしたいだけだよ」
「はあ」
jar ファイルは無事に解凍された。クラスファイルもやはり同様の命名規則になっていたが、それはどうでもよかった。手元にあるソースにはクラス名が書いてあるので、必要なクラスを検索するだけだ。
コマンドを叩き始めたとき、指揮車両が急停止した。
「どうしたんだ」小清水大佐が狼狽の叫びを上げた。
「まずいですね」臼井大尉はモニタを睨んだ。「左前方にZの群れです。無傷の建物から出てきたようです。目視できる限りでは5......いや6 です」
『気付かれましたか?』谷少尉が訊いてきた。
「たぶんな。まっすぐこっちに向かってるからな」
『こっちで引きつけますか?』
「いや、お前達は予定通り、200 メートル離れたら花火を上げろ。こっちは何とかする」
『了解』
「何とかってどうするのかね」小清水大佐が訊いた。
「凝固します。数分待てば花火が上がります。そうすれば、そっちに引き寄せられるでしょうから」臼井大尉はそう言うと、サンキストの肩を叩いた。「いいか?」
「了解」
「全員、沈黙。囁き声もだ。絶対に物音をたてるな。マーク」
その命令の直後にエアコンが止まり、続いて壁面モニタが全てブラックアウトした。ソリスト関係の各サーバも一斉にスタンバイモードに入り、微かに耳に届いていたドライブ類の作動音も停止する。ドライバーズシートのフロントガラスも、遮光カーテンで覆われ、車内は薄闇に包まれた。
指揮車両の外からZのうめき声が聞こえてくる。嗅覚が正常だったら、同時に生ゴミのような臭いに顔をしかめたことだろう。車内で誰かが息を呑む音、足を動かした衣擦れの音、ノートPC のファンの音......普段なら気にも留めない音が、やけに耳につく。
ふてぶてしい態度だったボリスも、さすがに強張った表情で周囲を見回している。隣に座った小清水大佐は、それに輪をかけた狼狽を浮かべていたが、臼井大尉の方を見て何かを合図しようとした。同時に、バン!と指揮車両の車体やドアを叩く音が響き、全員がビクッと身体を震わせた。
もちろんぼくも例外ではない。これまで納期がきつい仕事もあったし、20 代は徹夜もざらだった。真冬にダウンジャケットを着込んで、サーバルームで14 時間を過ごしたこともあるし、エアコンのない大部屋に数十人のプログラマと一緒に詰め込まれて、熱中症寸前になるまでコーディングをしたこともある。しかし、ドア一枚隔てた外にZがうろついている状況で、顔も知らないどこかの誰かが作ったシステムのバグを修正するのは初めての経験だ。
車体が叩かれる回数と場所が時間とともに増えていた。うめき声も同様だ。臼井大尉を見ると、ヘッドセットを装着している。これまでのように、音声で命令を出せないので、小隊内LAN 経由で分隊と連絡を取っているのだろう。
ぼくはそっと指を動かして液晶に触れ、ソフトウェアキーボードを起動した。ブラウンアイズから渡されたヘッドセットをつければ通信はできるだろうが、ブラウンアイズたちはぼくに構っていられる状況ではないだろう。
ソリストモニタツールを起動して、いくつかコマンドを打ち込んで、ブラウンアイズのモニタ映像を選択した。建物の間を駆け抜けていくバンド隊員たちの姿が表示される。ブラウンアイズはかなり高速で移動しているようだったが、先ほどと同じように映像はブレていない。GPS 情報によると、すでに指揮車両から直線距離で150 メートルほど離れているようだ。
『第1 分隊、準備よし』谷少尉の声がヘッドセットから聞こえた。『大玉5 発。タイミングは第2 分隊に合わせる』
『第2分隊も位置につきました』ほとんど同時に柿谷少尉の声。『同じく大玉5 発。10 秒後にマーク。カウント開始。10、9、8......』
やがて上空から、破裂音が響いた。同時に執拗に車体を叩いていたZたちが一斉に手を止める。
『離れていく』ドライバーズシートのサンキストが言った。『前方から接近中のZの群れも、左右に分かれていきます』
『よし、1 分待ったらモーター始動』臼井大尉の声もソリスト経由で聞こえた。『みなとみらい方面へ抜けろ。ビーン、グレイベア、危険がないように迂回しろ。合流ポイントは状況を見て指示する』
その言葉通り、正確に1 分後、指揮車両のモーターが動き出した。同時にセーフモードになっていた各モニタが、一斉に復活する。
「うまくいったな、大尉」指揮車両が進み出したとき、小清水大佐が満足そうに言った。「この調子で頼むぞ」
しかし臼井大尉は首を横に振った。
「この手が使えるのは、これが最後です」臼井大尉は前方を見つめたまま言った。「花火は品切れですから。次に同じような状況になったら、強行突破か撤退のどちらかを選択することになります」
車内に沈黙が落ちた。ぼくはソースに目を落とした。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
「え?」
ぼくは思わず声を上げた。指揮車両内の全員が、何事かと視線を向けてきたが、ぼくはほとんど気にも留めなかった。
「どうした?」島崎さんが訊いてきた。
「例のZ判定ルーチンなんですけどね、なんで有効に動作しないのか大体わかった気がします」
「え、すごいな」島崎さんは近寄ってきた。「何だったの?」
「バージョンが違うんですよ」
「?」
島崎さんは首を傾げたが、代わりに胡桃沢さんとボリスが顔色を変えた。
「おい、何だって?」ボリスが険悪な表情を向けた。「バージョンって何の?」
「簡単に言うと」ぼくはノートPC のモニタを見せた。「それぞれのロジックに、いくつかのバージョンがあって、それが全部ソースの中に残ってるんですよ。こんな感じで」
ss_zch_02_hungun_lotter_0981_04Impl
ss_zch_02_hungun_lotter_0981_05Impl
ss_zch_02_hungun_lotter_0981_051Impl
ss_zch_02_hungun_lotter_0981_052Impl
ss_zch_02_hungun_lotter_0981_06Impl
「たぶん、いつでも前のバージョンに戻れるように残してあるんでしょうね」普通はバージョン管理システムを使うんですが、という言葉は呑み込んだ。「で、あるインターフェースに対する具象クラスがどれかは、リソースの中のxml ファイルで定義しているようなんですが、その記述が違っているみたいですね」
<interface id="ss_zch_02_hungun_lotter_0981">
<class id="ss_zch_02_hungun_lotter_0981_052Impl" />
</interface>
「これだと最新バージョンの1 つ前を使用する設定になってしまってます。この052 のソースはないんですが、生データを通してみたところ、赤外線情報の判定部分が丸ごと抜けているような感じです。何をインプットにしても、必ず結果が -1 になりますから」
「つまり」臼井大尉がやってきた。「バグということか?」
「いえいえ」ぼくが答える前に、ボリスが機先を制した。「これはバグではなく、設定ファイルの記述ミスです。ごく単純なケアレスミスです」
「ケアレスミスだか、ケアレスウィスパーだか、そんなことはどうでもいい」臼井大尉は冗談を言ったのかもしれないが、その口調にはユーモアのかけらも含まれていなかった。「不具合が発生しているのが、そこなのは間違いないんだな?」
最後の問いと共に臼井大尉はぼくを見た。
「そうです。この部分に関しては」
「この部分に関して、というと、他にも何かあるのか?」
「わかりません。だから、同様のミスがないか、全体を調査すべきだと思います」
「それはこっちでやります」主導権を握ろうとしたのか、ボリスが大声で割り込んだ。「そもそも、ソリストの全ソースは、ここにはないですからね」
臼井大尉は、返事をする前にぼくの顔を見た。ぼくは小さく頷いた。ソースに関してはボリスの言う通りだ。
「いいだろう。すぐにやってもらおう。それで、Z探知機能に関しては、すぐに修正できるのか?」
「xml ファイルを書き換えるだけならすぐですが」
「いや、そう簡単ではないですね」胡桃沢さんが発言した。「その修正をシステムに反映する必要がありますから。基本的には、出発前にやったリビジョンアップ作業と同じです」
「つまりシステムの再起動が必要だと?」臼井大尉は話にならん、というように首を振った。「作戦行動中にそれは無理だ。隊員間のコミュニケーションは、ソリストのデータ通信に依存しているんだからな」
「その、普通の無線はないんですか?」ぼくは訊いた。
「あるが、今現在、隊員たちが装着しているヘッドセットにはその機能がない。ユニットを交換すればいいんだが、封鎖地帯のど真ん中でそんなことをやりたくはないな」
「鳴海さん」島崎さんが困った顔を向けた。「何とかならないかな?再起動なしで、その変更を反映するのは無理かな」
「いやいや、無理だろう、そりゃあ」ボリスが笑った。「ソリストをよく知っているエンジニアだって難しいだろうに。さっき初めてソースを見たばかりのプログラマに」
どうしてこの男は他人の神経を逆なでするようなことしか言えないんだろう。それとも、何かぼくに恨みでもあるのか。
「胡桃沢さん」ぼくはボリスを無視して訊いた。「確か、HotDeploy ができましたよね。それを使えば、xml ファイルの内容をreload することができませんか?」
胡桃沢さんはすぐに頷いた。どうやら、同じことを考えていたらしい。
「できる......ただし、私はやり方を知らんぞ」
「君はわかるのか?」臼井大尉はボリスに訊いた。
ボリスは、余計なことを言いやがって、と言わんばかりに胡桃沢さんを睨んだ後、渋々頷いた。
「わかります。いえ、私はわかりませんが、港北基地に残っているうちのエンジニアに訊けばわかると思いますよ」
「じゃ訊け」
ボリスは大型のスマートフォンを出したが、すぐに舌打ちした。
「ダメですね。無線をお借りしていいですか」
「サンキスト」臼井大尉はドライバーズシートに呼びかけた。「基地を呼び出せ」
「了解」
指揮車両は、数分前に綱島街道の終点を右折し、第一京浜を進み始めていた。ここに至るまでに、10 回以上、Zの群れと遭遇していたが、いずれも事前に回避することで事なきを得た。ソリストのZ探知機能が正常に動作したためではなく、先行する2 人のポイントマンが間に合うようにアラートを上げてきたからだ。ドローンも飛ばしていたが、空撮映像を中継する以外の機能は使用していなかった。映像解析も赤外線探知、超音波探知も今のところ役に立たないので、それぐらいならバッテリーを節約しておいた方がいいからだ。
「大尉」サンキストが不安そうな顔で言った。「基地が出ません」
「なんだと」臼井大尉はサンキストの元に駆け寄った。「確かか?」
「はい。3回リトライしたんですが」
「もう一度、やってみろ」
「基地との通信もソリストで制御してるんですか?」ぼくは島崎さんに小声で訊いた。
「そう」島崎さんは不安そうな顔で頷いた。「といっても、通信そのものは既存の仕組みだよ。JSPKF が使う周波数のマイクロウェーブ。それに暗号化された圧縮データを乗っけてるだけ」
「定時連絡とかしてるんですよね」
「と思うけどね」
「ダメです」サンキストが呻いた。「出ません。小隊・分隊内LAN は異常なしです」
「基地とのデータ通信はどうだ?」臼井大尉は眉をひそめていた。「つまりシステム的な通信は」
「さっきからやってるんですが、PING が返ってきません」
「ふむ、困ったな」臼井大尉は冷静につぶやくと、こちらを見た。「誰かログをチェックしてくれ。最後に通信できたのはいつだ?」
ボリスと胡桃沢さんが揃ってぼくを見た。ぼくは肩をすくめてノートPC に向き直った。
「ログってどこで見るんですか?」
「えーと」島崎さんの視線が宙を彷徨った。「ユーザの、つまり隊員のログ参照なら管理メニューにあるけど、ネットワーク層レベルのログは画面がないね。直接開くしかないか」
「わかりました」
ぼくはコンソールに切り替えると、/var/log にcd した。その手のログは、だいたいこのディレクトリの下にあるはずだ。
「あ、待てよ」ボリスが立ち上がった。「ログは暗号化されて書き込まれてるはずだ」
「じゃあ読めないってことですか」
「そういうことだ。デコードツールがいる」
「あるんですか?」
「ない。同じ場所にあったら、暗号化する意味がないからな」
すまし顔で言うことじゃないだろうに。ぼくは非難の思いをこめてボリスを睨んだが、相手はぼくごときの感情など全く気にしていなかった。
「大尉」小清水大佐がそわそわと立ち上がった。「どうなってるんだね」
「原因はわかりませんが、基地と連絡が取れないことは確かです」
「それでどうするんだね」
「定時連絡がなければ、基地の方でも、何か異変が起きたことには気付くでしょう。今頃、向こうでもこっちを呼び出してるでしょうね。応答する術はないですが」
「連絡が取れなかったらどうするんですか?」ぼくは訊いた。
「すぐには何もしないだろうな」臼井大尉は天井を見た。「GPS でこっちが予定通りのルートを進んでいることはわかる。通信系のトラブルだろうと思うだけだ。一箇所でずっと動かないとか、シグナルが消えるとかすれば、救援か捜索が検討されるかもしれんが」
「......」
「救援や捜索と言っても、ヘリをぶっ飛ばすわけにもいかん」臼井大尉は面白くもなさそうに続けた。「我々が明確に危機的状況にあると判断する理由がないからな。そうでなくてもヘリは燃料を食うから、ちょっとやそっとじゃ、使用許可なんぞ出ないだろう」
「引き返すわけにはいかないんですか?」
「たかが通信の不具合ごときで作戦を中止したら、帰ったとたんに査問が待ってるだろうな。もちろん、君も例外じゃないぞ。だから、このまま進む。幸い、分隊との通信は問題ない」
ぼくは指揮車両の中を見回した。少なくとも、外見上は作戦を中止して引き返したいと考えている人間は、1 人もいないようだった。
「そういうわけだ。それで、そもそも最初の問題に戻ると、基地に問い合わせすることはできなくなった。君はなんとかソリストをまともに動くようにしてくれ。ここから先は、Zの密度がだんだん高くなってくるからな。ソリストが正常に稼働して、うちの隊員達の危険度が減れば、君自身の安全度を高めることにもなる」
(続)
コメント
BEL
なんか面白くなってきた。
それにしてもこの手のSFとITモノを融合させてしまうとは。
リーベルGさんのポテンシャルの高さというか引き出しの多さに驚いている。
今流行りの(?)ドローンも登場。
場末のシステム屋
「ケアレスミス」で死にたくはねえなあ…
しかし設定ミスでの稼働不能なんてありがちといえばありがち。
生き死にに関わらないからって仕事舐めてると詰られたら、返す言葉もない。
oioi
テストしないのかよ…
jam
体張ったテストでしょ。しかし、SFというか戦闘物の物語でのシステムエンジニアって、大体カタカタターン!でハッキングしたり敵のバリアを無効化したりと魔法使い的な扱いなのに、この話だと良くも悪くも地味で現実的で感情移入をせざるを得ないですw
ナン
通信が出来なくなった時点で引きかえすべきだと思うなあ…
読者はこの話が、敵はZじゃなくて、ソリストシステムだってわかっているからいいけど。
Zによる通信妨害とか、Zによる奇襲攻撃で基地壊滅とか、不測の事態に備えてここは引きかえす判断をしても良かったんじゃないかなあ
yas
Zはダッシュできるタイプではなく、
古典的なゆっくり歩くタイプみたいですね。