第26話「みんなで作り直す」
「ようこそ、世界を作り直すための会議へ」
管理層の会議用ダッシュボードに、四つの席が並んでいた。俺と、ノードと、セレスと、カルクと、ダンジ。五人での合同設計セッションは、世界が始まって以来、初めてのことだった。
「あら、悠真くん、今日はいいお天気ねぇ」
「お前のせいだろう」
セレスが空色の髪を揺らしながらにっこり笑った。会議室の中だというのに、彼女の背景だけ陽光が差している。気分が良いらしい。
「悠真様! 集まりました!」
カルクがメガネを直しながら手を挙げた。今日も式が浮かんでいる。
ダンジは腕を組んで、いつもの渋面のままだった。
「ワシのダンジョンを作り直す、というのは穏やかではないがの」
「壊すんじゃない。作り直すんだ。ダンジ、あんたが今までで一番いいダンジョンを作れる」
ダンジが俺をにらんだ。それから、ほんの少しだけ、目元が緩んだ。
「……まあ、聞こうではないか」
いい。全員、それぞれの形で乗ってきた。
席についた四人を見渡しながら、俺は内心で、前の世界の似たような会議を思い出していた。大規模な再設計のキックオフ。担当領域の異なる専門家が一堂に会する最初の会議は、たいてい、互いに警戒している。自分の領域を切り取られるんじゃないか、口出しされるんじゃないかという緊張が、空気のどこかに張り詰める。
でも、今日のこの席にそれはなかった。ダンジの渋面も、セレスの微笑も、カルクの興奮も、ノードの控えめな姿勢も、それぞれが「自分の領域を信じている」者の表情だった。誰も、誰かを蹴落とそうとしていない。
俺はホワイトボードに、二つの世界を描いた。左に「現世界」、右に「新世界」。間を細い線でつなぐ。
「これから、新世界を別の場所に並行で組み上げる。並行運用と呼ぶ。住人は現世界で生活したまま、新世界が完成するのを待ってもらう」
「えーと……並行、ということは、世界が二つ動くんですか」
「同時に二つ動く。ただし、二つを並べておいて『はい、いまから全員こちらへ』と一斉に切り替えるんじゃない。地域ごとに、順番に、新しい世界へ移していく」
「地域ごと、ですか」
「ああ。まず辺境の小さな村。問題なければ次の集落。さらにその次は地域全体。最後に都市部。世界を、ひとつの大きな板として動かすんじゃなくて、地域という単位に分けて、ひとつずつ移していく。前の世界では、こういう分割の単位をシャードと呼んでいた。シャードごとに、移行のタイミングをずらす方式だ」
「シャード……」
「気にしなくていい。要は『地域ごとにバラバラに移す』ということだ。世界全体を一瞬で切り替えるのは、避けたい」
「……避けたい、というのは」
「住人が、何かの最中だからだ。たとえばだ——剣を振り下ろしている瞬間に世界が切り替わったら、その剣の軌道は新しい世界に届くのか、それとも旧い方に置き去りにされるのか。途中で切り替えると、行為と結果が別々の世界に分かれてしまう」
ノードが少しだけ眉根を寄せた。
「えーと……それは、こわい話ですね」
「他にもある。市場で銀貨を渡している途中なら、銀貨はどっちの世界の財布に入ったのか。婚礼の誓いの言葉の途中なら、結婚は成立しているのか、していないのか。子供が井戸の水を汲み上げている途中なら、その水はどこに記録されるのか。同じ瞬間に世界中で起きているそういう『途中』を、ひとつ残らず両側の世界で辻褄を合わせるのは、無理だ」
「ぜんぶ、整合性の問題、ですね」
「ああ。前の世界では、それを整合性の崩れと呼んでいた。崩れた整合性は、後から直すのが、いちばん難しい。だから、最初から崩さない方法を選ぶ。地域ごとに、その地域がいちばん落ち着いているタイミングを選んで、そこで運ぶ」
「住人は、それで困らないんですか」
「困らせない方法を、もう一つ用意する」
俺は、ホワイトボードの端に小さく書き加えた。
「住人の移行は、夜、眠っているあいだに行う」
「——眠ってるあいだ、ですか」
「ああ。住人本人の意識を一時的に切り離して、本体のデータだけを新世界の側へ運ぶ。本人にとっては、夜に眠って、朝に起きるだけだ。起きたときには、もう新世界にいる。瞬きの中で世界が入れ替わる、と言ってもいい」
「……あら、ずいぶん優しい運び方ね」
セレスがにっこり笑った。
「住人を起こしたまま運ぶのは、酷だ。荷物じゃないんだから」
「ふん、それは納得じゃ。ワシのダンジョン内で寝ておる冒険者がいたら、起こさんで運んでやろう」
「ダンジ、そういう細かい配慮、いいな」
「ふん、ワシは細やかな職人じゃからの」
俺は二つの世界の間に、移行のステップを書き加えた。
ステップ一:新世界の骨組みを作る。住人なし、機能だけ動く。
ステップ二:辺境の小さな村に限定して、新世界を試験稼働。問題があれば現世界に戻す。
ステップ三:問題がなければ、地域単位で段階的に拡大。
ステップ四:全住人を新世界に移す。最終切り替え。
ステップ五:現世界を安全に停止。
「ステップ二の試験稼働を、新しい設計の最初のお試しとして使う。住人の数が少ない村なら、何かあっても影響を最小限に抑えられる」
「あら、お試しから始めるのね。慎重で、いいことね」
「セレス、その通りだ。前の世界では、これもカナリアリリースと呼んでいた。鳥の名前だ。シャードを分けて少しずつ移していく流儀の、最初の一歩のことだ」
セレスが「まあ、可愛らしい呼び方」とつぶやいた。
* * *
「では、それぞれの担当領域で、移行の見積もりを出してくれ」
俺は四人の顔を見渡した。
まずセレス。
「天候と季節は、計算の方式がいまよりずっと単純になるわ。だってね、終わらせる前提がなくなるんでしょう? 季節の劣化を組み込まなくていいなら、わたし、ずっと素直なお天気を作れるの」
「リソースは?」
「いまの60%で済むわ」
いい兆候だ。次、カルク。
「経済の数式は、終了判定への入力を担う部分が大きいので、そこを切り離せば30%は軽くなります! ただし、新しい指標『住人の健全性』を計算する関数を追加する必要があって、これは未経験なので、見積もりにブレが出ます」
「ブレ幅は?」
「最大で2倍に膨らむ可能性があります」
メモする。次、ダンジ。
「ダンジョンはな、完全に作り直す。終了判定に組み込まれた『最深部の境界点』を、別の形で実装し直す必要がある。だが、その新しい境界点は、もっと美しく作れる」
「リソースの見積もりは」
「現状とほぼ同じだが、移行期間中は一時的に2倍になる」
予想していたが、書きつけながら、頭の中で総量を足していった。
最後、ノード。
「えーと……記録と歴史は、世界の連続性を守る役割が大きくて、移行中も止められません。並行運用中はずっと、両方の記録を取り続ける必要があります」
「それも2倍だ」
「えーと……はい。2倍です」
俺はホワイトボードに、リソース総量の概算を書き出した。
現状運用:100。
移行期間中:180前後。
移行完了後:70前後。
「移行が終われば、世界はずっと軽くなる。でも、移行中の一時的な追加リソースが、いまの世界の限界に近い」
「あら、足りるの?」
「ぎりぎりだ。フィオナの地上からの観測で、魔法体系の改修案が来ている。彼女の最適化で、地上側のリソースを10%は削れる。それで、足りるはずだ」
はずだ、と俺は言った。
言いながら、頭のどこかで、引っかかった。「はず」は願望だ。前の世界で「はず」を見積もりに入れたとき、何度か痛い目を見た。
でも、いまはこれで進めるしかない。
「セレス、ひとつ頼みたいことがある」
「あら、なあに、悠真くん」
「フィオナさんと、こちらから定期的に連絡を取ってやってくれないか。彼女のノートには『すべる感覚』『吸われる感覚』とか、流れの言葉で書かれている観察が多い。こちらのメトリクスだけでは、ああいう細かい挙動までは拾いきれない。あなたが日頃、風や空気の流れで世界を読んでいる感覚と、たぶん近い言語のはずだ」
「あら、わたしでいいの?」
セレスは、少しだけ目を丸くしてから、それからにっこり笑った。
「いいわよ。前からね、フィオナさんのノートの『すべる感覚』というの、気になっていたの。わたしが風の流れで感じる『よどみ』に、ちょっと似ているなって。あの方なら、お話、楽しそうだもの」
カルクが心配そうにメガネを押し上げた。
「ぼ、僕じゃ、ダメでしたか……? 数式の最適化なら、たぶん、僕の方が……」
「お前にはカルクで頼みたい仕事がある」 俺はカルクの肩に手を置いた。「経済の式の作り直しだ。フィオナさんの方は、長く続く対話になる。お前を巻き込むと、たぶん、お前の方が先に壊れる」
カルクが、半分ほっとした顔をした。「……お気遣い、ありがとうございます」
「ふふ、わかった。フィオナさんのこと、お任せして」
セレスがゆっくり立ち上がった。空色の髪が、彼女の動きに合わせて、ふわりと揺れた。
観測者と観測者の橋渡し——前の世界でも、技術が違うチームをつなぐとき、いちばん効くのは「観測する目」が近い相手だった。専門は違っても、世界の見方が近ければ、会話は成立する。セレスとフィオナさんは、たぶん、その種の相性がいい。
* * *
「では、各自、明日までに自分の担当領域の詳細設計の骨子を出してくれ。明後日、もう一度集まる」
四人がうなずいた。
会議の終わりに、セレスが小さく手を挙げた。
「悠真くん、ひとつ、聞いてもいいかしら」
「なんだ」
「わたしたち、いつから、こうやって相談するようになったのかしら。前はね、わたしが何かを決めて、悠真くんが了承する、それだけだったの」
俺は少し考えた。
「いつからだったかな。たぶん、ダンジョンを直しに地上に降りたあたりからだ」
「ふふっ、いいことね。お天気も、明日はもっと晴れるかしら」
セレスが背景の空色を、少しだけ明るくした。
カルクがメガネをきらめかせて頭を下げた。ダンジが、最後まで腕を組んだまま、無言でうなずいた。ノードが「えーと……みんないい人たちですね」と小さくつぶやいた。
俺は、ホワイトボードを片づけながら、彼らの背中を見送った。
* * *
夜の管理層。
ダッシュボードのリソースモニタを開いた。世界全体の処理能力を100とした目盛りでの、現状のリソース消費量は82.4。
新世界の構築を始めれば、ここに追加の負荷が乗る。先ほどの四人の見積もりを、絶対量に置き直して足し上げる。
・新世界の骨格生成(地形・天候・経済・記録の各基盤を旧設計と並行で立ち上げる分):約12
・セレスの新天候系(旧設計と並行で動く分):約8
・カルクの新経済式(新指標「住人の健全性」関数を含む):約9
・ノードの二重記録(旧と新の両方を取り続ける):約11
合計でだいたい40。これが、新世界の構築期間中、現状の82.4に上乗せされて常時かかってくる。
82.4 + 40 = 122.4。上限100を、二割以上、超えてくる計算だ。
さらに、ダンジの「移行期間中は地形処理が2倍」が加わるピークでは、ホワイトボードに書いた「180前後」まで一時的に伸びる。ただ、全項目が同時にピークを打つわけじゃない。ピークがずれれば、平均は下がる。
地上のフィオナの最適化で10削れれば、瞬間最大が112.4。各サブプロセスからのさらなる削減を見込めば、100前後まで戻せる想定だ。瞬間的に上限を超えても、長く続けなければ世界は持つ。ぎりぎりの線だ。
「ぎりぎり」だ。
俺はモニタの数字を、しばらく見つめていた。
「ノード」
「はい」
「リソースが足りなくなる可能性は、ちゃんと頭に入れておこう」
「えーと……対策、ありますか」
「いくつかある。地上の最適化、移行スケジュールの後ろ倒し、不要な機能の段階的停止——でも、最後の最後で足りなくなったら、たぶん、別の選択肢が必要になる」
「えーと……別の、というと」
俺は答えなかった。
深層の最も奥に、300年前の記録点が眠っている。エルディアスが去る直前に残した、世界の状態の保存箱。あれを使えば、最悪、世界を「以前の状態」に戻すことはできる。
でも、それを使うのは、すべての他の手段が尽きたときだ。
「いまは考えなくていい。考えるべきは、足りるように、ちゃんと進めることだ」
「えーと……はい」
俺は深層への参照を、いったん閉じた。記録点のことは、今夜、自分の頭の中にだけしまっておく。サブプロセスたちを不安にさせる必要はない。ノードにすら、まだ全部は伝えていない。
最悪に備えるのは、管理者の仕事だ。だが、最悪を全員に共有することが、必ずしも最良の運用にはならない。前の世界でも、リーダーがすべての最悪を抱え込みすぎて、現場のモチベーションを下げてしまう例を、何度か見てきた。
次の復活まで、あと5日。
計画は、動き始めた。
お読みいただきありがとうございます。
【今回のIT用語】
カナリアリリース:新しいシステムを全体に展開する前に、まず一部の利用者だけに適用して問題がないかを確かめる手法を指します。「カナリア」は、かつて炭鉱で毒ガス検知のために小鳥のカナリアを連れて行った逸話に由来します。本作では、辺境の小さな村が「最初のカナリア」として新世界を試験稼働する役を担います。
ブルーグリーンデプロイ:稼働中のシステム(ブルー)を止めずに、別の場所に新しいシステム(グリーン)を完成させ、用意ができたら一気に切り替える運用手法です。本作の悠真がやろうとしているのは、世界規模のブルーグリーンデプロイです。現実のブルーグリーンデプロイは通常一つのサービス単位で行うもので、「世界全体」を対象にする規模感は本作独自の演出です。最大の難点は、両方を同時に動かす期間のリソースが通常の倍になること——これが今話の「ぎりぎり」の正体です。
次話「ひとつずつ、組み立てる」もよろしくお願いします。
感想・ブックマークいただけると励みになります。




