第5話「暴走する迷宮」
深夜のバッチ問題を片づけた後も、あのコメントが頭から離れなかった。
`// TODO: いつか直す`
書いた者はまだどこかにいるのか。それとも、もういないのか。答えが出るより先に、朝になった。
アラートが鳴ったのは、そのときだった。
『アラート:ダンジョンインスタンス — 難易度値 異常上昇(CRITICAL)』
地上は明るくなっていた。住人たちが動き始め、光の点が大陸全土で動き出している。その中で、北部山岳地帯のいくつかの点が消えていた。
「ノード、詳細を出してくれ」
「はい……えーと、北部の第七迷宮です。難易度の値が、上限を超えて上昇し続けています」
俺はダッシュボードで第七迷宮を開いた。いくつもの層が積み重なったダンジョン。最上層に入った冒険者の記録がある。深層に進んだ記録は――消えていた。帰還の記録がない。
「現在、何名が中にいる」
「えーと……十七名です。うち、下層の記録が残っている方が七名……」
七名が深層にいる。戻ってきていない。
俺はダンジョンの生成ログを掘った。この迷宮はどこから来ているのか。遡ると、根元にたどり着く。
ダンジョンを作るための設計図だ。部屋のつなぎ方、モンスターの配置、難易度の計算方法。全部がこの設計図に書かれている。設計図さえ正しければ、そこからいくらでも同じダンジョンを量産できる。変えるときは設計図を直せば、次から生成されるダンジョンがすべて変わる。
前の世界では「IaC」と呼んでいた。コードで環境を定義し、自動で構築する設計思想だ。
問題はその設計図の中にあった。難易度を計算する箇所に、上限を設定する記述がある。……いや、あったはずだ。
該当箇所を開き、目を細めた。
上限を定義するはずの値が、存在しないアドレスを指している。結果として難易度の計算が際限なく回り続けている。ダンジョンに深く潜れば潜るほど、難易度が青天井で上がる。
`// 難易度上限パラメータ: MAX_DIFFICULTY → [undefined]`
また壊れたまま放置されたコードだ。
ログを遡る。設計図が壊れたのはいつからか。記録を辿ると、数百年前から難易度上限の値が「存在しない場所」を指したままになっている。ただし、それまでは問題が表面化しなかった。おそらく冒険者が深層まで到達できるほど強くなかった。世界が発展し、冒険者のレベルが上がり、深層まで踏み込む者が増えて――初めて計算の暴走が顕在化した。
俺はダッシュボードで被害範囲を確認した。第七迷宮だけではない。同じ設計図を元に生成されたダンジョンが、大陸全土に十七か所ある。今すぐ暴走しているのは第七だけだが、時間の問題だ。
正確には——時間ではなく、条件の問題だ。冒険者が深層まで到達できるほど強くなれば、どこでも同じことが起きる。世界が発展するほど、ダンジョンは危険になる。設計図の欠陥が、世界の成長に食らいついている。
* * *
王都の冒険者ギルド。受付長ガルド・ベインズは、窓口に押し寄せる冒険者たちの声を受け止めていた。
「北の第七迷宮がおかしい! 三層まで下りたら、モンスターが通常の倍以上の強さで!」
「うちのパーティが深層に降りたきり戻ってこないんだが! 連絡も途絶えて――」
「救助依頼を出してくれ!」
ガルドは大きな手を上げ、静かに声を張った。
「落ち着いてください。一人ずつ、順番に。情報を整理します」
内心では、胃の奥が重くなっていた。
最近、ダンジョンの報告が……いや、なんでもない。そう思って飲み込んできた言葉が、今日は抑えきれない気配がある。ここ数週間、深層の難易度が上がったという報告が散発していた。個別の事例として処理していたが、今日は違う。同じ迷宮から、同時多発的に報告が来ている。
「冒険者の命を預かる仕事です。軽々しく判断はできません」
ガルドは副受付長に目配せした。深層への立入禁止措置を準備させる。情報を整理してから動く。それがガルドのやり方だった。
手元の台帳に、今週の迷宮報告を書き並べていく。難易度急上昇。モンスターの行動パターン異常。帰還しないパーティ。個別に見れば偶発事故だが、こうして並べると一つの流れが見えてくる。
折れた剣の柄をペーパーウェイトにした机の上で、ガルドは静かに計算をしていた。何かが、変わり始めている。
* * *
「お主が、新しい管理人か」
管理層の片隅から、低い声がした。
振り返ると、小柄な老人が立っていた。白髪に白い髭。土色のエプロンに、ごつごつした職人の手。体の表面がところどころ、石のような質感になっている。
「……誰だ」
「ダンジじゃ。ダンジョンの管理を担当しておる」
以前ノードから名前だけ聞いていた担当者だ。
「第七迷宮の設計図が壊れている。難易度の上限参照が死んでいる」
「知っておる」 ダンジの目が鋭くなった。「ワシのダンジョンじゃ。わかっとる。じゃが、お主に何がわかる。管理層から画面を眺めていただけの管理人に、ダンジョンの設計が読めるのか」
俺は黙って設計図の画面を開いた。
「造りは悪くない。階層ごとに難易度の傾きを変えて、飽きさせない設計にしてある。モンスターの配置も、数で押し潰すのではなく地形を活かした戦い方を要求する——攻略できたとき、確かな手応えが残るはずの作りだ。冒険者に"来てよかった"と思わせたかったんだろう」
ダンジが、わずかに目を細めた。
「ただ、難易度の上限参照だけが最初から脆い。外部の値に依存しているのがここ一か所。そこが切れれば全体が崩れる。最初から、わかっていたはずだ」
「……気づいておった」
ダンジが、低い声で言った。
「気づいておったが、直す前に前任がいなくなった。ワシだけでは設計図を書き換える権限がない。数百年、このまま待っておった」
俺は何も言わなかった。
数百年、誰かが来るのを待ちながら、壊れているとわかっていながら動かし続けていた。権限がない。変える手段もない。それでも止めれば、冒険者はダンジョンに来られなくなる。だから壊れたまま動かし続けた。誰かが来るまで。
「ワシのダンジョンは完璧じゃ……完璧じゃったんじゃ」
老人の声が、少しだけ小さくなった。
「外から設計図を書き換えれば直せるか」
「届かんのじゃ」 ダンジが首を振った。「設計図を書き換えても、それは次に作るダンジョンへの変更だ。今動いているダンジョンはすでに設計図を読み込み終えている——稼働中の処理を外から変えることはできん。中からコアに直接触れなければ、今走っている処理は変えられん」
「止めることはできるか。止めてから作り直す」
「中に人がおる。止めたら……どうなるか、ワシにもわからん。試すわけにはいかん」
俺はダッシュボードで深層の七名の位置を確認した。生きている。まだそこにいる。
「つまり、俺が中に入るしかない」
ダンジは何も言わなかった。職人のごつごつした手を見下ろして、しばらく黙っていた。
「お主、さっき言ったな。"攻略できたとき、確かな手応えが残るはずの作りだ"と」
「設計図にそう読めた」
「……前任がそのつもりで作った。ワシはずっとそう信じて、動かしてきた」 ダンジが、少し間を置いた。「そのこだわりを、言葉にしてくれた者は今まで一人もおらんかった」
老人が、小さくため息をついた。
「……ちょっとだけ、手を貸してやらんこともない」
ダンジが低くつぶやいた。
「ダッシュボードに接続口の一覧がある。ダンジョンの最深部につながっている口を使えば、地上に体を持って降りられる。ただしその間、お主はここから目を離すことになる。何かあっても、管理層からは手が出せん」
俺はダッシュボードを開き、境界点の一覧を呼び出した。管理層と地上をつなぐ接続口の一覧——ただし、ほとんどの項目がグレーアウトしている。ノードの劣化で情報が取れていないのか、実際に機能していないのか、判断できない。有効な接続口は、数えるほどしかなかった。その中に、ダンジョン最深部を指す接続口が一つあった。
そこを通れば、地上に降りられる。代わりに、管理層の監視が半盲になる。他で何かが起きても、気づくのが遅れる。
ダッシュボードに目を戻した。黄色い警告がいくつも並んでいる。今日も何かが起きるかもしれない。俺が管理層を空にしている間に、別のアラートが鳴るかもしれない。
でも、ダッシュボードの俯瞰図の中に、深層に取り残された七つの光の点がある。小さい。ひどく小さいが、確かにある。まだ生きている。
「ノード、俺が地上にいる間、アラートの監視を頼む。対処できないものは俺が戻るまで記録しておいてくれ」
「えっ、は、はい! でも……悠真さん、地上は初めてですよね? 大丈夫ですか?」
「わからん。行ってみないと」
「……わかりました。行ってらっしゃい」
ノードが、いつもより少し丁寧な声でそう言った。
俺は接続口を選択した。
* * *
気づいたとき、石の床の上に立っていた。
薄暗い空間。松明の光。湿った空気。足元は石畳で、前方に暗い通路が続いている。
驚いたのは、音だった。管理層は静かだ。ダッシュボードの警告音と、ノードの声と、自分の思考だけがある。だがここには、水の滴る音、遠くの何かが動く音、自分の靴が石畳を踏む音がある。
次に驚いたのは、重さだった。この体が、重力に引っ張られている。管理層では感じなかった感覚だ。
反射的に、管理画面を呼び出した。腕のブレスレットから薄い光が滲んで、手首の上に小さなウィンドウが浮かぶ。管理層にいるときの全画面表示とは違う、情報量を絞り込んだ簡易表示だ。接続が細い。世界の監視が、さっきまでの十分の一以下になっている感触がある。
それよりも。
俺は自分のステータスを確認した。
Lv.0。
スキルなし。装備なし。武器なし。
管理人として管理層にいる間は、権限があった。設定を変え、ログを読み、処理を止めることができた。問題が何であれ、画面の向こうから手を伸ばせた。
ここでは、その「画面の向こう」に来てしまった。
細い管理画面と、この手だけだ。前の世界では、どんな問題が起きてもターミナルを開けば手が届いた。コマンド一つ、スクリプト一本で、離れた場所のサーバに触れることができた。今ここにあるのは、強化なし、スキルなし、武器なし——素の体だけだ。
管理画面を開き、現在位置を確認する。第七迷宮・最深部付近。コアまでの距離がある。深層には、まだ七名の冒険者がいる。
画面の隅に、小さな数値が表示されていた。この体を地上に置いている間、世界のどこかにかかり続けている負荷を示す数字だ。今はまだ小さい。だが、確実に上がっていた。
通路の奥から、低い唸り声が聞こえた。
足が止まった。管理層から俯瞰図越しに見ていたとき、あの勇者パーティが魔獣と戦っていた。技が止まっても、アリアは体を動かした。仲間がいたから。武器があったから。
俺には、どちらもない。
――自分でやった方が早い、と思ったのは管理層でのことだ。地上に来て、初めてわかった。自分でやれないことが、ある。
お読みいただきありがとうございます。
【今回のIT用語】
IaC(Infrastructure as Code):環境の構成をコードで定義し、自動で構築・管理する手法。「設計図から環境を量産する」イメージで、設計図を変えれば次から作られる環境もすべて変わります。今回の問題は、設計図の一部が「存在しない場所」を参照したまま放置されていたことでした。エラーが出るのはテンプレートを適用するときではなく、ダンジョンが実際に動くとき——難易度を計算するたびに外部から上限値を読み込もうとして、空の値が返ってきます。その結果、計算が際限なく走り続けました。コードの中の小さな欠落が、数百年後に人命に関わる障害を引き起こす——それがこの話の根っこにある問題です。
次話「戦えない管理人」もよろしくお願いします。
感想・ブックマークいただけると励みになります。




