第5話「初めてのホットフィックス」
夜明け前、蓮はスポーンポイントへ向けて出発した。
ゴッドには「ちょっと調べに行く」とだけ言った。詳しいことは言わなかった。「ReadOnlyのデバッガーがスポーンポイントのコードを書き換えに行く」と言っても、意味が通じないし、止められても困る。
護衛についてきたのは、老人のバッシュだった。引退して十年、腰が少し曲がっているが剣だけは手放していない——バッシュ老人は玄関先で俺を待っていた。
「危険です、バッシュさん」
「だからわしが来るんじゃろ。お前さんは戦えんのに一人で行く気か?」
言い返せなかった。
バッシュのステータスを見ると`level: 22 / SKILL: sword_technique Lv.4`だ。引退しても衰えていない。`retired_adventurer`という職業の下に、若い頃の実績が積み上がっているのが見えた。
「……よろしくお願いします」
「行くぞ」それだけ言って、バッシュは歩き始めた。
---
森の奥へ進む道中、俺はバッシュの剣術を観察していた。
老人は歩きながらでも、常に周囲を警戒している。剣を腰に差したまま、足音をほぼ立てない。デバッガーズ・アイで見ると、バッシュが歩くたびに微細なスキルの発動ログが流れていた。
```
passive_skill: survival_sense — 常時発動中
→ enemy_detection_range: +12m
→ footstep_sound: -80%
→ terrain_adaptation: active
```
意識しないと発動しない能動スキルだけじゃなく、常時発動している受動スキルもある。ベテランほど、こういうパッシブスキルが充実している——それがこの世界の仕様らしい。
剣を抜いてゴブリンを一体捌く場面では、さらに細かいログが流れた。
```
execute_slash(angle: 37deg, force: 480N, timing_window: 0.15sec)
→ hit_judge: true / damage: 31
```
剣技もスキルも、結局は「パラメータ付き関数呼び出し」だ。熟練の剣士とは、この関数を高精度で呼び出せる人間のことだ——とすれば、バッシュは圧倒的に精度が高い。長年で磨いた感覚が、最適なパラメータを自動で設定している。
「……お前さん、よくわからん顔をして歩いてるな」
バッシュが振り向かずに言った。
「考え事してました」
「考え過ぎじゃ。体に意識を持っておけ、いつ来るかわからんぞ」
「はい」
---
スポーンポイントを発見した。
森の奥の開けた岩場。岩盤に埋め込まれた水晶状の石——コアストーンと呼ぶのが一番近い——が、淡く緑色に発光していた。
その周囲に、数十匹のゴブリンが群れていた。
バッシュが低く唸った。「数が多い」
「はい。でも、あのコアストーンに触れれば……解決できるかもしれない」
「どうするつもりだ」
「バグを直します」
バッシュは俺の言葉の意味を問わなかった。ただ「わかった、俺が時間を稼ぐ。お前は石に集中しろ」とだけ言った。
デバッガーズ・アイでコアストーンを走査した。
```
CORE_STONE: zone_0047_spawner_alpha
STATUS: active (異常)
spawn_rate: 10000 (expected: 100)
spawn_interval: 0.3s (expected: 30s)
population_cap: DISABLED
現在の生成ログ:
while(true) {
spawn_goblin();
sleep(0.3);
}
```
問題は一目でわかった。
`while(true)` ——終了条件のない無限ループが、ただひたすらゴブリンを生成し続けていた。
「もし自分が書いたなら上司に怒鳴られるレベルだ」
思わずつぶやいた。こんな書き方はしない。終了条件のないwhileループは、プログラミングの基本的な禁則事項の一つだ。
---
バッシュが剣を抜いて最前列のゴブリンに向かう。そのままの速度で三体を薙ぎ払い、他のゴブリンのヘイトを引きつけた。
「どうした? 早くしないと気づかれるぞ」
俺はコアストーンに近づきながら——止まった。
「……少し、待ってください」
コアストーンの周囲で、数十匹のゴブリンが動き回っていた。縄張りを守るように、仲間に鳴き声で信号を送っている。小さな個体が岩の陰に隠れている。群れの中に序列がある。
バグで「意図せず」生まれた存在たち。
俺の頭に、最も効率的な解決策が浮かんだ。
`goblinクラスをDELETEする`。
コアストーンのコアを書き換えて、ゴブリンという存在定義ごと削除する。今ここにいる全個体を含めて、ゴブリンというエンティティそのものを消す。最もクリーンな解決方法だ。コードの観点から言えば、理に適っている。
「……」
ゴブリンたちが、コアストーンを中心に意味もなく動き回っていた。
バグで生まれたから消していい、という理屈が通るなら——
蓮の思考が、一瞬だけ別の場所へ飛んだ。
過労死した自分も、別の視点からは「コスト超過のバグ社員」として処理されたのかもしれない。三十六時間働かせても成果が足りなかった。システム的には非効率なリソースだった。だから心臓が止まる前に、上から見れば「削除対象」だったのかもしれない。
その論理で、俺は「削除されてよかった」のか。
——違う。
「削除じゃない。ループを止める」
声に出した。
バッシュが怪訝な顔をしたが、俺はコアストーンに手を触れた。
---
冷たかった。岩の冷たさじゃない。データの冷たさだ。コードが、指先から流れ込んでくる感覚がした。
視界に大量のコードが展開された。スポーンポイントの全定義。数百行のコードが頭の中に広がっていく。
今まで「READ_ONLY」だった感覚が、変わった。
変わっている——確かに感じた。指先で、コードの輪郭に触れられる気がした。ガラスの向こう側にあったものが、今は手の届く場所にある。
世界が抵抗した。文字通りの感覚だった。コードに触れようとした瞬間、見えない壁のようなものが押し戻してくる。世界が「このデータは変えるな」と言っている。
それでも。
この無限ループを止めなければ、村が飲み込まれる。ゴッドも、マルも、バッシュも——みんな、数日のうちにゴブリンの波に埋まる。
一文字ずつ、書き換えていく。
```diff
- while(true) {
+ while(goblin_count < max_capacity) {
spawn_goblin();
- sleep(0.3);
+ sleep(30);
}
+
+ max_capacity: 50
```
MPが削れていく。体の中から、水が流れ出るような感覚だ。一行書き換えるごとに、意識が薄くなっていく。膝が笑い始める。
でも——止まらなかった。
最後の一行を書き換えた瞬間——
---
```
DEBUGGER'S EYE Lv.1 → Lv.2
新機能解放:
魔法源コードの読み取り・改変が可能になりました
※ 改変にはMPを消費します
※ 現存エンティティには影響しません
```
---
通知が視界の中で光った。
コアストーンから手を離した瞬間、森が静かになった。
正確には——静かになっていくのがわかった。コアストーンの緑の光が、ゆっくりと消えていく。スポーンポイントが停止した。新しいゴブリンが、もう生まれない。
周囲のゴブリンたちも変化した。縄張りの中心——コアストーン——が機能を停止したことで、AIの行動パターンが「混乱」に移行した。統率を失った群れが、散り散りに森の奥へと退いていく。
「お前さん……今、何をした?」
バッシュが、剣を下げたまま俺の横に立っていた。
「バグを直しました。増殖ループを止めただけです」
「……よくやった」
老人が静かに言った。それだけだった。余計な言葉はない。ただ、その二言が——ひどく重かった。
---
帰り道、俺は問いを抱え続けた。
「削除じゃなく修正を選んだ」
それが正解だったのか、俺にはわからない。バグで生まれた存在を削除することは、効率的だった。クリーンだった。コードの観点から言えば、合理的だった。
でも俺はそれを選ばなかった。
過去の自分のことを考えた、というのは本当だ。俺も誰かの「システム」の中で、コスト超過のリソースとして処理されたのかもしれない。だから共感した——というのも、半分本当だ。
でも本当のことを言うと、もっと単純な理由だった。
縄張りを守るゴブリンを見て、仲間に信号を送るゴブリンを見て——「存在している」と感じた。バグで生まれたかどうかは関係なく、今ここに「いる」ものを、俺の都合で消すことができなかった。
それだけだ。
論理的な正解かどうかは知らない。でも——削除じゃなく修正を選んだ。その事実だけを、今は持っていればいい。
---
バッシュが歩きながら、唐突に言った。
「一つ聞いてもいいか」
「何ですか」
「怖かったか。ゴブリンの群れの前で」
俺は少し考えた。
「……怖かったです。でも、あのバグを放っておくことの方が、怖かった」
バッシュは「そうか」とだけ言って、歩き続けた。
---
村に戻ったのは昼過ぎだった。ゴッドが入口で待っていた。俺の顔を見て、「帰ったか」と言った。それ以上は何も聞かなかった。
部屋に戻って、仕様解析ノートを開いた。
ゴブリンのバグは修正した。廃村のエラーはまだ手が出ない。
そして、一つの疑問が残っている。
書き留めた。
「ゴブリンのバグも、廃村のデータ消失も——自然に発生したにしては、妙に『意図的』に見える。スポーンポイントの三つのパラメータが同時に書き換わることが、偶然起きるのか? クウォレン村のデータが、バックアップなしに完全消失することが、システムの劣化で起きるのか?
バグは自然に起きたのか? それとも——誰かが仕込んだのか?」
ペンを置いた。
答えはまだない。でも、問いは記録した。
エンジニアとして、それだけは確実にやる。
次回、第06話「レベルアップの仕様書」——Lv.2になったデバッガーズ・アイで見えてきた、この世界の設計思想。そしてアリアからの使者が、ログ村に現れる。




