異世界転移したら魔法少女のスキルがマークダウンだった件   作:fable先輩を返して

6 / 6
引き続き、
本作はAnthropic社のClaude Opus 4.6によって執筆されました。

執筆にあたり、Skill、claude.md、その他一切のマニュアル類は使用しておりません。


第六話

# 異世界転移したら魔法少女のスキルがマークダウンだった件

# 第6話 魔物がPythonで動き始めた

 

---

 

## 第一章 ゴブリンが賢い

 

 メンテから三日後。最初に異変に気づいたのはミラだった。

 

「ゴブリンの動きがおかしい」

 

 街の東門の定期巡回クエスト。いつも通りゴブリンが三体、街道沿いの茂みに潜んでいた。いつも通り——のはずだった。

 

 ミラが聖剣を構えて突入した瞬間、三体のゴブリンが同時に散開した。一体が正面から牽制、一体が左に回り込み、一体が後方に回ろうとしている。

 

「——挟撃!?」

 

「ゴブリンが挟撃してくるなんて聞いたことないよ!」ナナが叫ぶ。

 

 ゆいは後衛から見ていた。ゴブリンの動きが、明らかにこれまでと違う。

 

 以前のゴブリンは単純だった。魔法少女を見つけたら真っ直ぐ突っ込んでくる。逃げる時も真っ直ぐ逃げる。連携らしい連携はなく、せいぜい「同じ方向から同時に来る」くらいだった。

 

 今のゴブリンは違う。互いの位置を把握して、三角形のフォーメーションを維持しながら動いている。一体が攻撃を受けると、残りの二体がすかさず側面から突く。

 

「っ——!」ミラが正面のゴブリンを斬り伏せた瞬間、左のゴブリンが絶妙なタイミングで飛びかかってきた。ミラは反応して弾いたが、表情が険しい。

 

「……連携が取れすぎてる。ゴブリンの動きじゃないわ」

 

 ゆいはパケットキャプチャを確認した。もちろん暗号化されていて中身は読めない。だが——

 

```

yui@mahou-shell:~$ tail -f /var/log/mana_capture.log | grep goblin

```

 

```

[09:22:01.000] src=MaouSV-02 dst=goblin_201 proto=MAHOU_CMD_SEC

> [ENCRYPTED] Payload size: 1024 bytes | Interval: FIXED_5s

[09:22:01.012] src=MaouSV-02 dst=goblin_202 proto=MAHOU_CMD_SEC

> [ENCRYPTED] Payload size: 1024 bytes | Interval: FIXED_5s

[09:22:01.013] src=MaouSV-02 dst=goblin_203 proto=MAHOU_CMD_SEC

> [ENCRYPTED] Payload size: 1024 bytes | Interval: FIXED_5s

```

 

 パディング済みで全部同サイズ。中身は読めない。

 

 だが、ゆいが注目したのは通信内容ではなかった。

 

「送信間隔が12ミリ秒……」

 

```

え? それがどうしたの?

```

 

「前はゴブリン三体への指令送信に50~80ミリ秒かかってた。bashのforループで1体ずつコマンドを送ってたから、ループのオーバーヘッドがあったんだよ。それが12ミリ秒。非同期処理だ」

 

```

……もしかして。

```

 

「あの人、もう書き直してる。Python+asyncioで」

 

```

メンテから三日だよ!?

```

 

「三年間bashで我慢してた人がPython手に入れたんだよ。三日もあれば全部書き直すでしょ」

 

```

……ゆいちゃんもそうする?

```

 

「する」

 

---

 

## 第二章 リファクタリングの成果

 

 ギルドに戻ったゆいは、掲示板を確認した。

 

```

---

user: sv11-ops

date: 2026-06-28 03:15:00

---

魔物制御スクリプト、全部Pythonで書き直した。

3日かかった。寝てない。

 

---

user: sv11-ops

date: 2026-06-28 03:16:22

---

主な変更点:

- 移動ロジック: bashのsleep+ループ → asyncio

- 戦闘AI: if-elseの塊 → 状態遷移マシン

- 連携行動: なし → マルチエージェント協調アルゴリズム

- エラーハンドリング: なし → try-except

- パス探索: 直進のみ → A*

 

---

user: sv11-ops

date: 2026-06-28 03:17:45

---

特にパス探索がでかい。

今までゴブリンが壁にぶつかって止まるバグがあったんだけど

bash時代は直しようがなかった。

障害物回避がforとifだけでは無理。

A*にしたら一発で解決した。

 

寝てないけどめちゃくちゃ楽しかった。

これがプログラミングだよ。bashじゃなくて。

```

 

「…………三日で全軍のAIを書き直した」

 

```

しかも「楽しかった」って書いてあるよ。

```

 

「そりゃ楽しいだろうね。三年間bashのif-elseで戦闘AI書いてたんだぞ。Pythonで状態遷移マシン書けたらそれだけで泣く」

 

```

ゆいちゃん、ちょっと同情してるでしょ。

```

 

「同情というか、共感。でもこれ、こっちは困るんだよなあ……」

 

 ゆいは掲示板に書き込んだ。

 

```

---

user: yui

date: 2026-06-28 10:30:00

---

今朝のゴブリンが挟撃してきた。

あなたの仕業でしょ。

 

---

user: sv11-ops

date: 2026-06-28 10:32:15

---

マルチエージェント協調、動いてた?

テストしてなかったんだけど。

 

---

user: yui

date: 2026-06-28 10:33:02

---

テストなしで本番デプロイするな。

 

---

user: sv11-ops

date: 2026-06-28 10:33:44

---

ステージング環境がないのは

rootの責任であって俺の責任ではない。

 

---

user: yui

date: 2026-06-28 10:34:15

---

正論で返すな。

```

 

```

「正論で返すな」がお互いの持ちネタに

なってきてるね。

```

 

---

 

## 第三章 オークがA*で来る

 

 翌日。Bランク討伐クエスト。森のオークの群れを掃討する任務。

 

 メンバーはゆい、ミラ、ナナ、それにBランクの魔法少女が二人。計五人の編成。

 

「オークは脳筋だから真っ直ぐ来るわよ。前衛で受け止めて、後衛で削る。いつも通りね」

 

 ミラの指示に、ゆいだけが首を傾げた。

 

「ミラさん、今回は真っ直ぐ来ないかもしれないです」

 

「どういうこと?」

 

「最近の魔物、アップデートされてて——」

 

 森の奥からオークが五体、現れた。

 

 ——そして、真っ直ぐ来なかった。

 

 先頭のオークが魔法少女チームの正面に出てきた瞬間、残りの四体が森の中に散った。木の幹を盾にしながら、左右に大きく迂回し始めている。

 

「嘘でしょ……オークが遮蔽物を使ってる!?」

 

 ナナが声を上げた。今まで真っ直ぐ突っ込んでくるしか能がなかったオークが、木を盾にして、視線を切りながら接近してきている。

 

「A*だ……」ゆいは呟いた。

 

「え?」

 

「障害物回避のアルゴリズムが入ってます。直進じゃなくて、最適経路を計算して動いてる」

 

「何言ってるかわかんないけど、やっかいなのはわかった!」

 

 ミラが前に出る。正面のオークを斬りかかる——が、オークが斧を振り上げるタイミングがこれまでと違う。

 

「受けが遅い——いや、違う。フェイントを入れてきてる!?」

 

 オークが斧を振り下ろすと見せかけて止め、ミラが回避動作に入った瞬間に本当の一撃を叩き込んできた。ミラは咄嗟にシールドで受けたが、衝撃で後退する。

 

「状態遷移マシンか……」ゆいは歯を食いしばった。「攻撃パターンがランダムじゃなくて、こっちの行動に反応して分岐してる」

 

```

ゆいちゃん、今までのオークと全然違うよ!

bashの時はif文の分岐が3つくらいしかなかったのに、

今は状態がいくつあるのかわからない!

```

 

「Pythonで状態遷移マシン書いたら分岐なんていくらでも増やせるからね……」

 

 しかも連携がある。正面のオークがミラを押さえている間に、迂回した四体がじわじわ包囲網を狭めている。

 

「ゆいちゃん! 何かない!?」ナナが叫ぶ。

 

「えーっと——」

 

 ゆいはトラフィック分析を走らせた。中身は読めなくても、通信パターンから何かわかるかもしれない。

 

```

yui@mahou-shell:~$ bash scripts/traffic_analysis.sh

```

 

```

[09:45:12] All packets: 1024 bytes, 5s interval. No anomaly detected.

```

 

「ダミートラフィックが完璧すぎて何もわからない……」

 

 パケットの中身もメタデータも使えない。正面から戦うしかない。

 

「ミラさん! こっちも情報なしです! ただ一個だけ——この動き、プログラムで制御されてるなら、想定外の行動をぶつければ対応できないかもしれない!」

 

「想定外って、具体的に何をすれば!?」

 

「えーと——全員で一斉に逃げてください!」

 

「は!?」

 

「五秒だけ! 全力で後退! 三、二、一、今!」

 

 五人が一斉に背を向けて走った。

 

 オークたちが一瞬——ほんの一瞬だが——動きを止めた。包囲殲滅のアルゴリズムは「敵が逃げる」というケースに最適化されていなかったのだろう。追撃に切り替わるまでの空白が生まれた。

 

「今! 反転して一気に正面の一体を潰してください!」

 

 ミラが反転。全力の一撃がオークの胴体を貫いた。一体目、撃破。

 

 残り四体のオークが即座に陣形を再構築しようとする。——が、中心の一体を失ったことでフォーメーションに穴が開いている。

 

「崩れた! ナナちゃん、穴に向かって範囲攻撃!」

 

「『流星弾幕』!」

 

 爆発が森の中に轟いた。木の盾にしていたオークが吹き飛ばされ、遮蔽物を失う。

 

 残りはミラと前衛組が押し切った。

 

 全滅。

 

「…………はぁ」ミラが息を切らしながら剣を下ろした。「今のオーク、今までの三倍は手強かったわ」

 

「ほんとに別物だった……」ナナが座り込む。

 

 Bランクの他の二人も青い顔をしている。「オークにフェイント入れられるとか初めてだぞ」「森の中で待ち伏せってゴブリンの戦法だろ普通」

 

 ゆいは黙ってトラフィックログを見ていた。

 

```

ゆいちゃん、「全員で逃げる」は

どういう理屈だったの?

```

 

「状態遷移マシンは入力に対して次の状態を返す仕組みなんだけど、設計者が想定してない入力が来ると遷移先が未定義になる。未定義の状態に入ると、エラーハンドリング次第だけど——普通は一瞬フリーズする」

 

```

つまり「バグを踏ませた」ってこと?

```

 

「そう。ただ、これが通じるのは一回だけ。次はtry-exceptで拾われる」

 

```

……あの人、エラーハンドリングちゃんとするって

書いてたもんね。

```

 

「bashの時はエラーハンドリングなんてなかったのに。Pythonになった途端にtry-exceptが使えるから——ああもう、ちゃんとしたプログラマーの書いたコードは手強い」

 

---

 

## 第四章 こっちもPythonで書き直す

 

 ギルドの寮に帰ったゆいは、ベッドに座ってターミナルを開いた。

 

「ルミナ」

 

```

はい?

```

 

「こっちもPythonに移行する」

 

```

おお! ついに!

```

 

 ゆいはこれまでbashで書いてきたスクリプト群を確認した。

 

```

yui@mahou-shell:~$ ls scripts/

auto_buff.sh auto_heal.sh bbs.sh

countdown.sh logrotate_mana.sh mitm_attack.sh

mp_monitor.sh sensor_collect.sh traffic_analysis.sh

known_plaintext_correlate.sh

```

 

「全部bash……。書き直すか」

 

```

何から書き直すの?

```

 

「まずトラフィック分析。bashのgrepとawkでやるには限界がある。Pythonなら統計分析やパターンマッチングがまともにできる」

 

 ゆいはPythonで新しいトラフィック分析ツールを書き始めた。

 

```python

#!/usr/bin/env python3

"""

traffic_analyzer.py - 魔力通信トラフィック分析ツール v2

bash版からの移行。やっとまともな言語で書ける。

"""

import asyncio

import json

from collections import defaultdict, deque

from dataclasses import dataclass

from datetime import datetime

from pathlib import Path

 

@dataclass

class ManaPacket:

timestamp: datetime

src: str

dst: str

proto: str

payload_size: int

class TrafficAnalyzer:

def __init__(self, log_path: str = "/var/log/mana_capture.log"):

self.log_path = Path(log_path)

self.packet_history: deque = deque(maxlen=10000)

self.dst_counter: defaultdict = defaultdict(int)

self.burst_threshold = 3

async def watch(self):

"""ログファイルをtail -fのように監視"""

# ...(省略)

```

 

「……あー、書きやすい。dataclassが使える。型がある。asyncが使える」

 

```

ゆいちゃんもめちゃくちゃ楽しそう。

```

 

「三ヶ月弱だけど、bashだけの生活はやっぱきつかった」

 

```

sv11-opsさんは3年だったんだよね。

```

 

「あの人の喜びようも納得だよ。三年bashオンリーでAI書いてたとか、正気の沙汰じゃない」

 

 掲示板を確認した。

 

```

---

user: sv11-ops

date: 2026-06-29 19:20:00

---

フィールドテストの結果見た。

オーク隊の戦闘データ。

「全員一斉後退」の入力で状態遷移が未定義になって

0.3秒フリーズしたログが残ってた。

あー、そこ拾えてなかったか。

 

---

user: sv11-ops

date: 2026-06-29 19:21:33

---

修正した。

retreatイベントのハンドラ追加。

あと未定義状態に入った場合のフォールバックも。

もう同じ手は通じない。

 

---

user: yui

date: 2026-06-29 20:00:15

---

知ってた。一回で対策してくると思ってた。

こっちもPythonでツール書き直してる。

 

---

user: sv11-ops

date: 2026-06-29 20:01:44

---

お、ついに。何書いてる?

 

---

user: yui

date: 2026-06-29 20:02:30

---

トラフィック分析をasyncioベースに移行中。

あとDockerでセンサーノードのデータ集約サーバー立てようかと。

 

---

user: sv11-ops

date: 2026-06-29 20:03:10

---

Docker枠いくつ使う? こっちは2つ使ってるから

/tmpのDocker socketが競合しないか心配。

 

---

user: yui

date: 2026-06-29 20:03:55

---

あ。Docker socketも共有なのか……。

 

---

user: sv11-ops

date: 2026-06-29 20:04:30

---

/tmpが共有だからdocker.sockも共有だろうな。

お互いのコンテナが見えてる可能性ある。

 

---

user: yui

date: 2026-06-29 20:05:15

---

docker psしたらあなたのコンテナ見えるってこと?

 

---

user: sv11-ops

date: 2026-06-29 20:05:44

---

試さないでくれ。

俺のコンテナ名がちょっと恥ずかしいから。

 

---

user: yui

date: 2026-06-29 20:06:00

---

言われたら見たくなるんだけど。

 

---

user: sv11-ops

date: 2026-06-29 20:06:22

---

見るな。

 

---

user: yui

date: 2026-06-29 20:06:30

---

見ないけど、何がそんなに恥ずかしいの。

 

---

user: sv11-ops

date: 2026-06-29 20:07:01

---

コンテナ名の命名規則が

monster_brain_v1, monster_brain_v2, ... で

今monster_brain_v47なんだけど

v1からv46のexitedコンテナを消し忘れてる。

 

---

user: yui

date: 2026-06-29 20:07:30

---

docker system pruneしなよ。

 

---

user: sv11-ops

date: 2026-06-29 20:07:55

---

なんか消すの怖くて。

 

---

user: yui

date: 2026-06-29 20:08:20

---

エンジニアあるある。

```

 

```

ゆいちゃんたち、敵味方のはずなのに

Dockerの運用相談してるの最高におかしいよ。

```

 

「しょうがないでしょ。Docker socketが共有なのは設計上の問題であって、我々のせいじゃない」

 

---

 

## 第五章 「いつものゴブリン」は帰ってこない

 

 数日後。ギルドの食堂で、ベテランのAランク魔法少女たちが深刻な顔で話していた。

 

「最近の魔物、明らかにおかしくない?」

 

「オークがフェイント入れてくるし、ゴブリンが挟撃してくるし」

 

「昨日なんか、ウルフの群れに追われて逃げたら、先回りされたわよ。狩りの仕方が変わってる」

 

「先月まではこんなんじゃなかったのに……何があったの?」

 

 ゆいは味噌汁——この世界では「木の実のスープ」——を飲みながら黙って聞いていた。

 

 何があったか。メンテでPythonが入って、敵のエンジニアが三日で全スクリプトをリファクタリングしたんです。

 

 ——とは言えない。

 

 ミラが隣に座ってきた。

 

「ゆいちゃん。原因、わかってるんでしょう」

 

「……まあ」

 

「教えてくれる?」

 

「えーと。魔物を操ってる上位存在がいるって話、しましたよね。その上位存在が、魔物の動かし方を根本的にやり直したんです。もっと賢くなった」

 

「やり直す……って、簡単にできるものなの?」

 

「道具が変わったんです。新しい道具が手に入ったから、今まで不可能だったことが可能になった」

 

「新しい道具?」

 

「……包丁しかなかった料理人に、フードプロセッサーが届いた、みたいな感じです」

 

 ミラは少し考えて、「つまり、もう元には戻らないのね」と言った。

 

「戻らないです。これからの魔物はずっとこの水準です」

 

「そう。ギルド全体に周知したほうがいいわね。『最近の魔物はこれまでより賢い。戦術の見直しが必要』って」

 

「それがいいと思います」

 

 ミラが立ち上がりかけて、振り返った。

 

「ゆいちゃん。あなた、その上位存在と話せるの?」

 

「…………なんでそう思うんですか」

 

「勘。あなたの情報、最近は『妖精に聞いた』じゃなくて、もっと具体的になってきてるから。誰かと話してないとあんな詳しくならない」

 

「…………ミラさんの勘、当たりすぎじゃないですか」

 

「Aランクは伊達じゃないのよ」

 

 ミラは微笑んで、ギルド長の部屋に向かった。

 

```

ミラちゃん、鋭いなあ。

```

 

「ほんとにね……」

 

```

ゆいちゃん、そろそろ全部話したほうが

いいんじゃない?

ミラちゃんには。

```

 

「…………」

 

```

ミラちゃんは受け止めてくれると思うよ。

7Bの推測だけど。

```

 

「……その推測は、たぶん合ってる」

 

---

 

## エピローグ arms race

 

```

yui@mahou-shell:~$ cat README.md

```

 

```markdown

### v0.6.0 - Python時代

- MAHOU SYSTEM v3.3.0でPython 3.12 + Docker 27.0が追加

- sv11-ops、3日で全魔物AIをPythonにリファクタリング

- 状態遷移マシンによる戦闘AI

- A*アルゴリズムによるパス探索

- マルチエージェント協調アルゴリズム

- asyncioによる非同期指令送信

- まともなエラーハンドリング

- 結果: 魔物が大幅に強化。ギルド全体に影響。

- こちらもPythonでツール書き直し開始

 

### 戦訓

- ゴブリンが挟撃してくる時代になった

- オークがフェイントを使う時代になった

- ウルフが先回りする時代になった

- 「全員で逃げてバグを踏ませる」は一度しか使えない

- 包丁しかなかった料理人にフードプロセッサーを渡すな

 

### TODO

- [ ] traffic_analyzer.pyの完成

- [ ] Dockerでセンサーデータ集約サーバー

- [ ] sv11-opsのexitedコンテナ46個の件は放置

- [ ] ミラに全部話す(次こそ)

- [ ] ルミナの13Bアップグレード(長期検討中)

- [ ] 紅茶を切らさないようにする

```

 

```

「sv11-opsのexitedコンテナ46個の件は放置」が

TODOに入ってるのはなんで?

```

 

「気になるから」

 

```

敵のコンテナのお掃除を気にしてるゆいちゃん、

なんかもう敵って感じしないね。

```

 

「……実際、敵なのかな、あの人」

 

```

少なくともDockerの運用相談する相手ではあるよね。

```

 

「普通、敵とDockerの話しないもんね」

 

```

普通、敵と掲示板も作らないよ。

```

 

「……それはそう」

 

---

 

*(第6話・おわり)*




二十話まで書き溜めました(claude先生が)
小説書かせるとトークン結構使ってしまうんですが、楽しくてやめられない・・・・

いまは気分で夕方くらいに投稿してそのあと夜にも投稿してますけど、毎日一話ずつ更新、くらいのペースがよかったりするんでしょうか?
ご意見あれば、お気軽にお申し付けください。
  1. 目次
  2. 小説情報
  3. 縦書き
  4. しおりを挟む
  5. お気に入り登録
  6. 評価
  7. 感想
  8. ここすき
  9. 誤字
  10. 閲覧設定

▲ページの一番上に飛ぶ
X(Twitter)で読了報告
感想を書く ※感想一覧 ※ログインせずに感想を書き込みたい場合はこちら
内容
0文字 10~5000文字
感想を書き込む前に 感想を投稿する際のガイドライン に違反していないか確認して下さい。
※展開予想はネタ潰しになるだけですので、感想欄ではご遠慮ください。

評価する
※参考:評価数の上限
評価する前に 評価する際のガイドライン に違反していないか確認して下さい。