ふつーのプログラマです。主に企業内Webシステムの要件定義から保守まで何でもやってる、ふつーのプログラマです。

ハローサマー、グッドバイ(37) 防衛戦

»

 みなとみらい駅からクイーンズスクエアへと続く、地下3 階から地上1 階を結ぶ長いエスカレーターから上を見ると、モノリスのような黒い壁一面に刻まれたドイツ語の言葉がある。詩文のようだが、正確には詩ではなく、シラーの書簡の抜粋だ。その中に、こんな一節がある。

物質としての束縛を少しずつ断ちきり、
やがて自らの姿を自由に変えていくのである。

 BIAC とマイクロマシンを使用したプログラミング環境は、まさに物質としての束縛を断ち切った環境だった。プログラマは同時に1 つのコードしか書くことができないが、それは同時に使用できるキーボードの数が1 であるからだ。キーボードを複数用意したところで、手と目は一組しかないから、やはり一度にこなせる作業は、一箇所に限定される。だが、今、ぼくの目の前には20 個以上の仮想モニタがあり、それらに対して、ほぼ同時にコーディングを行うことが可能だった。1 つのソースに含まれる複数のメソッドを、同時にコーディングすることや、リソース使用量を参照しつつデバッグ用のデータを増減させることなど、手と目を使っていたらとてもこなせない作業を、楽々と並行できるのだ。数千行のソースをゼロから組み上げ、コンパイルし、テストケースを作成し、デバッグする一連の過程が、数秒で完了してしまう。

 皮肉なことに、ここまで実装作業が高速化されると、プログラムの実行時間の方がコーディングのそれを上回るようになってくる。今、取り組んでいるEV ヴァン回収ルート探索プログラムも、基本的なコーディング自体は10 分少しで完了したが、地図データを読み込み、Z分布状況マップをオーバーラップし、ナビゲーションロジックが結果を算出するのに2 分弱かかる。テスト結果に応じてデバッグに数秒、実行にまた2 分。これはラズベリーパイのCPU/メモリのパワーと、市販品SSD のアクセス速度、ネットワーク速度の限界だ。特に大量のデータを複数サーバ間で交換するような場合、100Mbps だと頭をかきむしりたくなるぐらい遅い。ソリストはデータを複数ノードで共有する基本構造になっているので、どうしてもサーバ間のデータ同期処理が頻繁に発生するのだ。

 午前8 時少し前、フライボーイ2 の充電率がようやく30% に達した。それを確認したサンキストは、屋上に行って充電ケーブルを外し、簡単にチェックした後、準備完了を知らせてきた。

 『飛ばせそうです』

 『よし、やれ』谷少尉は命じた。『全員、これからWi-Fi を広域モードにする。D 型の接近を警戒しろ』

 サンキストが管理コンソールにアクセスし、ぼくの視界に新たな仮想モニタが出現した。ソフトウェアコントローラだ。

 『OK、鳴海。Wi-Fi を切り替えてくれ』

 ボリスの言葉が正しければ、Wi-Fi を広域モードにすると、D 型を招き寄せることになる。だが、その甘受しなければならない危険性について、誰も今さら指摘しようとはしなかった。

 『切り替えた』

 『よし、行くぞ』

 サンキストの視界の中で、フライボーイ2 がふわりと浮かび上がった。しばらく状態を確認するように上空で静止していたが、サンキストがコントローラを操作すると、セキチューを中心に円を描くように飛行を開始した。

 『半径50 メートルから、2 メートル間隔のスパイラル軌道を取る。データ収集開始』

 サンキストはコントローラの数値を細かく調整した。途端に大量の測定データが流れ込んでくる。往路で役に立たなかった赤外線情報も来ていたが、やはり判定ロジックは効いていない。xml ファイルを確認したところ、最新のクラスが適用されている。zDetectionSubsystem の中をざっと検索してみたが、いくつかバージョン違いのクラスがあるだけで、動きそうなものはない。元々定義されていた、ss_zch_02_hungun_lotter_0981_052Impl と、最新のss_zch_02_hungun_lotter_0981_06Impl のdiff を取ってみても、ピックアップされるのはコメントや変数名の差違ぐらいで、ロジックが大きく違っている部分はないようなのだ。

 「未完成のまま出荷したのかね、これ」

 正常に動作しないのなら、やはり赤外線は無効にするしかない。ぼくはドローンの設定画面を開くと、赤外線部分を丸ごとオフにした。電力のムダを避けるためだ。

 幸い、ソナーと映像、その他のデータを使用したZ解析ロジックは正常に動作しているようだ。マシンが非力なせいか描画速度は遅いものの、1 キロ四方を表示した地図上に、ポツポツとZアイコンが出現していく。ぼくは全員のソリストに結果を反映した。通常なら1 秒に1 回の更新だが、トラフィック量を抑えるために10 秒に1 回だ。

 『多いわね』ブラウンアイズが嘆息し、同意の呟きが隊員たちから返ってきた。

 セキチュー周辺は特に多い。やはり、先ほどの騒乱が相当数のZを呼び寄せてしまったようだ。さらに周辺の街路から、ゆっくりとだがこの拠点を目指して移動してくるZもいる。脱出を急がないと、文字通りZをかき分けて進まなければならなくなるだろう。

 『西の方角に飛ばす』サンキストがコントローラを操作した。『ピッチ角5 度で上昇しつつ、西北西800 メートルまで移動』

 フライボーイ2 の飛行が変化した。スパイラル軌道を止めて、首都高速の上を戸部の方角へ飛んでいった。

 観測データが続々入ってくる。ストレージの容量が少ないので、解析に使用したデータは即座に/dev/null に放り込んでいるが、解析が追いつかない場合など油断していると、特定のラズベリーパイのディスク残量が10% を切っていることがあった。キューに蓄積された処理待ちデータが、GC をかけているわずかな時間に膨張するのだ。

 「ディスクが」ラズベリーパイの1 台に接続したテレビに、リソースグラフを表示させて見ていた胡桃沢さんが唸った。「やはり容量的に厳しかったか」

 「マメに消してるんですけどね。瞬間的に跳ね上がるんです」

 「このまま、大容量データの連続したI/O が続くと、それに引きずられて、ソリストのプロセスより先に、OS のパフォーマンスがガタ落ちになるな」

 メモリ空間とディスクをシームレスに使用できるので、ソリストから見たメモリ容量はSSD の容量に等しいのだが、OS からすれば、そんなことは知ったことではない。物理メモリがソリストのプロセスで占有されれば、swap ファイルに逃がそうとするだろう。このシビアな状態で、swap ファイルなんぞを使われたらたまらない。インストール時に、swap 領域を無効にしておくべきだったが、今となってはもう遅い。swap 領域を監視して、swapoff を自動的に実行するシェルスクリプトを書いて何とかしのいだ。

 数秒後、新たな問題が発生した。JVM のheap space が逼迫し始めたのだ。元々、ソリストサーバではJVM 自体がチップとして提供されていて、自動的にheap space の拡張を実施していた。ラズベリーパイにはそんなものはないから、ソフトウェアとしてJava ランタイムを入れてある。これはノートPC のデバッグ環境を動かしているランタイムをコピーしたものだ。ソリスト自体はJava で実行されるが、いったん起動してしまえば、自分自身でメモリ空間を確保し、そのVM 上で動作する。本来ならJVM のheap space はそれほど必要ではないはずなのだが、どうもコアの部分が定期的に、親のJVM とメモリの一部を交換しているようだ。設計上の意図としては、Soldis のストレージに書き込まれたデータを、少しでも高速な物理メモリ空間と置き換えることらしいが。その間隔は次第に短くなっていき、ぼくはGC を頻繁にかけることを余儀なくされていた。

 『うーん』次第に更新されていくZ分布マップを見ながら、シルクワームが嘆息した。『首都高の向こう側も予想以上に多いな』

 『残った弾を全部持っていかんとな』テンプルがうんざりしたように応じた。『スナイパー班の援護は期待できんし』

 『ライフルが壊れてなきゃ』スクレイパーも言った。『俺は安全な場所から援護するだけだったのに』

 ぼくはルート探索プログラムのパラメータを少し変え、ルートを再計算した。セキチューから戸部警察署までは、徒歩ルートで15 分といったところだが、回収チームの3 人はいろいろ条件をつけた。できるだけ見通しがよく広い道路、行きと帰りは同じ道、トンネルなどは避ける、といった項目だ。

 最初に導出したのは、首都高速の下をくぐって、国道1号を通る最短ルートだったが、ドローンが拾ってきたデータによって断念した。ブルーライン高島町駅付近で、横転した大型トレーラーと、放置された自衛隊のトラックが重なり合うように道をふさいでいたからだ。その場所を迂回すると、狭い路地を進むことになり、3 人は難色を示した。高島町駅を南東に曲がるルートも、途中の片側車線が工事中で掘り返されたままなのが判明したため放棄した。結局、北西方向に進み、京急本線に沿って進むルートが最善と判断された。石崎川を2 度渡ることになるが、空撮映像で見る限り橋に問題はない。

 『ああ、クソ』テンプルが毒づいた。『DZ だ』

 サンキストは即座にフライボーイ2 を旋回させた。小柄な男のD 型が、カメラに向かってしきりに手を伸ばしていた。口からヨダレをこぼしながら、怒りをぶつけるように空しいジャンプを繰り返している。周辺にたくさんいるR 型はフライボーイ2 に興味を示していないから、ボリスが条件付けを設定したD 型の1 体なのだろう。

 『確かにWi-Fi 信号に反応しているようだな』谷少尉が興味深そうに言った。『サンキスト、道路に沿って100 メートルほど飛ばしてみろ』

 サンキストがフライボーイ2 を操作すると、D 型はそれを追いかけるように走った。周囲のR 型も、それにつられるように、フラフラとD 型の後を追っていく。

 『そこで折り返せ』

 フライボーイ2 は小さな弧を描いて反転した。その瞬間、D 型は近くの自動車の屋根に飛び乗った。屋根が大きくへこみ反発する。意図的にか本能的にか、その反動によって驚くほどの高度まで跳躍し、フライボーイ2 に飛びかかる。4K カメラが、半ば白濁した眼球と叫び声を上げる汚れた口腔を鮮明に捉え、その映像は恐ろしいほど急激に拡大されていった。

 サンキストは罵り声を上げてドローンを急上昇させた。D 型のふりまわす黒ずんだ指先が、ギリギリのところでフライボーイ2 の機体をかすめていく。見守っていた全員が、思わず安堵のため息をつくほど、それはきわどい距離だった。

 『今のはヤバかった』サンキストは冷や汗を拭った。『高度を10 メートル以上取った方がよさそうだ。お、またD 型......』

 サンキストが言葉を切った理由は、空撮映像の仮想モニタを見ると明らかになった。群れるR 型をはね飛ばす勢いで、太った女性のD 型が突進してくるのが見え、そのすぐ後ろから数10 体のD 型が走ってきていたのだ。

 『1 キロも飛ばしてないのに、こんなにD 型がいるって』サンキストは呆れたような顔になった。『大変だな、お前ら』

 『変わってやろうか』テンプルがサンキストを睨んだ。

 『いやいや。仲間の任務を奪うような卑劣な真似はできんよ』

 『鳴海さん』谷少尉が呼びかけてきた。『ソリストにはD 型を判定する機能はないはずですね』

 確かにZ分布図にも、今見ているD 型は表示されていない。おそらく、R 型は走らないから、移動速度あたりを見て除外してしまっているのだろう。

 『わかりました』谷少尉の言いたいことはわかった。『移動速度の条件を緩めるか消すかしてみます』

 『頼みます』

 何度も見たので、Z判定機能のロジックの構造はだいたい頭に入っているが、移動速度によるチェックルーチンは、すぐにはわからなかった。iS_lotManCouHu とか、st_ch_19_juknod、hundMidtermPot といった、意味不明な名称のメソッドや変数が多いので、推測が難しいのだ。この間抜けな命名規則を決めた奴を、または全く命名規則を決めなかった奴を呪いながら、今できる最善策、つまりブラックボックステスト手法に頼った。

 まず、ドローンから送信されるデータから、D 型が疾走している地点から取得した映像を何パターンかテストデータとして保存する。同様に、R 型しかいない地点からの映像も保存する。次にテストクラスを100 パターンほど作成し、Z判定機能ロジックを2 種類のテストデータで順に実行できるようなテストスイートを組んだ。最後に、クラスの中で使用されている全変数を出力する機能を追加し、全テストクラスを実行した。結果は30 秒ほどで出た。出力された変数の値をソートして比較すると、D 型ありのテストデータを使用した方が、数値が低いのがわかる。どこかの時点で、D 型を切り捨てたからだろう。値の推移を比較してみると、zch_ana05_yuki5_go_tessImpl というクラスを通過した後で違いが生じていた。

 『鳴海』サンキストが緊迫した顔を向けてきた。『そろそろバッテリーがやばい。あとどれぐらいかかる?コントロール下にあると、オートランディングは効かないから、いきなり墜落するぞ』

 『あと30 秒待ってくれ』

 集中するために、不要不急の仮想モニタは全部閉じた。ソースを追っていくと、ソナー関連のサブシステムからのインターフェースを多く利用しているのに気付いた。どうやら、ソナーによって測定した距離と、1 秒前の測定結果を比較し、その差が一定以上になると、Zではないと判断してしまうようだ。このクラスの中身をごっそり削除できれば話は早いが、javax.servlet.Filter#doFilter() のように、1 つのオブジェクトに格納された値に変更を加えて、次のクラスに渡す必要があるので、消すことはできない。試しに引数で受け取ったオブジェクトを、そのまま渡すように変更してテストしてみたところ、見事にException を吐いて死んでしまった。この厄介なクラスを通過した、というサインかフラグが必要なようだ。

 『まずいわ』今度はレインバードが警告を発した。『D 型の群れがみなとみらい大通りを、こっちに向かってくる。視認できる限りでは、10 体以上』

 ソースを元に戻し、改めてロジックを追った。どこかに判定する基準値を定義しているはずだ。プログラマがド素人で、マジックナンバーとしてソース内に記述しているかもしれないと思ったが、それらしい変数は見当たらない。仕方なく、読みづらいソースを追いかけた。時間がなかったのかズボラだったのか、それともよほどの自信家だったのか、このソースにはコメントがほとんどない。private メソッドが、80 個近くあるというのに。やむを得ず各メソッドの実行前と実行後に、オブジェクトの値を出力するLogger を挿入し、ダミーデータで再テストした。結果を見ると、27 個目のメソッドで値が激減している。ここだ。

 27 個目のメソッドを見たぼくは、憤死しそうになった。if~else if~ が60 回以上繰り返されていて、測定した移動距離によってポイントを付けていた。パラメータデータとして持っておけば、管理コンソールから簡単に修正できたのに。怒りを抑えて数値を追っていくと、1.85m/sec 以上ならポイントをゼロにしていることがわかった。不可解なのは、それ以降も、1.95、2.05、2.25 とelse if~が続いていることだ。疑問に思いながら下の方を見てみると、5.55m/sec から、またポイントを有効にしていて、加えて複数のフラグをオンにしている記述がある。ただし、その部分はコメントアウトされていた。

 コメントアウトを見ても仕方がない、と無視しようとして、ハッと気付いた。秒速5.55m ということは、およそ時速20km だ。これはD 型を考慮した記述ではないだろうか。

 少し迷ったが、コメントアウトされている部分を有効にしてテストしてみた。今度は問題なく処理が完了し、見事にD 型をZとして判定していた。

 『サンキスト』ぼくはコンパイルとモジュール化を行いながら呼んだ。『合図したらフライボーイ2 にさっきと同じルートを飛ばせてくれ。100 メートルで往復だ......よし、マーク』

 フライボーイ2 は、先ほどと同じように道路に沿って100 メートル飛行し、旋回して折り返してきた。新たにZ分布図が更新される。Zの数は増えていた。しかも、D 型については、赤の二重丸で表現されている。

 『お』シルクワームが驚いたように言った。『これはD 型だな。こんな機能があったとは聞いてなかったなあ』

 『おそらくハウンドは』谷少尉が言った。『ソリストをD 型のコントロールセンターとしても使用するつもりだったんだろうな。だが、マーカーでD 型を増殖させていることを知られたくないから、機能を殺してあったんだろう』

 『データは取れた』ぼくはサンキストに言った。『ドローンを戻していいよ』

 EV ヴァン回収チームがセキチューを離れたのは、8 時30 分だった。フライボーイ2 は、一度屋上に着陸させて充電した後、再度、飛ばされた。セキチューの東側の交差点の上でホバリングさせ、スピーカーから電子音を流したのだ。周辺のZがそちらに引き寄せられている間に、回収チームの3 人は駐車場側から抜けだし、戸部警察署目指して走っていった。

 本来ならフライボーイ2 で援護すべきところだったが、逆に汗に惹かれる蚊のようにD 型が寄ってくるだろうから断念された。シルクワーム、テンプル、スクレイパーの3 人はスタンドアロンモードに切り替え、チーム間の通信だけを有効にしていた。中継する隊員を出す余裕がないので、彼らとの連絡は戻ってくるまで途絶えることになる。

 回収チームがすずかけ通りの交差点を曲がった時点で、サンキストはフライボーイ2 を屋上へと戻した。音源を見失ったZたちは、しばらくの間、交差点でたむろしていたが、やがて四方へ散っていった。

 20 分ほど、何事もなく過ぎた。早くも気温は上昇していたが、緊張しているせいか、暑さなど気にならない。

 「どれぐらいで戻ってくるかな」ぼくはブラウンアイズに話しかけた。「1.5 キロぐらいなんだけど」

 「そうね」ブラウンアイズはけだるげに答えた。「行きが問題ね。どうしても慎重になるだろうから。D 型を避けながらだと、30 分か40 分か。もっとかもね」

 戻ってこないかもしれない、という可能性は、2 人とも口にしなかった。藤田の言った場所に車がないかもしれない、あっても壊れているかもしれない、残ったヘッドハンターの襲撃にあっているかもしれない......どんな可能性だってあり得る。谷少尉は、2 時間待っても回収チームが戻ってこなかったら、イチかバチかの脱出を試みることに決めていた。だが、移動手段もなく、武器も少ない。ケガ人2 人、意識不明の重体1 人、信用できない人間が3 人とくれば、脱出に成功する可能性は、限りなくゼロに近いだろう。

 『さっきのD 型の群れがまた近づいてきてる』レインバードが屋上から報告した。『今度はR 型を襲ってるわ。つまり本来の習性ってことね』

 『入り口に接近してくるようなら撃て』谷少尉が命じた。『ただし慎重にな』

 谷少尉があえて付け加えたのは、レインバードのドラグノフの残弾数が少なくなっていたからだ。D 型はレスリーサル弾を受けて転倒しても、すぐに起き上がってくる。足止めするには数発を撃ち込まなければならないだろう。実弾も残ってはいたが、こちらは元々多くはない。

 『あーまずい、まずいわ』レインバードは呟いた。『こっちに来る』

 映像を見ると、D 型に襲われそうになったR 型が、何の気まぐれか、セキチューの入り口に向かう場面が映っていた。その後をR 型が追っている。遠くからの騒音が耳朶を打った。D 型がやってきたのだろう。悪いことに、その動きが注意を惹いたのか、数体のD 型が同じ方向に走り始めた。つまりセキチューの入り口にだ。

 『制圧射撃......は無理だろうから』レインバードはドラグノフを構えた。『こっちでできるだけ食い止める』

 そう言ってレインバードは射撃を開始した。視界の隅に仮想ウィンドウが開き、レインバードのドラグノフの残弾数を知らせる。それは数秒ごとに1 発ずつ減っていった。

 『リローディング』レインバードは冷静に告げた。『予備弾倉残り3 つ』

 谷少尉は唇を噛み、少し考えた後、決断したように言った。

 「リーフ、大佐の拘束を解け」

 「え?」リーフは怪訝な顔で谷少尉を見た。「こいつをですか」

 「そうだ。急げ」

 リーフは命令に従った。ただし嫌々であることは明らかだった。手足を縛っている延長コードを切った後、必要以上に乱暴に小清水大佐を引っ張って立たせたからだ。小清水大佐は、小さな声で抗議したものの、谷少尉がゆっくり立ち上がると、怯えたように口をつぐんだ。

 「大佐」立ち上がったものの、レジカウンターに手をついて身体を支えながら、谷少尉は元上官を見た。「もちろん射撃訓練は受けていますね?」

 「あ?ああ」大佐は何度も頷いた。「受けた。基礎トレーニングコースで3 時間」

 「結構。その銃を取って1 階を警戒してください」

 「分隊長」ブラウンアイズが抗議した。「こいつを信じるんですか?後ろから撃たれるのがオチですよ」

 「手が足りない。五体満足な人間を床で寝させておくようなゆとりはないんだ」

 「でも......」

 「リーフの指示に従ってください」谷少尉はそう言うと、別の人間を見た。「おい、お前」

 呼ばれた藤田は、キョロキョロと周囲を見回した。

 「俺?」

 「お前だ」谷少尉は苦笑した。「一緒に脱出したかったら、お前もそこでスロープを守れ。朝松さん、そいつの拘束を解いてやってください」

 朝松監視員は頷くと、藤田を縛っていたロープをほどいた。藤田はリーフが差し出したUTS-15J を恐る恐る受け取った。ブラウンアイズは、またしても不満そうな顔になったが、朝松監視員が進み出ると、開きかけていた口を閉じた。

 「私が後ろから援護しよう」朝松監視員はテイザーガンを掲げた。「こいつが何か不穏な動きをしたら撃つ。それに必要以上にZを殺傷しないように監視する必要もある」

 「おいおい、おっさん」藤田は揶揄するように言った。「あんた、状況わかってんのかよ。Zの奴らは、俺たちと違って、コンプライアンスを徹底しようなんて気はさらさらないんだぜ。俺たちの命が危ない状況じゃねえか。なんで、そこまであいつらの人権を尊重してやらなきゃならねえんだよ」

 「私の娘と孫は」朝松監視員は静かな声で答えた。「インシデントZが発生したとき横浜にいた。赤レンガ倉庫のイベントに行ってたんだ。ヨコハマ撤退でも帰ってこなかった。おそらく、今でも封鎖区域のどこかにいるだろう。お前たちに殺されていなければ、2 人で歩いているはずだ」

 藤田は絶句し、その顔に後ろめたそうな表情が浮かんだ。軽率で間抜けだが、根はそんなに悪い奴ではないのかもしれない。

 「で、でもよ」藤田はかすれた声で言った。「Zになったってことだろ。殺してやった方が幸せじゃねえのかよ」

 「もし将来、Z化した人間の治療方法が発見されたとしたらどうする?確かに可能性は低いかもしれん。世界中の研究者が、Z因子を除去することは不可能だと言っているのも知っている。だがそんなことは関係ない。塵のような可能性であっても、ゼロではない限り、希望を持つことはできる。その希望が残っている以上、無意味な殺傷を許すわけにはいかん。魂はまだ失われてはいないかもしれない」

 Z人権保護特別措置法の成立には、いくつかの宗教団体の暗躍があったと言われていて、その中には輪廻転生を教義として掲げる団体もいる。信者の中には、魂は不滅であるという考えに一縷の望みを託すことでしか、絶望や悲しみから逃れることができなかった人々もいるのだろうか。

 藤田は、理解できねえ、という顔になったが、それ以上何かを言うこともなく、小清水大佐と一緒にリーフに連れられていった。自分が生き残るために従う気になったようだ。

 「私も」胡桃沢さんが進み出た。「お手伝いしたい」

 「ありがたいですが......」谷少尉は謝絶しかけた。

 「Z講習を受けたときに、射撃体験をさせてもらいました。引き金を引くぐらいはできます。それに」胡桃沢さんは、ぼくの顔をちらりと見て笑った。「彼にばかり活躍されると、帰還した後、私の評価が下がるのでね」

 「もし、島崎のことで罪悪感なり責任感なりを感じてらっしゃるのなら......」

 「そういうわけではない......いや、少しはそれもあるか。とにかく、手伝わせてもらえないだろうか」

 「わかりました。ブラウンアイズ」谷少尉は座りながら言った。「俺の銃を渡してやってくれ」

 ブラウンアイズは、もはや抗議しようとせず、素直に銃を渡した。胡桃沢さんは、感触を確かめるように銃身を眺めた後、ぼくの肩を軽く叩いてリーフたちに合流した。

 「少尉」ボリスが呻いた。「私も戦えます。銃は撃てるんです」

 「知ってますよ。あなたは、どうぞそのままで。今日一日で十分に殺したでしょう」

 「あのじいさんより役に立ちますよ。どうか拘束だけでも解いてください」

 『ウィンチェスター、ウィンチェスター!』レインバードが叫んだ。『弾切れ。実弾に切り替える許可を』

 『許可する』谷少尉は即座に応じた。『ただし、そいつを使う相手は、可能な限りD 型に限定しろ。回収チームの帰還時に援護が必要になるかもしれんから、弾倉1 つは残しておけ』

 『了解』

 「入ってきた」リーフが緊張した声で囁いた。「D 型が3、R 型多数」

 大きく破壊された入り口からZの群れがなだれこんできた。すでに店内にいたZとぶつかって大混乱になる。数体のD 型が、咆吼しながら、まっすぐスロープに向かってきた。恐怖で血の気が引いていくのがわかった。今、自分の顔をセルフィーしたら、きっと幽霊のように蒼白だろう。

 『ロックンロール。D 型優先で狙え』谷少尉は命じた。『スロープの下まで引きつけろ。サンキスト、お前は階段を死守しろ。スロープの方は気にしなくていい』

 『気にするなってもねえ』サンキストは苦笑しながら、言われた通り階段の踊り場に立った。

 2 階のスロープ出口で、リーフ、小清水大佐、藤田、そして胡桃沢さんが一斉にUTS-15J を構えた。藤田あたりがパニックになって、乱射を始めるのではないかと心配していたが、意外に冷静な表情で狙いをつけている。それどころか楽しんでさえいるようだ。考えてみれば、こいつはサバゲマニアだった。

 「胡桃沢さん、藤田」谷少尉が小声で指示した。「もう少し狙いを下の方に。撃ち倒すより転倒させた方が都合がいい」

 2 人がその言葉に従ったかどうかはわからない。次の瞬間、リーフが低い声で言ったからだ。

 「撃て」

 4 人は、ほぼ同時に発砲した。同時に仮想モニタが4 つ出現し、残弾数のカウントが始まる。リーフ以外は、UNKNOWN のタイトルだ。

 D 型の一体が、膝にラバー弾を食らって滑ったように転倒した。リーフが撃った弾だろう。残りの3 発は、D 型を外れて、周囲のR 型を吹っ飛ばした。

 後ろに続いていたD 型がスロープに足を踏み入れた。スロープの中程には、学習机や商品棚、テーブルや水槽などで簡易的なバリケードが作ってあるが、D 型は構わず突進してきた。4 人は同時にそのD 型を狙い、またもやリーフだけが命中させた。

 「へたくそだな」リーフが吐き捨てた。「おい、お前。もっと銃口を下げろ。ヘッドショットなんか狙うな、アホが」

 罵られた藤田は、ムッとした顔になりながらも、もう少し慎重に狙いをつけて発砲したが、弾丸はスロープに当たって跳ね返った。

 「くそ、使いづらい銃だ!」藤田は苛立った。「俺が持ってた銃はねえのかよ」

 「文句を言うな。撃て」

 最初から統制が取れているとは言えなかった射撃は、Zがバリケードに取り付くまで接近すると、ますますバラバラになっていった。リーフは正確な射撃で、とりあえずD 型を近寄らせなかったが、他の3 人の撃った弾はほとんどヒットしなかった。

 リーフは近くに用意してあったバケツを掴むと、中身の液体洗剤をスロープに勢いよく流した。足を取られて、何体かのZが転倒していった。藤田が狂ったように笑い声を上げたが、それが稼いでくれた時間は数秒だった。転倒したZの身体を踏みつけて、Zの群れが続々と上がってきたのだ。

 不意にバリケードを乗り越えようとしていたD 型の頭部が、バシッと破裂した。屋上からの階段の途中にレインバードが座り、手すりの間からドラグノフの銃口を突き出している。

 『ありがとよ』

 『お礼は基地に帰ったら受け取るわ』

 「お前ら」リーフは他の3 人に言った。「射撃中止。少し待て」

 レインバードは、さらに3 発を発射して、3 体のD 型の頭部を撃ち抜いた後、狙撃銃を引っ込めた。

 『悪いけど、ここまで。屋上に戻る』

 「よし」リーフは3 人の射手に合図した。「少し余裕ができたぞ。深呼吸して慎重に狙え。引き金を引く前に、1 秒だけ照準を確認しろ」

 余裕ができた、というのは、やや楽観的な表現だった。下のフロアは立錐の余地もないほどZであふれていて、さらに外から次々と新たなZが入り込んできていたからだ。

 「ごめん」ブラウンアイズは厳しい顔を向けた。「すぐ戻るから」

 そう言うと、ブラウンアイズは問い返す間を与えず、2 階の奧、カー用品売り場の方に走っていった。すぐに両手に何かを抱えて戻ってくる。2.5 リットルのカーシャンプーの容器だ。ナイフで容器の上部を切り落とすと、階段の方に走っていき、スロープの登り口の真上から中身をぶちまけた。緑色の液体がZの群れに降り注ぎ、何体かがもつれあって倒れた。

 「弾切れだ!」藤田が怒鳴った。「弾をくれ」

 「こっちも頼む」小清水大佐も言った。

 ブラウンアイズは、予備弾倉を4 つ掴むと、射手たちの元に走った。小清水大佐に2 つ渡し、チェンジ方法がわからないらしい藤田の手からUTS-15J を引ったくると、1 秒で弾倉を交換した。

 「もう残り少ない」銃を渡しながら、ブラウンアイズは釘を刺した。「ムダ弾を撃ったら、あんたを放り投げるからね」

 「このままじゃジリ貧だ」リーフが汗だくの顔を向けた。「もっと足止めできる何かを探してこい。何でもいい」

 「わかった」

 4人はまた射撃を開始した。さすがに前より慎重になっているのか、リーフ以外の弾もヒットする方が多くなってきた。それでも、もはや時間の問題だと言うことは、戦術に素人のぼくの目にも明らかだった。Zの数は圧倒的で、手持ちの弾薬の数は残り少ない。

 きっと身を焼かれるような思いだろうに、谷少尉はじっと座ったまま、部下が必死で戦っているのを見守っていた。

 「こっちからも昇ってくる」サンキストが告げた。「まだ余裕はあるんだが」

 「来たか」谷少尉は小さく頷いた。「何とか食い止めてくれ。時間を稼ぐんだ」

 「いつまでですかね」

 疲れた顔で答えようとした谷少尉は、不意にハッと顔を上げた。同時にレインバードの興奮した声が届いた。

 『帰ってきた!黒塗りのヴァンが大通りを接近中......おっと』レインバードは戸惑ったように言葉を切った。『その後ろにもう1 台』

 『もう1 台?』谷少尉は訊き返した。『車種は?』

 答えを聞く必要はなかった。急速に接近してくる聞き覚えのある音が、全員の耳に届いたからだ。それは、こんな場所で聞こえるはずのない音、パトカーのサイレンだった。

(続)

Comment(11)

コメント

とも

緊迫感がハンパない。

おる

>それは数秒後と1 発ずつ減っていった。
「数秒ごと1発ずつ」

わくわく毎週楽しみにしています。

dai

> 自動車の屋根に飛び乗った。その反動を利用して

移動方向がどちらも同じ(上方)なので、反動はおかしいかと。
「その勢いのまま」とか?

なるほど、それで戸部警察署か。
よくエンジン掛かったなー。

おるさん、daiさん、ご指摘ありがとうございました。

さな

>その瞬間、D型は近くの自動車の屋根に飛び乗った。
「D 型」ですかね?

この展開は興奮しますね!
来週も楽しみにしています。

p

数秒で数千行のソース書けるとか、30秒で80個近いメソッド弄るとか(logger足すだけだが)、人間やめすぎで笑った。
でも人間の思考速度でそんなこと可能だろうか、というのがちょっと疑問ではある。実はマイクロマシンが提供するのはUIだけじゃなかったのかな。

朝松さんは絶対家族だろうと思ってたので、納得がいきました。そういう選択をする人もいるでしょうね。

しかし弾倉が尽きそうで怖いですね。まあいざとなったら鳴海さんが救世主として覚醒して、手をかざすだけでZの群れをハックして昏倒させてくれるでしょう。

西山森

パトカーのサイレンを囮に脱出するのは良いとして、そのパトカーの運転手はどうやって脱出するんだろう?
まさか、もう食い付かれて後がないから、捨て駒になるって展開じゃあ...(>_<)

>ケガ人1 人、意識不明の重体1 人、信用できない人間が3 人とくれば
ケガ人って、谷少尉と前々回に右肩を撃たれた朝松さん、二人のような気が。。

いよいよ脱出。
ラズパイをボードにまとめる時間あるのかなぁ。。。

わさん、ケガ人は2人ですね。失礼しました。

ハローきんいろモザイク

ナルミンも十分ケガ人なような

コメントを投稿する