異世界転生したら特典チートがつまんねーのでvSphereのルートもらってみた件 作:nelldrip
ただしチートは剣でも魔法でもなく、vSphereのAdministrator権限である。
魔王軍の補給線はAnti-affinityルールで分断。
村の食糧問題はResource Poolの再割り当てで解決。
三ヶ月、だいたいの面倒事はインフラ操作で片付けてきた。
だから油断した。
「ねえねえ、川行こうよ!」
苔の生えた岩に滑る足。そうして鈍い音。
幼馴染のステータスウィンドウが、見たくもない数字を吐き出し始める。
洞性頻脈、心室頻拍、粗大から微細へ痩せていく心室細動。
そして平坦へ。
除細動が要ると知っていて、この世界にAEDは無い。
STATUS: DEAD
世界の管理者権限を持っていて、目の前の幼馴染ひとり、自分の腕だけでは動かし続けられなかったとき。
——待て。これ、VMだよな。
復活は、崇高な奇跡の御業なんかじゃない。
ただのロールバック。障害対応そのものだ。
ただ、そのスナップショット。撮られた時刻を、ちゃんと確認したか?
幼馴染イベ、っていう響きだけ聞くと「ああ、青春してんな」って感じだけど、現実はもっと容赦ない。
「ねえねえ、川行こうよ! 水浴びしたい!」
ミレイユ──幼馴染、金髪、元気だけが取り柄、そして後でわかるが**致命的に運動神経が悪い**──に手を引かれて、俺は森の中の小川まで連れてこられていた。
異世界に来て三ヶ月。vSphereのAdministrator権限をもらってから、だいたいの面倒事はインフラ操作でなんとかしてきた。魔王軍の補給線? Anti-affinityルールで分断済み。村の食糧問題? Resource Pool割り当てを調整して解決済み。
それに、他の五人──ルーナ、レイス、クリス、シルフィー、アーシェ──との微妙な距離感の調整に頭を悩ませる日々の中で、こうしてミレイユと二人きりで出かけられる時間は、正直、貴重だった。機会が多い分だけ、気を抜いてしまっていたのかもしれない。
だから油断してた。**目の前の幼馴染が転んで死ぬ、なんてイベントは想定してなかった。**
「見て見て、この岩、滑り台みたいになって──」
「待て、ミレイユ、そこ苔生して」
最後まで言い終わる前に、ミレイユの足が滑った。
スローモーションみたいに見えるくせに、現実は容赦なく等倍速で進む。後頭部から、岩に。
ゴッ、という音が聞こえた気がした。聞こえてほしくないタイプの音だ。
「……ミレイユ?」
返事がない。駆け寄ると、白目を剥いて、全身が小刻みに痙攣している。手足が不規則に跳ね、顎が小さく震えている。
「ミレイユ! おい、ミレイユ!」
肩を揺すっても反応がない。
「おい、聞こえるか! ミレイユ!」
もう一度、今度は強く肩を掴んで揺する。それでも反応がない。頬を軽く叩いても、目を開けない。試しに、二の腕の柔らかいところを強くつねってみる。普段なら「痛い!」と怒鳴られてもおかしくない強さで。
それでも、ぴくりとも反応が返ってこなかった。
意識レベルの確認は、これで十分だった。もう、まともに意識がある状態じゃない。
呼吸を確認しようと、顎を持ち上げる。その時、ふと気づいた。ステータスウィンドウ。普段は見ないようにしている、見たくなかった項目。震える指で、緊急時用の詳細表示に切り替える。
```
[ミレイユ]
HP: 50/120
波形: 洞性頻脈
心拍数: 128 bpm
呼吸: 6回/min(浅表・不規則)
血圧: 138/92
酸素飽和度(SpO2推定): 83%
STATUS: CRITICAL / 呼吸中枢抑制の疑い
```
「……頭、強く打ちすぎたか」
呼吸が、ほとんど動いていない。胸郭がわずかに上下しているようにも見えるが、明らかに浅く、不規則だった。頭部への強い衝撃で、呼吸を司る中枢そのものがダメージを受けている。前世の知識が、そう告げていた。
──いや、それだけじゃない。
引っかかったのは、心拍のほうだった。本来、酸素が足りなくなって追い詰められた心臓は、じわじわと脈を落としていくはずだ。窒息で死ぬときの、教科書どおりの下り坂。なのに、目の前の数字は逆に跳ね上がっていっている。頭を強く打った衝撃が、呼吸中枢だけじゃなく、自律神経ごと殴りつけたんだろう。暴走したカテコラミンが、心臓を無理やり空回りさせている。低酸素と交感神経の嵐、最悪の合わせ技だ。ゆっくり脈が落ちて止まるやつより、よっぽど質が悪い。
「噓だろ」
まだ、脈はある。呼吸をどうにか補助できれば、まだ間に合う。そう思った矢先だった。
```
[ミレイユ]
HP: 45/120
波形: 洞性頻脈 + 心室性期外収縮(PVC)多発
心拍数: 156 bpm
呼吸: 4回/min(下顎呼吸様)
血圧: 148/98
酸素飽和度(SpO2推定): 71%
STATUS: CRITICAL
```
数字が、見てる間にも悪化していく。酸素が足りていない体が、心臓だけをどうにか回そうと、無理な頻脈を続けている。長くは保たない。前世の研修で叩き込まれた知識が、警鐘を鳴らしていた。
急いで気道を確保し、人工呼吸を試みる。だが、間に合わなかった。
```
[ミレイユ]
HP: 34/120
波形: 心室頻拍(VT)
心拍数: 210 bpm
呼吸: 消失(下顎呼吸停止)
血圧: 測定不能(脈拍触知不可)
酸素飽和度(SpO2推定): 測定不能
STATUS: CRITICAL
```
「おい、噓だろ、噓だろ……」
頸動脈に指を当てる。触れられるはずの脈が、もう、まともに感じ取れなくなっていた。頭の中が真っ白になる、なんて言うけど、実際は逆だ。やけに冷静な部分と、絶叫してる部分が同時に存在してる感じ。
冷静な部分が「胸骨圧迫、今すぐ」と命令して、絶叫してる部分が「噓だろこれ噓だろ」と喚き続けている。二つの自分が、同じ頭の中でせめぎ合っていた。
「噓だろ、噓だろ噓だろ」
口走りながら、体は勝手に動いていた。前世の知識、こんなところで役に立つとは。
まず、ミレイユの服の胸元を、迷わず開いた。
ボタンを引きちぎるみたいな勢いで、シャツの前を開く。気道確保と圧迫の質を上げるためには、衣服が邪魔になる。やってることは、まぁアレだが、そんなもの気にしてる余裕は欠片もない。
ミレイユの膨らみが、露わになる。
正直、こんな形で見たくはなかった。頭の片隅でそう思った自分に、一瞬だけ嫌悪感が湧いたが、それすらすぐにかき消えた。目の前にあるそれは、もう、何の色気も帯びていなかった。ついこの間まで、意識するだけで妙に落ち着かなくなっていたはずのものが、今はただ、力なく横たわっているだけの、白い重みでしかない。そこから性のようなものは、綺麗に抜け落ちていた。生が抜けていくのと、同じ速さで。
露わになった胸も、顔も、見ている間にどんどん血の気が引いて、青白くなっていく。さっきまで日に焼けて健康的だった肌の色が、まるで色を抜かれていくみたいに変わっていくのが、嫌でも目に入る。
触れた肌が、もう冷たくなり始めていた。ついさっきまで、笑いながら川辺を歩いていたはずの体温が、こんなに早く失われていくものなのか。指先から伝わる感触が、頭のどこかでまだ信じられずにいた。
視界の端に、力なく開いたままの瞳と口が入る。瞳孔は開いたまま、光にも反応しない。口も、緩く開いたまま、何かを言いかけて止まったみたいな、不自然な形で固まっていた。さっきまでのミレイユの、笑ったり拗ねたりしていた表情筋の動きが、そこには何一つ残っていなかった。
今はそれどころじゃない。胸の中央、剣状突起の少し上に、両手を重ねる。
```
[ミレイユ]
HP: 25/120
波形: 心室頻拍(VT)持続
心拍数: 224 bpm
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能
STATUS: CRITICAL(無脈性VT)
```
VT──心室頻拍。心臓が、速すぎる。1分間に224回。数字だけ見れば必死に働いているようにも錯覚しかけるが、実際は逆だ。速く打ちすぎて、一回ごとに血を溜める間も、送り出す間もなくなる、ただの空回りだ。前世の感覚で例えるなら、ニュートラルに入れたままアクセルを床まで踏み抜いたエンジンみたいなもの。回転数だけが無意味に跳ね上がって、車輪には一滴も力が伝わっていない。派手な音を立てて、ただ焼き付いていくだけ。
「ミレイユ、すまん、あとで説明する。今は我慢しろ」
届かない言葉を口にして、体重を乗せた。
胸骨圧迫。胸の真ん中に両手を重ね、肘を伸ばしたまま体重を乗せる。
沈む。想像していたよりも、ずっと深く、胸が沈み込む。人の胸って、こんなに沈むものなのか。骨と筋肉のすぐ下に、まるで空洞があるみたいに、自分の体重を受け止めて、ぐにゃりと凹んでいく感触が、両の手のひらに伝わってくる。気持ちの良いものでは、決してなかった。
沈み込みは少なくとも五センチ。浅いと意味がない、それも前世の知識が叩き込んだ感覚だった。
圧迫のたびに、ミレイユの体が、力なく揺れる。押し込めば胸が沈み、手を離せば戻る。その反動で、地面に投げ出された両腕が、ぱたり、ぱたりと跳ねた。指先は半開きのまま、握り返す力もない。横を向いた頭が、圧迫のリズムに合わせて、こくり、こくりと不自然に揺れている。さっきまで自分の足で川辺を駆けていたはずの体が、今はもう、俺が押し込む力の分だけしか動かない。糸の切れかけた人形を、下から無理やり突き上げているみたいだった。
「1、2、3、4……」
四回目か、五回目の圧迫だった。手のひらの真下から、ぐしゃ、という、湿った小枝を束で折るような手応えが突き上げてきた。骨と軟骨の継ぎ目が、体重に耐えきれずに軋んで、ぶつり、と外れる感触。肋骨が、折れたか、外れる間隔だった。
前世の研修でも、散々言われた。ちゃんと効くまで押せば、大抵どこかが折れる、と。頭で知っているのと、実際に自分の手のひらで、幼馴染の胸の中で何かが砕ける感触を受け止めるのとでは、まるで別物だった。指先まで伝わる、その生々しい振動に、胃の奥がせり上がる。
それでも、手は止めなかった。ここで浅くすれば、今の一回まで、全部無駄になる。折れた骨ごと、押し続けるしかなかった。二回目、三回目と、圧迫のたびに、砕けた骨の断端が擦れる、ごり、ごり、という嫌な感触が、掌に馴染んでいく。馴染ませたくなんて、なかった。
リズムは1分間に100〜120回。アニマルズの「Stayin' Alive」のテンポ、なんて前世で聞いた豆知識が頭をよぎる。──いや、アニマルズじゃない、ビージーズか。こんな時に限って、どうでもいい訂正が勝手に頭の中で走る。歌ってる場合じゃないのに、脳内でうろ覚えのバンド名まで直しにかかってる自分の現実逃避っぷりに、腹が立つ。
「5、6、7……っ、くそ、頼む、頼むから……っ」
圧迫のたびに、HPバーがほんのわずかに持ち直すのが見える。心臓の代わりに、こっちの腕で無理やり血を巡らせている。その効果が、数字にちゃんと出ている。圧迫一回ごとに、目盛りがぴくりと動く。
```
HP: 22/120(+2)
```
「よし……効いてる、効いてるぞ……」
声に、わずかに希望が滲んだ。この調子で圧迫を続けていれば、なんとかなるかもしれない。そう思わせるだけの、確かな上向きの動きだった。
30回の圧迫のあと、気道確保して人工呼吸を2回。一回目は、胸が上がった。だが二回目を吹き込もうとした瞬間、生温い、饐えた臭いの何かが、ミレイユの喉の奥からこみ上げてきて、俺の口元を押し返した。胃の中身だ。反射的に顔を離す。ミレイユの頬を伝って、白く泡立った液が、耳の横の地面に垂れていく。えずきそうになるのを奥歯で噛み殺し、ミレイユの顔を横に向ける。口の中に溜まった液体を指で掻き出す。完全には取れない。吸引器もないこの場では、これが精一杯だ。
正直に言えば、この状態で、いくら命がかかっているとは言え、口をつけるのを躊躇してしまった。だが、そんなことで迷ってる暇はなかった。迷いを振り払い、ミレイユの口に息を送り込む。胸が上がるのを確認して
「うぇ…ちゃんと上がって、気道が確保できてる」
今はそれだけが、わずかな救いだった。
だが、圧迫を止めた瞬間、数字がまた落ちていた。
```
HP: 17/120(-5)
```
圧迫で押し上げた分が、圧迫をやめた途端に、また引き戻される。数秒の迷いが、ミレイユの命を刈り取っていた。まるで、坂道で必死に押し上げている荷車が、手を離した瞬間にずるずると滑り落ちていくみたいだった。しかも、押し上げられる幅より、滑り落ちる幅のほうが、明らかに大きくなってきている。
「くそ、くそっ……」
また圧迫に戻る。
```
HP: 19/120(+2)
```
また、わずかに持ち直す。でも、さっきよりも上がり幅が…いや、上がるまでの時間が長い。ミレイユの心臓の状態が悪化し続けている証拠だ。血液を送り出す力そのものが、時間とともに弱っていっている。だから、同じだけ圧迫しても、押し上げられる量そのものが、じわじわと目減りしていく。
```
[ミレイユ]
HP: 15/120
波形: Coarse VF(心室細動・粗大)
心拍数: -- bpm(VF・計測不能)
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能
STATUS: CRITICAL
```
VF──心室細動。心臓の筋肉が震えているだけの状態。ポンプとして、もう血を送り出せていない。
これを止める方法を、前世の知識でちゃんと知っている。**除細動**。電気ショックで一度、心臓の震えごとリセットするしかない。胸骨圧迫は、あくまで除細動が届くまでの時間稼ぎでしかない。押している間だけ、無理やり血を巡らせているだけで、VFそのものは、いくら押したって止まりはしない。
だが、ここは異世界だ。AEDなんてあるわけがない。時間を稼いだところで、その先にあるはずの「止める手段」が、どこにもない。
稼いだ時間を、渡す相手がいなかった。
数字は、容赦なく落ち続けていた。
また圧迫に戻る。
「ミレイユ、戻ってこい、戻ってこいよ……っ」
二の腕が悲鳴を上げる。肩の関節がギシギシと痛む。汗が顎から滴って、ミレイユの服に、心臓マッサージに合わせて揺れる乳房にぽたぽたと落ちる。圧迫のたび、その膨らみ、俺が押し込む反動で、たぷ、たぷ、と揺れるそれですら、もう性すら感じさせない、ただ力なく揺れるだけのものだった。
それが、行為によるものならどれほど良かっただろう。彼女にうちつけ、その動きで揺れるのなら、これ以上無く興奮させるのだろう。
だが、心停止したミレイユへの心臓マッサージで力なく揺れる乳房は、ただ絶望を与えるだけだった。
それは、中身の詰まった水袋を、下から突き上げているのと変わらない。
かつてはあれだけ意識していたはずのものが、命が抜けた途端、こんなにも味気ない、ただの質量に変わってしまうのか。
何セット繰り返しただろう。10セット? 20セット? 数えてる余裕なんてとっくになかった。
圧迫を一度抜くたび、ミレイユの顎が、かくん、と小さく開いた。何かを言おうとしているわけでも、息を吸おうとしているわけでもない。ただ、その口を閉じておくための力すら、もうどこにも残っていないから、押されるまま、戻されるまま、顎の関節が勝手に上下しているだけだった。半開きの唇の色が、さっきよりもさらに青みを増していく。指先も、爪から色が抜けて、白を通り越して、薄い紫に沈み始めていた。血が、酸素が、体の末端までまるで届いていない証拠だった。中心を守るために、末梢から順番に切り捨てられていく。追い詰められたシステムが、生き残るためにサービスを一つずつ落としていくみたいに。
「頼む、頼む、頼むから……」
声が、だんだん祈りに近くなっていく。圧迫するたびに、頭の中でミレイユとのこれまでの記憶が、勝手に再生される。川で笑ってた顔。畑仕事をサボって怒られてた顔。ちょっと拗ねた顔。今、目の前にあるのは、その全部とは似ても似つかない土気色の顔だ。
圧迫のたびに、まだHPバーはぴくりと動く。でも、もう「回復」と呼べるほどの動きじゃなかった。
```
HP: 11/120(+1)
```
さっきまで「+2」「+2」と刻んでいた数字が、「+1」になる。やがて「±0」に近づいていくのだろうか。押し上げる力は変わらず込めているのに、返ってくる反応だけが、どんどん薄くなっていった。まるで、壊れかけた機械に何度も同じ命令を送り続けているのに、少しずつ応答が鈍くなっていくような、そんな感覚だった。
```
[ミレイユ]
HP: 6/120
波形: Fine VF(心室細動・微細/振幅減衰)
心拍数: -- bpm(VF・計測不能)
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能
STATUS: CRITICAL
```
波形の振幅が、小さくなっていった。
さっきまで、荒々しく大きく暴れていたはずの震えが、今はもう、ほとんど平らに近い、ごく浅い揺らぎにまで痩せ細っている。心臓の筋肉が、最後にあがくための力すら、もう残っていないんだ。除細動で叩き起こそうにも、叩き起こす余力そのものが、刻一刻と失われていく。前世の知識が、その意味を、残酷なくらい正確に教えてくる。
ミレイユの心臓が、命が終わろうとしていた。
「噓だろ……っ」
それでも、止めなかった。止められなかった。
「6、7、8……9……」
腕の感覚が、もうほとんどなくなっていた。それでも、リズムだけは崩さないように、体が勝手に動き続ける。圧迫しても、もうHPはほとんど反応しなくなっていた。上げても、上げても、次の瞬間にはまた同じところまで落ちてくる。押し上げる力と、落ちていく力が、ほとんど拮抗してしまっている。いや、拮抗どころか、もう完全に、落ちていく力のほうが上回り始めていた。
ミレイユの顔色は土気色のまま。瞳孔が開いたまま、光が当たっても、反応がない。
──戻らない。
何分経ったかわからない。十分か、それとも三分だったのか。体感時間と現実の時間がまるで一致しない。
```
[ミレイユ]
HP: 1/120
波形: Asystole(心静止)
心拍数: -- bpm(電気活動なし)
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能
STATUS: CRITICAL
```
波形が、完全な平坦線に変わった瞬間、HPバーの減りが、それまでとは明らかに違う速さで加速した。さっきまでの、じわじわとした下降とは、もう桁が違う。いくら心臓マッサージを続けても、それ以上のペースで、数字が溶けるように消えていく。
圧迫しても、もう体は、どんな反応も返さなくなっていた。さっきまでは、押せば顎がわずかに動き、腕が跳ねた。その最後の、反射みたいな揺らぎすら、今は消えている。残っているのは、俺が押し込んだ分だけ沈んで、手を離した分だけ戻る、ただの物理現象だけだった。筋肉の張りが、根こそぎ抜け落ちている。人の体というのは、生きている間、こんなにも無数の小さな力で、自分の形をぎりぎり保っていたのか。それが全部失われたあとに残るのは、驚くほど重くて、驚くほど頼りない、ただの重量の塊だった。
圧迫する手が、止まった。
止めたんじゃない。止まったんだ。これ以上続けても意味がないと、体のどこかが理解してしまったから。
「……噓だろ」
声が掠れた。
さっきからずっと、嫌でも視界の端に入り続けていたウィンドウだった。何度も数字が落ちていくのを見てきた。それでも、今この瞬間だけは、見るのが怖かった。それでも目を逸らすわけにはいかなくて、震える手で、もう一度画面に意識を向ける。
```
[ミレイユ]
HP: 0/120
波形: Asystole(心静止)
心拍数: -- bpm(電気活動なし)
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能(脈波なし)
STATUS: DEAD
```
「…なんで、だよ」
声が、震えていた。喉の奥から、意味をなさない音だけが漏れる。
「噓だ、噓だ、噓だ噓だ噓だ……」
同じ言葉を繰り返すことでしか、今起きたことを受け止める術がなかった。
目の前には、さっきまで笑っていたはずのミレイユが、ただの物みたいに横たわっている。シャツの前が開き、血色を失った乳房が、開いたままの瞳が、二度と動かない胸が。数分前まで「川行こうよ」なんて無邪気に手を引いてきた、その同じ人間が、今はもう、何をどうやっても呼びかけに応えてくれない。
「なんで……」
視界が、じわりと滲んだ。喉の奥が締め付けられて、うまく息が吸えない。両手が血で汚れているわけでもないのに、まるで自分が何か取り返しのつかないことをしてしまったみたいな感覚に、押し潰されそうだった。
さっきまで、ミレイユの心臓が止まらないように。必死に動かしていたからこそ。ミレイユの心臓が、ただ止まるのを、救えなかったことに。
何もできない自分が、急に滑稽に思えてくる。世界の管理者権限を持ってる、なんて調子に乗ってたくせに、目の前の幼馴染ひとり助けられない。あれだけのリソースを動かせる権限を持っていて、それでも、人ひとりの心臓を、自分の腕だけじゃ動かし続けられなかった。
「俺は、いったい、何のために……」
権限も、知識も、前世からの記憶も、全部、この一瞬のために何の役にも立たなかった。ただの人間の腕力で、ただの人間の心臓を、無理やり動かそうとして、それでも届かなかった。
涙が、堪えきれずに一筋こぼれた。それでも、指先だけは、まだ諦めきれずにミレイユの手を握りしめていた。冷たくなっていく体温を感じながら、頭の中は真っ白で、何も考えられなかった。
それでも、ステータスウィンドウで、ミレイユの心電図を、心臓の状態を、ただ眺めた。
何か、間違いであってほしいから。表示のバグでも、計測のエラーでも、なんでもよかった。心臓が動いていないという、その一点さえ嘘なら、それでよかった。祈るような気持ちで、平坦線を、STATUS: DEADの一行を、何度も目でなぞる。ほんの一目盛りでも、あの震えが戻ってきてはくれないかと。
だが。
波形は、定規で引いたみたいに、まっすぐなままだった。
さっきまで、あれだけ荒々しく、あるいは弱々しく、それでも確かに何かを訴えるように動いていたはずの線が、今はもう、ぴくりとも震えない。心拍数の欄も、電気活動なし、の但し書きを添えたまま、ただの棒きれみたいに横たわっている。
ただ、ゼロから変わらない心拍数を見た。生きている証を数字に変換し続けていたはずのその欄が、今は一つ残らず、沈黙している。
システムは、ただ淡々と、正しい結果を返し続けていた。何度見返したところで、そこにあるのは、寸分の狂いもない「死亡」の二文字だけだった。
視線を、ウィンドウから、その下に横たわる本人へと落とす。
心静止に、ステータスが「死亡」となった、上半身裸のミレイユを、ただ眺めた。
土気色になった顔を。半分ひらいたまま、もう何も映していない瞳を。そして、さっきまで自分が体重をかけて押し続けた胸を。肋骨の折れたそのあたりには、圧迫の跡が、赤黒い皮下出血のあざになって、幾筋も浮かび始めていた。助けようとした手が、そのまま残した傷跡だった。さっき「性すら感じさせない」と思ったその膨らみも、今はもう、揺れることすらない。ただ、静かに、そこにあるだけ。
何をするでもなく、何を考えるでもなく、ただ、眺めていた。時間の感覚が、どこかへ抜け落ちていた。
──いや。
頭のずっと奥のほうで、何かが小さく引っかかった。
──待て。
涙で滲んだ視界の中、意識の底のほうから、場違いなくらい冷静な声が浮かび上がってくる。パニックと絶望でぐちゃぐちゃになった思考の中に、ぽつりと一つだけ、違う種類の思考が混ざり込んでいた。
──これ、VMだよな。
自分がこの世界に来た時に、神様(仮)から聞いた話を、唐突に思い出した。この異世界そのものが、ハイパーバイザー型の仮想化基盤の上で動いている。国も、勢力も、それぞれがVMとして独立していて、その中でキャラクター一人一人が、個別のアプリケーションとして動作している。
──だったら、ミレイユも。
血の気が引いていた頭に、代わりに別の何かが流れ込んでくる感覚があった。
──俺もそうだけど、あいつも、VM上で動いてる、ただのアプリなんじゃないのか。
震える手で、涙を乱暴に拭った。まだ半信半疑だった。パニックのあまり、都合のいい妄想にすがりついているだけかもしれない。それでも、他に縋れるものが何もない以上、確かめないという選択肢はなかった。
「アプリなら……」
声が、掠れながらも、少しだけ力を取り戻す。
「アプリなら、プロパティが、あるはずだ」
震える指で、管理コンソールを呼び出す。ミレイユのキャラクターとしてのプロパティ画面。これまで、AGIやLUKみたいなステータス項目しか見ていなかった。でも、本当にアプリケーションとして実装されているなら、もっと別の項目があってもおかしくない。
祈るような気持ちで、画面をスクロールする。
```
> [ミレイユ] Properties
> Type: Character Instance
> Runtime: Guest OS (World Cluster)
> Backup Policy: Enabled
> Snapshot: Available
```
「……あ」
目を見開いた。
「あるじゃん」
声が、震えながらも、今度は違う意味で漏れた。
「スナップショット、あるじゃん……!」
思わず、笑いに近い声が漏れた。安堵とも、動揺とも、自分でも判別のつかない感情だった。
──マジで、アプリとSQLに、TypeScriptなんだな、これ。
改めて、今更ながらに実感が湧いてくる。頭では理解していたつもりだった。でも、こうして実際にプロパティ画面を見て、バックアップポリシーだの、スナップショットだのという項目が、ちゃんと機能として存在しているのを目の当たりにして、初めて本当の意味で腑に落ちた気がした。この世界は、本当に、自分が知っているシステムの延長線上にある。だったら。
「だったら、なんとかなるはずだ」
vSphere Administrator。ゲストOS root。そして、**アプリ単位のスナップショット**。
「あ……」
声が出た。自分でも驚くくらい間抜けな声だった。
「あ、SSあったわ」
定期バッチでアプリ単位のスナップショットを毎晩取得する設定になっているのを見つけたのは、本当にこのタイミングだった。もっと早く気づけよ、と自分でも思う。でも人間、パニックの最中に冷静なインフラ管理者ムーブができるほど、便利にはできていないらしい。
震える手で管理コンソールを開く。
```
> vSphere Admin Console
> Select Target: [ミレイユ]
> Available Snapshots:
- 2026-06-30 03:00 AM (Daily Batch)
- 2026-06-30 18:42 PM (Latest)
> Execute Rollback? [Y/N]
```
直近のスナップショットがある。そりゃそうだ、定期バッチは3時のだけじゃなく、もっと細かい間隔でも撮ってるはずだ。それを使えばロスも最小限で済む。
「Y。Yに決まってんだろ」
指が震えて、タップミスしそうになる。三回目で、ようやく成功した。
```
> Rollback in progress...
> ████████████████ 100%
> Rollback completed.
```
数秒の静寂。長すぎる数秒だった。
「……ミレイユ?」
目が開いた。よかった、と力が抜けかけた、その瞬間。
ミレイユの体が、ビクン、と跳ねた。
「は?」
息を呑む間もなく、白目を剥いて、また痙攣が始まる。呼吸が止まり、脈が消える。
```
[ミレイユ]
HP: 0/120
波形: Asystole(心静止・平坦)
心拍数: -- bpm(電気活動なし)
呼吸: なし
血圧: 測定不能
酸素飽和度(SpO2推定): 測定不能
STATUS: DEAD
```
「は? はぁ?! なんで?!」
何が起きてるのか、一瞬理解が追いつかなかった。戻したはずだ。確かに戻した。なのに、戻った直後に、また同じように倒れて、また心停止してる。
「いやいやいや、噓だろ、なんでだよ!」
混乱しながらも、もう一度コンソールを開く。同じスナップショットへ、もう一度ロールバックを叩き込む。
```
> Rollback in progress...
> ████████████████ 100%
> Rollback completed.
```
「ミレイユ!」
「う……ぅ……あれ……」
目が開く。今度こそ、と思った。ミレイユが、ゆっくり上体を起こす。
「な、なんか頭が……」
言い終わる前に、また倒れた。
「ちょ?!」
三度目の心停止。さすがに頭が真っ白を通り越して、逆に妙な冷静さが降りてきた。ロールバックして、起き上がって、また倒れる。同じパターンだ。
──待て。
まさか、と思いながら、スナップショットの中身を確認する。「直近のスナップショット」、18時42分のやつ。撮影された瞬間の状態を、よく見る。
```
> Snapshot Details: 2026-06-30 18:42 PM
> [ミレイユ]
> HP: 0/120
> STATUS: DEAD
> Captured during: Auto-snapshot (event-triggered)
```
「……は?」
理解した瞬間、全身から力が抜けた。
定期バッチとは別に、システムが「大きな状態変化」を検知すると自動でスナップショットを撮る仕組みが入っていた。便利機能のつもりであの神様(仮)が設定したのだろう。**ミレイユが死んだ、その瞬間も「大きな状態変化」として検知されて、律儀に撮影されてた。**
つまり、さっきから何度もロールバックしてたのは、**死んだ直後の、死亡状態のスナップショット**だった。戻しても戻しても、戻った先が「ちょうど死んだところ」なんだから、生き返るわけがない。むしろ正確に動いてる証拠だ。最悪の意味で、だが。
「これじゃ駄目だ……」
選択肢は一つしかない。さっきの、3時の定期バッチまで遡る。
```
> vSphere Admin Console
> Select Target: [ミレイユ]
> Available Snapshots:
- 2026-06-30 03:00 AM (Daily Batch)
- 2026-06-30 18:42 PM (Latest - DEAD STATE, DO NOT USE)
> Execute Rollback? [Y/N]
```
DO NOT USE、の表示を見て乾いた笑いが漏れた。誰のために警告出してんだよ。
「Y」
今度こそ、3時の状態へ。
```
> Rollback in progress...
> ████████████████ 100%
> Rollback completed.
```
「……ミレイユ?」
「……ん……あれ、なんで地面に座ってるの、あんた。てか、ここ、どこ…?」
目を開けたミレイユが、寝起きみたいな声で言った。何事もなかったかのような、ぽかんとした顔。
```
[ミレイユ]
HP: 120/120
波形: 洞調律(正常)
心拍数: 76 bpm
呼吸: 16回/min(自発呼吸あり)
血圧: 118/68(平常値)
酸素飽和度(SpO2推定): 98%
STATUS: Fine
```
数字が、ようやく人間らしい値に戻っていた。それを見た瞬間、自分の中で何かが決壊した。
「お前、なあ……」
安堵で力が抜けて、その場に尻もちをついた。心臓がまだバクバクいってる。心臓マッサージで腕は痺れて感覚がほとんどない。指先が震えて、しばらく握ったり開いたりを繰り返さないと収まらなかった。
力の抜けた頭に、今更のように、さっき腑に落ちた事実が、ぼんやりと戻ってくる。
しかし、すべての存在がSQLとTypeScriptに、実行ファイルのアプリ、ねぇ。いや、まぁ、わかる。わかるよ。効率いいし、現実的だし。データベースにレコードとして状態を持たせて、振る舞いは型定義とロジックで記述して、一人一人をアプリケーションとして走らせる。この世界のシステムなら、そりゃそうなるって。設計思想としては、むしろ真っ当すぎるくらいだ。前世で自分が組んでたやつと、根っこは何も変わらない。
だけどさぁ。と。
命が、恋が、幼馴染との思い出が、突き詰めればぜんぶ、テーブルの一行と、コンパイル済みのバイナリにDLLでできている。愛だの奇跡だの魂だのと、大層な名前で呼んでいたものの正体が、蓋を開ければ`SELECT`と`UPDATE`の集合体だった。生き返らせたのだって、崇高な奇跡の御業なんかじゃない。ただのロールバック。バックアップからの復元。障害対応そのものだ。
「……夢もロマンもねぇなぁ」
なんとなく、そう呟いていた。誰に聞かせるでもなく。魔法だのファンタジーだのに憧れて――憧れた覚えはないが、まあ、どこか期待するものはあった――辿り着いた異世界の裏側が、前世で毎晩睨んでいた管理コンソールと地続きだった、というオチ。転生してまで、俺は本番環境のお守りをやっている。
まあ、そのお守りのおかげで、目の前のこいつは息を吹き返したわけだが。
ただし、今回は安堵だけじゃなかった。
記憶は、3時のスナップショットの時点までしか残っていない。つまり、転倒も痙攣も死も、当然なかったことになってる。**それだけじゃなく、朝の3時から夕方18時42分までの十五時間ぶんの記憶も、まるごと消えてる。**
「ちょっと、あんた、なんで泣きそうな顔してんの? 変なの」
「いや、お前さ……今日一日、何してたか覚えてる?」
「は? 一日って朝起きたとこでしょ?って……あれ?」
ミレイユの顔が、徐々に曇っていく。
「あれ……なんでわたし、こんなとこにいんの……?」
「だよなあ」
頭を抱えた。生き返ったのはいいとして、丸一日近い記憶が消し飛んだ幼馴染に、今日何があったかを一から説明する羽目になっている。「お前、川でコケて死んで、その後生き返ったと思ったらまた死んで、もう一回戻したらまた死んで、結局朝まで巻き戻すしかなかった」なんて説明、誰が信じるんだ。自分で言ってて意味がわからない。
「うるせえ、お前が死んだからだろうが」
「は? 死んでないけど? 超元気ですけど?」
「お前の中ではな。しかも今日のお前の記憶、半分以上消えてるけどな」
「は?!」
そこで、ミレイユが自分の体を見下ろして、固まった。
「……え」
「……あ」
しまった、と思った時にはもう遅かった。シャツの前が、はだけたままだ。CPRの最中に開いた胸元を、戻すタイミングなんて欠片もなかった。
「え、なんで?!なんでわたし服、前あいてんの……?!」
「……っ」
「ちょっと、なんで!? なんで前あいてるの!?あんたなにしたの?!?!」
顔を真っ赤にしながら、ミレイユが慌てて両手で胸元を押さえる。声が裏返っている。
「い、いや! コケた時にズレたんだよ多分!」
口から出まかせが、自分でも驚くくらいスムーズに出た。
「ズレる!? ボタン全部開いてるんですけど!?」
「あー、その、岩に頭ぶつけて、もがいた拍子に、こう、引っかかって……」
「引っかかって全部のボタン外れる? あんた今すごい嘘下手じゃない?」
鋭い指摘に、言葉に詰まった。当然だ、心肺蘇生のために自分で開いた、なんて本当のことを言えるわけがない。それを言うには、転倒も、痙攣も、心停止も、繰り返したロールバックも、全部説明しなきゃいけなくなる。
「と、とにかく! お前が無事だったんだから、それでいいだろ!」
「全然よくないし、誤魔化されてる気しかしないんだけど!?」
ミレイユが涙目になりながら、シャツのボタンを慌てて留め直していく。その手元を見るでもなく、自分はもうステータス画面のほうに意識が向きかけていた。今は原因究明が先だ、という頭の切り替えが、無意識のうちに表情にも出ていたんだろう。
「……あんた、なんでそんな普通な顔してんの」
ボタンを留め終えたミレイユが、ふと、じとっとした目でこちらを見てきた。
「は?」
「いや、今、思いっきり出てたわけでしょ、わたしの……その…おっぱい…。それなのに、なんかもう全然動じてないっていうか……!」
ミレイユからすれば、当然そう見えるはずだった。彼女の記憶には、転倒も、痙攣も、心停止も、何度も繰り返したロールバックも、何一つ残っていない。あるのは「気づいたら地面に座っていて、なぜか知らないが服のボタンが全部外れていた」という、ただそれだけの事実だ。説明できない状況で、裸の上半身を見られた。それなのに、見た側がやけに平然としている。理不尽さで言えば、こっちのほうがよほど理不尽だろう。
「いや、それは、その……」
迂闊に「緊急事態だったから」なんて言えるわけがない。それを言えば「何の緊急事態?」と聞き返されるに決まっている。心肺蘇生だったとも、心停止だったとも、説明できる状況じゃない。かといって、ここで動揺してみせるのも、それはそれで墓穴を掘る気がした。
「いや、その、なんていうか……不可抗力、だったんだよ、こう……」
「不可抗力で人の服のボタン全部外れるわけ!?」
「あー、うん、そうだな、おかしいよな、自分で言ってて」
「なんか、それはそれでムカつくんだけど」
「は? どっちなんだよ」
「どっちもだよ! 見られたのもムカつくし、見られたのに全然意識されてないのも、それはそれでムカつくの!」
理不尽な二段構えの抗議に、思わず言葉に詰まった。見られて怒る、というのはまだわかる。でも、見た側が平然としていることにまで怒られるのは、さすがに予測の範囲外だった。
「いや、お前、それ俺がどうしても納得いく答えがないやつじゃん……」
「うるさい! とにかくムカつくものはムカつくの!」
ミレイユが頬を膨らませて、そっぽを向く。耳の先が、まだ赤いままだった。
説明する気力もなかった。代わりに、震える手でステータス画面をもう一度開く。今度は確認のためじゃない。**原因究明**のためだ。
ロールバックは結果を巻き戻しただけ。さっきの転倒の**原因**は、まだ何も解決していない。このままだと、また同じことが起きる。何より、毎回これだけ面倒な思いをするくらいなら、**そもそも転ばないようにするのが一番早い。**
```
[ミレイユ]
AGI: 4
LUK: 3
```
「……お前、AGIとLUK低すぎだろ」
「は? 何それ」
「いや、お前が運動音痴な理由、ステータス的にガチで裏付けされてた」
愕然とした。今までただの「天然」「ドジっ子」属性だと思ってたけど、これ数値的に**致命的に低い**。一般人の半分以下。むしろこれで今まで生きてこられたのが奇跡なレベルだ。
「ちょっと、人のステータスに勝手にケチつけないでくれる?」
「お前が死にかけた原因がここにあるんだよ、黙ってろ」
ゲストOS rootで、ミレイユの型定義(TypeScript)ファイルにアクセスする。
```typescript
interface Character {
name: string;
AGI: number; // 4
LUK: number; // 3
// ...
}
```
この数値が低いせいで、ちょっとした段差や苔で簡単に転ぶ。転んだ拍子に運悪く頭を強打する確率も、LUKの低さで跳ね上がる。さっきのは、**起こるべくして起きた事故**だったということだ。
「直す」
「は? 何を」
「お前の運動神経」
数値を書き換える。ただし、極端な値にはしない。一般人の倍とか999とか、そういうのは違う気がした。
```typescript
AGI: number; // 15
LUK: number; // 15
```
```
> Applying changes...
> Sync to DB scheduled: Next batch (03:00 AM)
> Changes will reflect after sync.
```
明日の朝には反映される。とりあえず、これで次に川に来ても、苔で転んで頭を強打して死ぬ、なんてことはなくなるはずだ。たぶん。
それともう一つ、考えなきゃいけないことがある。
さっきの「死んだ瞬間がそのままSSとして残ってた」問題。あれ、根本的にはイベント検知型の自動スナップショットの間隔が荒すぎるのが原因だ。次に死亡イベントが起きた時、また「死んだ直後の状態」しか残ってなかったら、今日と同じ地獄を繰り返す。
なら間隔を縮めればいい話なんだが……ここで一つ、悩ましい問題がある。
このストレージ、バックエンドが**Btrfs**だ。Copy-on-Writeでスナップショットそのものは軽量に取れる設計のはずなんだけど、それでも対象が世界中の全キャラクター分ともなると話は別で、スナップショット間隔を短くすればするほど、メタデータの断片化とCoWによる書き込み増幅がじわじわ効いてくる。下手に秒単位とかにしたら、ストレージ全体の負荷が跳ね上がって、今度は別の場所で謎の遅延やラグが発生しかねない。
「かといってZFSもな…重すぎてどうなるかわかんないんだよな。リソース足りるのか?……なら、EXT4にでもするか、これ」
ぼそっと呟いた独り言に、ミレイユが「は?」と返してくる。説明する気力はもうない。
EXT4なら単純な構造で安定はしてるけど、その代わりスナップショット機能自体がBtrfsほど柔軟じゃない。LVMのスナップショット機能を別途噛ませるとか、構成自体を考え直す必要が出てくる。**移行コストと、今のリスクと、どっちを取るか。**正直、今すぐ結論は出せない。
とりあえず今日のところは、間隔をほんの少しだけ詰める設定変更に留めておくことにした。抜本的な見直しは、また今度、頭が冷えてる時にちゃんと考える。
「何したの、今」
「お前が二度と俺の前で死なないようにしただけだ」
「意味わかんないんだけど」
「俺もまだ処理が追いついてない」
正直なところ、まだ手が震えてる。さっきの数十分、体感時間が滅茶苦茶でよくわからないけど、あの時間は本物だった。心臓マッサージの感覚も、何度も繰り返した絶望も、全部本物だった。
ロールバックがあったから「なかったこと」にできた。でも、俺の中では、なかったことになんてならない。それに、**何度も戻せばいいってもんでもない**ってことも、今日嫌というほど学んだ。下手な戻し方をすれば、戻した本人の記憶ごと持っていかれる。万能の保険なんかじゃない、使い方を間違えればただの別のリスクだ。
「ね、はやく川入ろうよ」
「やめろ。今日はもう帰る」
「ええー、なんでよ」
「お前は知らなくていい」
ミレイユの手を引いて、川から離れる。背中越しに、彼女がまだ不満そうにぶつくさ言ってるのが聞こえる。それでも、さっきの「服が開いてた」件については、まだジト目でこちらを睨んでいるのがわかった。あとでまた問い詰められるんだろうな、と覚悟しておく。
スナップショットは万能薬じゃない。結果は巻き戻せても、原因は別に直しに行かなきゃいけない。そして何より──**俺の記憶までは、巻き戻ってくれない。**
今夜もまた、寝る前に管理コンソールを開いて、今度こそ抜かりなくバックアップ設定を見直すんだろうな、と思いながら、俺はミレイユの少し前を歩いた。
---
(つづく)
お読みいただきありがとうございます。
書きたかったのは「復活魔法を障害対応として描いたらどうなるか」の一点です。
蘇生系のチートはこのジャンルにいくらでもありますが、たいてい発動して終わりです。
この話では、そこを運用の問題として扱いました。
ロールバックは成功する。
成功した上で、死亡状態のスナップショットに戻す。
これは失敗ではなく、システムが正確に動いている証拠です。
イベント検知型の自動取得は「大きな状態変化」を拾うので、死亡は当然拾われる。
最悪の意味で、実に律儀な挙動です。
ここを思いついた時点で、この話は書く価値があると思いました。
前半のCPRを長く書いたのも、そのためです。
HPバーが押すたびに「+2」動き、やがて「+1」になり、ゼロに近づいていく。
あれは「主人公が頑張っている」描写ではなく、押し上げる力と落ちていく力の収支が逆転していく記録です。
坂道の荷車の比喩を使ったのはそういう意図です。
肋骨の感触も、嘔吐物も、抜き差しならない生々しさを入れないと、後半の「ただのロールバックでした」が効かない。
奇跡の安さを書くには、その前に人間の腕力の限界を丁寧に書いておく必要がある、というわけです。
同じ理由で、ミレイユの体の描写に踏み込みました。
ただ、意識していたはずのものが、命が抜けた途端にただの質量に変わる——その落差は、心停止を扱う以上、目を逸らすべきではないから。
結果は巻き戻せる。
しかし、復元されるのは対象のデータだけで、対応した側の記憶は巻き戻ってくれない。
ミレイユは十五時間を失い、主人公はあの数十分を丸ごと抱えたままです。
障害対応をやったことがある方には、この非対称性が一番刺さるんじゃないかと思っています。
Btrfsのくだりは完全に趣味です。
CoWの書き込み増幅を気にしながら異世界で幼馴染の命のバックアップ間隔を検討する主人公、というのが書きたかっただけなので。
スペックさえあれば、問答無用でZFS一択です。スペックさえあれば。
感想・評価をいただけると大変励みになります。