動いてるものを触るな。
領主の館から村への帰り道、リオンの頭の中ではその一言がぐるぐると回り続けていた。
夕暮れの畦道を歩く足取りは重い。両手をぽんとズボンのポケットに突っ込み、この世界の服にはポケットがないことを思い出して、所在なく腕を組んだ。
シングル構成の防壁魔法陣。冗長化の進言。却下。
前世でも何度も経験した光景だ。
「『予算がない』。『今のところ動いてる』。『触って壊れたら誰が責任を取るんだ』」
リオンは小声で、領主の言葉を反芻した。
一字一句、前世の上層部と同じだった。違うのは、スーツがマントになったことくらいだ。
ルーンフェル村に着いたのは、すっかり日が落ちてからだった。
村の入り口にある灯火魔法陣が、ぼんやりと橙色の光を灯している。こいつも劣化率が15%を超えていた。直したい。でも今は、それどころじゃない。
リオンは真っ直ぐ自宅に向かうつもりだった。
だが、鍛冶場の前を通りかかったとき、赤い炎が目に入った。
「まだ仕事してんの、ゴルドのおじさん」
「おう」
ゴルドは火床の前に座り、斧の刃を研いでいた。
この村でただ一人の鍛冶師。60を過ぎた白髪の老人だが、腕は衰えていない。以前リオンが【診断】で亀裂を見つけた斧を、今でも丁寧に直して使っている。
「暗い顔だな、若いの」
「……領主に防壁の冗長化を提案してきたんだけど、却下されました」
「そりゃそうだろう」
ゴルドは斧から目を離さずに言った。あまりにもあっさりとした返事に、リオンは面食らった。
「え、そりゃそうってどういう」
「座れ。茶を淹れてやる」
鍛冶場の隅に置かれた粗末な椅子に腰を下ろすと、ゴルドは火にかけた薬缶から湯を注ぎ、苦い薬草茶を差し出した。リオンは一口すすって、顔をしかめた。相変わらずの苦さだ。
「若いの。お前の言いたいことはわかる」ゴルドは自分の椅子に深く座り直した。「あの防壁は危ない。予備がない。壊れたら終わり。お前の見立ては正しいだろうよ」
「なら」
「だがな」
ゴルドは火床の炎を見つめたまま、低い声で続けた。
「この世界では、魔法陣は神の遺産だ。始祖神教の教えでは、古代魔術師は神に等しい存在とされている。その方々が遺した魔法陣は聖なるものなんだよ」
リオンは茶碗を持つ手を止めた。
「……聖なるもの」
「ああ。触ることに抵抗がある者は多い。ましてや『壊れたときのために予備を作る』なんて言い出したら、『神の遺産が壊れることを前提にしている不敬者』と思われかねん」
リオンは絶句した。
技術的に正しいことが、文化的に受け入れられない。
前世でもそういう場面はあった。セキュリティパッチを当てるのに稟議が必要で、承認が下りるまで3ヶ月。その間に脆弱性を突かれて大障害。技術の問題ではなく、組織と文化の問題だった。
「でも……壊れるときは壊れますよ。神の遺産だろうが何だろうが、物理法則には、いや魔法の法則には逆らえない」
「そりゃそうだ。わしもそう思う」ゴルドは肩をすくめた。「だが、思うことと、村全体を説得することは別だろう」
リオンは茶をもう一口すすった。苦い。けれど、ゴルドの言葉はもっと苦かった。
「正しいだけじゃ、駄目なんですね」
「世の中、だいたいそういうもんだ」
鍛冶場を出たリオンは、自室のベッドに倒れ込んだ。
天井の木目を見つめながら、考える。
技術的な正しさは、土台でしかない。
その上に人の感情、文化、信仰、組織の慣性がある。前世のSEとしての経験を持ってしても、いや、持っているからこそ、わかる。
提案書を完璧に書いても、承認者の感情一つで却下される。
それは前世で何度も味わった。
「でも、放置して落ちたら意味がない……」
リオンは腕で目を覆った。
このままだと、領主の館の防壁魔法陣はいつか止まる。シングル構成のシステムは、必ず止まる。それはSLAの鉄則だ。
止まったとき、何が起きる? 領主の館が無防備になる。魔獣の侵入。最悪、人が死ぬ。
技術者にできることは、警告を出すこと。そして代替案を探すこと。
「……代替案、か」
直接的な冗長化が駄目なら、間接的なアプローチはないか。
既存の魔法陣を「触る」のではなく、別の方法で。
そこまで考えたとき、睡魔が勝った。
リオンは泥のように眠りに落ちた。
翌朝。
村の広場で、見慣れない顔の男が立っていた。
粗末な麻の服に、泥だらけの靴。痩せた顔には疲労の色が濃い。リオンと同じくらいの年齢だろうか。いや、この世界の基準だと少し上かもしれない。
「あの、リオンさんですか? 魔法陣を直せるっていう——」
村長に案内されてきたらしい。リオンが頷くと、男は堰を切ったように話し始めた。
名前はトール。ルーンフェル村から半日ほど離れた小さな集落、ヘルム集落の出身。人口は50人ほど。
そして、防壁魔法陣がない。
「元々あったんですが、30年前に壊れて、そのまま放置されてて……」
「30年!?」
「はい。修理する魔術師も予算もなくて。今は木の柵と交代制の見張りで凌いでます」
リオンは思わず目を閉じた。
30年間、防壁なしで生活している集落。魔獣が出れば、木の柵で防ぐしかない。それはファイアウォールなしでインターネットに接続しているようなものだ。
「最近、森の奥から魔獣の目撃が増えてて……子どもたちが外で遊べなくなってるんです。どうか、うちの防壁を直してもらえませんか」
トールは頭を下げた。深く、必死に。
「予算は……ほとんどありません。でも、うちにはまだ壊れた防壁魔法陣の部品が残ってます。それを使って、なんとか——」
リオンは腕を組んで考え込んだ。
壊れた魔法陣の部品を流用して、新規に防壁を構築する。
技術的には可能だ。たぶん。
【診断】で部品の状態を確認し、使えるものを選別し、組み直す。前世で言えば、廃棄予定の中古サーバーを再利用してシステムを組むようなものだ。
だが、問題がある。
大きな問題が。
「テスト環境がない」
リオンは呟いた。
「は?」
「いや、こっちの話です」
リオンは頭を掻いた。
防壁魔法陣を新規構築する。しかし、検証する環境がない。部品が正しく動作するかを確認するには、実際に組み上げて動かすしかない。
つまり、本番環境でテストするということだ。
前世のSEとしての信条が、全力で警報を鳴らしている。
本番環境でテストしないでください。
これはIT運用の大原則だ。テストは検証環境で行い、問題がないことを確認してから本番に反映する。逆をやれば障害が起きる。最悪、システムが壊れる。
だが。
リオンはトールの顔を見た。
疲れ切った目。必死さ。50人の集落。防壁がないまま30年。魔獣の脅威が増している。
これは「テスト環境を用意してから慎重に進めましょう」と言っている場合じゃないのかもしれない。
「……ちょっと、考えさせてください」
リオンはそう答え、トールには村長の家で休んでもらうことにした。
一人になったリオンは、村外れの丘に登った。
風が草原を撫でていく。遠くに見えるのは、深い森。あの向こうにヘルム集落がある。
頭の中で、二つの声が戦っていた。
一つは元SEとしての声。
本番環境でテストするな。検証なしで本番投入するな。何かあったら誰が責任を取る。手順書はあるのか。切り戻し手順は。ロールバック計画は——。
もう一つは、今ここにいる自分の声。
50人の命がかかっている。防壁がない集落。魔獣の脅威。待っている時間はない。
「……前世の僕なら、絶対にやらない」
リオンは草の上に座り込んだ。
「検証環境を用意して、テストして、問題がないことを確認して、手順書を書いて、レビューを通して、承認を得て——それから本番投入。それが正しい手順だ」
でも。
「検証環境なんて、この世界にはない」
前世のIT業界には、ステージング環境があった。テスト用のサーバーがあった。仮想環境でシミュレーションができた。
この世界には何もない。
魔法陣の部品は一点もの。組み上げたら、動かすしかない。動かさなければ、正しく動くかわからない。
「つまり……本番環境しかない」
リオンは深く息を吐いた。
前世の常識と、この世界の現実。その間で、折り合いをつけなければならない。
夕方、リオンは再びゴルドの鍛冶場を訪れた。
「おじさん、ちょっと聞きたいことがあって」
「なんだ」
「壊れた魔法陣の部品、石板とか刻印板とかを組み合わせて、新しい魔法陣を作ることって、できるものですか」
ゴルドは研いでいた刃を置き、リオンを見た。
「できるかと聞かれれば、できる。わしも若い頃、壊れた魔法陣の刻印板を鋳直して別の魔法陣に組み込んだことがある」
「実績があるんですね」
「ただし——古い部品は癖がある。元の魔法陣の設定が残っていることがある。それを無視して組み込むと、干渉を起こす」
リオンは頷いた。中古部品のファームウェアに前の設定が残っているようなものだ。
「それを【診断】で見極めれば……」
「お前ならできるかもしれんな」ゴルドは顎髭を撫でた。「だが若いの、さっきの話——ヘルム集落の防壁の件、聞こえたぞ」
「……耳が早いですね」
「村は狭い」
ゴルドは立ち上がり、鍛冶場の奥から古い刻印板を引っ張り出してきた。手のひらほどの石板に、摩耗した紋様が刻まれている。
「わしに言わせれば、やるしかないだろう」
「でも、テストなしですよ。検証環境もない。いきなり本番です」
「お前の言う『けんしょうかんきょう』とやらは、この世界にはない。昔からそうだ。魔法陣は、組んで動かしてみるしかない」
リオンは唸った。
「だがな」ゴルドは刻印板をリオンに手渡した。「ヘルム集落には今、防壁がない。ゼロだ。お前が組んだものが多少不完全でも、ゼロよりはましだろう」
その言葉が、リオンの胸に刺さった。
ゼロよりはまし。
完璧を目指して何もしないより、不完全でも動くものを出す。
前世のある先輩の言葉を思い出した。
「完璧なシステムは存在しない。でも、動くシステムは存在する。まず動かせ。改善は後だ」
「……わかりました」
リオンは深く息を吸い、腹を決めた。
「やります。ヘルム集落の防壁。古い部品を使って、新規構築」
「おう」
「ただし、条件があります」
リオンの目が、真剣に光った。
「まず、僕が【診断】で使える部品を全部選別します。状態の悪いものは使わない。次に、組み上げる前に紙の上で設計図を引きます。構成を決めてから、組む」
「当然だ」
「それから——起動は段階的にやります。一気に全機能を動かすんじゃなくて、一つずつ。何か異常が出たら、すぐ止める」
「なるほど」
「最後に」リオンは指を一本立てた。「手順書を作ります。何をどの順番でやるか、全部書く。僕がいなくても、次に修理が必要になったときに誰でも対応できるように」
ゴルドは、ふっと笑った。
「お前は本当に手順書が好きだな」
「好きとかじゃなくて、必要なんです」
翌朝。
リオンはトールに返事をした。
「ヘルム集落の防壁、引き受けます。ただし、壊れた部品の状態を現地で確認してからです。使えるものがなければ、別の方法を考えます」
トールの目に涙が浮かんだ。
「ありがとうございます……! ありがとうございます……!」
「まだお礼を言うのは早いですよ」リオンは苦笑した。「これ、相当な賭けなんです。検証なしの一発構築。正直、僕の信条には反してます」
「しんじょう……?」
「本番環境でテストしないでください——っていう、まあ、僕の中の鉄則みたいなもので」
トールには伝わらなかっただろう。でも、リオンは自分に言い聞かせるように続けた。
「だから、僕にできる限りのリスク低減はやります。使える部品の選別、設計、段階的な起動、手順書。全部やる。その上で——動かす」
ゴルドの言葉が脳裏に蘇る。
ゼロよりはまし。
そうだ。
完璧な検証環境を用意できないからといって、何もしないわけにはいかない。
前世の常識を、この世界の現実に合わせて再定義する。
リスクをゼロにはできない。
でも、リスクを最小化する方法はいくらでもある。
リオンは自室に戻り、羊皮紙を広げた。
まだ現地を見ていない。部品の状態もわからない。
それでも頭の中では、すでに設計が始まっていた。
防壁魔法陣の基本構成。入力パス、処理部、出力部。
古い部品を使うなら、前の設定との干渉をどう処理するか。
段階的起動のチェックリスト。
異常時の切り戻し——いや、この場合は「停止手順」か。
リオンはペンを走らせながら、独り言を呟いた。
「本番環境でテストしないでください……なんて言ってられないか」
口元に、わずかな笑みが浮かんだ。
前世の鉄則を破ることに、もう迷いはなかった。
いや、破るのではない。この世界の現実に合わせて、鉄則を進化させるのだ。
テスト環境がないなら、本番をテスト環境にすればいい。
ただし——慎重に、段階的に、手順を踏んで。
リオンは羊皮紙の一番上に、大きく書いた。
『ヘルム集落 防壁魔法陣 構築手順書(案)』
その下に、最初の一行を書き加える。
『第一項——本番投入前チェックリスト』
——元SEの戦いは、いつだって手順書から始まる。
【あとがき】
検証環境のない世界で本番一発勝負。SEの信条と目の前の人命を天秤にかけたとき、「ゼロよりはまし」という答えに辿り着く過程を丁寧に書きました。