S03-P01 異世界SLA99.99% ~元SEは今日も魔法インフラを落とさない~

第12話: 本番環境でテストしないでください

第1アーク · 5,401文字 · revised

動いてるものを触るな。

領主の館から村への帰り道、リオンの頭の中ではその一言がぐるぐると回り続けていた。
 夕暮れの畦道を歩く足取りは重い。両手をぽんとズボンのポケットに突っ込み、この世界の服にはポケットがないことを思い出して、所在なく腕を組んだ。

シングル構成の防壁魔法陣。冗長化の進言。却下。
 前世でも何度も経験した光景だ。

「『予算がない』。『今のところ動いてる』。『触って壊れたら誰が責任を取るんだ』」

リオンは小声で、領主の言葉を反芻した。
 一字一句、前世の上層部と同じだった。違うのは、スーツがマントになったことくらいだ。


ルーンフェル村に着いたのは、すっかり日が落ちてからだった。
 村の入り口にある灯火魔法陣が、ぼんやりと橙色の光を灯している。こいつも劣化率が15%を超えていた。直したい。でも今は、それどころじゃない。

リオンは真っ直ぐ自宅に向かうつもりだった。
 だが、鍛冶場の前を通りかかったとき、赤い炎が目に入った。

「まだ仕事してんの、ゴルドのおじさん」
「おう」

ゴルドは火床(ほど)の前に座り、斧の刃を研いでいた。
 この村でただ一人の鍛冶師。60を過ぎた白髪の老人だが、腕は衰えていない。以前リオンが【診断】で亀裂を見つけた斧を、今でも丁寧に直して使っている。

「暗い顔だな、若いの」
「……領主に防壁の冗長化を提案してきたんだけど、却下されました」
「そりゃそうだろう」

ゴルドは斧から目を離さずに言った。あまりにもあっさりとした返事に、リオンは面食らった。

「え、そりゃそうってどういう」
「座れ。茶を淹れてやる」


鍛冶場の隅に置かれた粗末な椅子に腰を下ろすと、ゴルドは火にかけた薬缶(やかん)から湯を注ぎ、苦い薬草茶を差し出した。リオンは一口すすって、顔をしかめた。相変わらずの苦さだ。

「若いの。お前の言いたいことはわかる」ゴルドは自分の椅子に深く座り直した。「あの防壁は危ない。予備がない。壊れたら終わり。お前の見立ては正しいだろうよ」
「なら」
「だがな」

ゴルドは火床の炎を見つめたまま、低い声で続けた。

「この世界では、魔法陣は神の遺産(いさん)だ。始祖神(しそしん)教の教えでは、古代魔術師は神に等しい存在とされている。その方々が遺した魔法陣は聖なるものなんだよ」

リオンは茶碗を持つ手を止めた。

「……聖なるもの」
「ああ。触ることに抵抗がある者は多い。ましてや『壊れたときのために予備を作る』なんて言い出したら、『神の遺産が壊れることを前提にしている不敬者』と思われかねん」

リオンは絶句した。

技術的に正しいことが、文化的に受け入れられない。
 前世でもそういう場面はあった。セキュリティパッチを当てるのに稟議(りんぎ)が必要で、承認が下りるまで3ヶ月。その間に脆弱性を突かれて大障害。技術の問題ではなく、組織と文化の問題だった。

「でも……壊れるときは壊れますよ。神の遺産だろうが何だろうが、物理法則には、いや魔法の法則には逆らえない」
「そりゃそうだ。わしもそう思う」ゴルドは肩をすくめた。「だが、思うことと、村全体を説得することは別だろう」

リオンは茶をもう一口すすった。苦い。けれど、ゴルドの言葉はもっと苦かった。

「正しいだけじゃ、駄目なんですね」
「世の中、だいたいそういうもんだ」


鍛冶場を出たリオンは、自室のベッドに倒れ込んだ。
 天井の木目を見つめながら、考える。

技術的な正しさは、土台でしかない。
 その上に人の感情、文化、信仰、組織の慣性(いなーしあ)がある。前世のSEとしての経験を持ってしても、いや、持っているからこそ、わかる。

提案書を完璧に書いても、承認者の感情一つで却下される。
 それは前世で何度も味わった。

「でも、放置して落ちたら意味がない……」

リオンは腕で目を覆った。
 このままだと、領主の館の防壁魔法陣はいつか止まる。シングル構成のシステムは、必ず止まる。それはSLAの鉄則だ。
 止まったとき、何が起きる? 領主の館が無防備になる。魔獣の侵入。最悪、人が死ぬ。

技術者にできることは、警告を出すこと。そして代替案を探すこと。

「……代替案、か」

直接的な冗長化が駄目なら、間接的なアプローチはないか。
 既存の魔法陣を「触る」のではなく、別の方法で。

そこまで考えたとき、睡魔が勝った。
 リオンは泥のように眠りに落ちた。


翌朝。

村の広場で、見慣れない顔の男が立っていた。
 粗末な麻の服に、泥だらけの靴。痩せた顔には疲労の色が濃い。リオンと同じくらいの年齢だろうか。いや、この世界の基準だと少し上かもしれない。

「あの、リオンさんですか? 魔法陣を直せるっていう——」

村長に案内されてきたらしい。リオンが頷くと、男は(せき)を切ったように話し始めた。

名前はトール。ルーンフェル村から半日ほど離れた小さな集落、ヘルム集落の出身。人口は50人ほど。
 そして、防壁魔法陣がない。

「元々あったんですが、30年前に壊れて、そのまま放置されてて……」
「30年!?」
「はい。修理する魔術師も予算もなくて。今は木の柵と交代制の見張りで(しの)いでます」

リオンは思わず目を閉じた。
 30年間、防壁なしで生活している集落。魔獣が出れば、木の柵で防ぐしかない。それはファイアウォールなしでインターネットに接続しているようなものだ。

「最近、森の奥から魔獣の目撃が増えてて……子どもたちが外で遊べなくなってるんです。どうか、うちの防壁を直してもらえませんか」

トールは頭を下げた。深く、必死に。

「予算は……ほとんどありません。でも、うちにはまだ壊れた防壁魔法陣の部品が残ってます。それを使って、なんとか——」


リオンは腕を組んで考え込んだ。

壊れた魔法陣の部品を流用して、新規に防壁を構築する。
 技術的には可能だ。たぶん。
 【診断】で部品の状態を確認し、使えるものを選別し、組み直す。前世で言えば、廃棄予定の中古サーバーを再利用してシステムを組むようなものだ。

だが、問題がある。

大きな問題が。

「テスト環境がない」

リオンは呟いた。

「は?」
「いや、こっちの話です」

リオンは頭を掻いた。

防壁魔法陣を新規構築する。しかし、検証する環境がない。部品が正しく動作するかを確認するには、実際に組み上げて動かすしかない。
 つまり、本番環境でテストするということだ。

前世のSEとしての信条が、全力で警報を鳴らしている。

本番環境でテストしないでください。
 これはIT運用の大原則だ。テストは検証環境で行い、問題がないことを確認してから本番に反映する。逆をやれば障害が起きる。最悪、システムが壊れる。

だが。

リオンはトールの顔を見た。
 疲れ切った目。必死さ。50人の集落。防壁がないまま30年。魔獣の脅威が増している。

これは「テスト環境を用意してから慎重に進めましょう」と言っている場合じゃないのかもしれない。


「……ちょっと、考えさせてください」

リオンはそう答え、トールには村長の家で休んでもらうことにした。

一人になったリオンは、村外れの丘に登った。
 風が草原を撫でていく。遠くに見えるのは、深い森。あの向こうにヘルム集落がある。

頭の中で、二つの声が戦っていた。

一つは元SEとしての声。
 本番環境でテストするな。検証なしで本番投入するな。何かあったら誰が責任を取る。手順書はあるのか。切り戻し手順は。ロールバック計画は——。

もう一つは、今ここにいる自分の声。
 50人の命がかかっている。防壁がない集落。魔獣の脅威。待っている時間はない。

「……前世の僕なら、絶対にやらない」

リオンは草の上に座り込んだ。

「検証環境を用意して、テストして、問題がないことを確認して、手順書を書いて、レビューを通して、承認を得て——それから本番投入。それが正しい手順だ」

でも。

「検証環境なんて、この世界にはない」

前世のIT業界には、ステージング環境があった。テスト用のサーバーがあった。仮想環境でシミュレーションができた。
 この世界には何もない。

魔法陣の部品は一点もの。組み上げたら、動かすしかない。動かさなければ、正しく動くかわからない。

「つまり……本番環境しかない」

リオンは深く息を吐いた。

前世の常識と、この世界の現実。その間で、折り合いをつけなければならない。


夕方、リオンは再びゴルドの鍛冶場を訪れた。

「おじさん、ちょっと聞きたいことがあって」
「なんだ」
「壊れた魔法陣の部品、石板とか刻印板とかを組み合わせて、新しい魔法陣を作ることって、できるものですか」

ゴルドは研いでいた刃を置き、リオンを見た。

「できるかと聞かれれば、できる。わしも若い頃、壊れた魔法陣の刻印板を鋳直(いなお)して別の魔法陣に組み込んだことがある」
「実績があるんですね」
「ただし——古い部品は癖がある。元の魔法陣の設定が残っていることがある。それを無視して組み込むと、干渉を起こす」

リオンは頷いた。中古部品のファームウェアに前の設定が残っているようなものだ。

「それを【診断】で見極めれば……」
「お前ならできるかもしれんな」ゴルドは顎髭を撫でた。「だが若いの、さっきの話——ヘルム集落の防壁の件、聞こえたぞ」
「……耳が早いですね」
「村は狭い」

ゴルドは立ち上がり、鍛冶場の奥から古い刻印板を引っ張り出してきた。手のひらほどの石板に、摩耗した紋様が刻まれている。

「わしに言わせれば、やるしかないだろう」
「でも、テストなしですよ。検証環境もない。いきなり本番です」
「お前の言う『けんしょうかんきょう』とやらは、この世界にはない。昔からそうだ。魔法陣は、組んで動かしてみるしかない」

リオンは唸った。

「だがな」ゴルドは刻印板をリオンに手渡した。「ヘルム集落には今、防壁がない。ゼロだ。お前が組んだものが多少不完全でも、ゼロよりはましだろう」

その言葉が、リオンの胸に刺さった。

ゼロよりはまし。
 完璧を目指して何もしないより、不完全でも動くものを出す。

前世のある先輩の言葉を思い出した。
 「完璧なシステムは存在しない。でも、動くシステムは存在する。まず動かせ。改善は後だ」


「……わかりました」

リオンは深く息を吸い、腹を決めた。

「やります。ヘルム集落の防壁。古い部品を使って、新規構築」
「おう」
「ただし、条件があります」

リオンの目が、真剣に光った。

「まず、僕が【診断】で使える部品を全部選別します。状態の悪いものは使わない。次に、組み上げる前に紙の上で設計図を引きます。構成を決めてから、組む」
「当然だ」
「それから——起動は段階的にやります。一気に全機能を動かすんじゃなくて、一つずつ。何か異常が出たら、すぐ止める」
「なるほど」
「最後に」リオンは指を一本立てた。「手順書を作ります。何をどの順番でやるか、全部書く。僕がいなくても、次に修理が必要になったときに誰でも対応できるように」

ゴルドは、ふっと笑った。

「お前は本当に手順書が好きだな」
「好きとかじゃなくて、必要なんです」


翌朝。

リオンはトールに返事をした。

「ヘルム集落の防壁、引き受けます。ただし、壊れた部品の状態を現地で確認してからです。使えるものがなければ、別の方法を考えます」

トールの目に涙が浮かんだ。

「ありがとうございます……! ありがとうございます……!」
「まだお礼を言うのは早いですよ」リオンは苦笑した。「これ、相当な賭けなんです。検証なしの一発構築。正直、僕の信条には反してます」
「しんじょう……?」
「本番環境でテストしないでください——っていう、まあ、僕の中の鉄則みたいなもので」

トールには伝わらなかっただろう。でも、リオンは自分に言い聞かせるように続けた。

「だから、僕にできる限りのリスク低減はやります。使える部品の選別、設計、段階的な起動、手順書。全部やる。その上で——動かす」

ゴルドの言葉が脳裏に蘇る。
 ゼロよりはまし。

そうだ。
 完璧な検証環境を用意できないからといって、何もしないわけにはいかない。
 前世の常識を、この世界の現実に合わせて再定義する。

リスクをゼロにはできない。
 でも、リスクを最小化する方法はいくらでもある。


リオンは自室に戻り、羊皮紙を広げた。
 まだ現地を見ていない。部品の状態もわからない。

それでも頭の中では、すでに設計が始まっていた。

防壁魔法陣の基本構成。入力パス、処理部、出力部。
 古い部品を使うなら、前の設定との干渉をどう処理するか。
 段階的起動のチェックリスト。
 異常時の切り戻し——いや、この場合は「停止手順」か。

リオンはペンを走らせながら、独り言を呟いた。

「本番環境でテストしないでください……なんて言ってられないか」

口元に、わずかな笑みが浮かんだ。

前世の鉄則を破ることに、もう迷いはなかった。
 いや、破るのではない。この世界の現実に合わせて、鉄則を進化させるのだ。

テスト環境がないなら、本番をテスト環境にすればいい。
 ただし——慎重に、段階的に、手順を踏んで。

リオンは羊皮紙の一番上に、大きく書いた。

『ヘルム集落 防壁魔法陣 構築手順書(案)』

その下に、最初の一行を書き加える。

『第一項——本番投入前チェックリスト』

——元SEの戦いは、いつだって手順書から始まる。


【あとがき】
検証環境のない世界で本番一発勝負。SEの信条と目の前の人命を天秤にかけたとき、「ゼロよりはまし」という答えに辿り着く過程を丁寧に書きました。

文字数: 5,401