第25話「新しい設計図」
「世界の設計図を、ゼロから書き直す」
管理層の一番大きな作業画面に、俺は新しい白紙を一枚、出力した。
今までは、エルディアスが残したコードを読み、足りないところに手を入れてきた。修理だった。前任者の設計を尊重し、その範囲内でやりくりするのが、後任者としての慎みだと思っていた。
でも、終わる前提を取り除くなら、それでは足りない。
修理ではなく、再設計が要る。
決めたあとも、しばらく、白紙の前で動けなかった。前任者の設計を否定することへの後ろめたさが、思っていたよりも、自分の中で大きかった。エルディアスはたぶん、彼なりに精一杯やった。終わる前提で世界を作ったのは、彼の手抜きじゃなく、彼にとっての結論だった。それを書き直すというのは、彼の結論を否定するということでもある。
でも、彼自身が深層に残していた「すまない」「いつか直す」という言葉が、たぶん、書き直すことを許してくれている。彼自身、自分の結論に納得しきれていなかったのだ。
「ノード、まず、いまの世界の核を全部列挙してほしい。住人の生活に直接関わってる機能、影響範囲が大きい機能、両方」
「えーと……ぜんぶ、ですか」
「ぜんぶだ。漏れがあると、移行のときに必ず落ちる」
ノードがアーカイブを開いた。世界の機能一覧が、行を追って表示されていく。
ステータスの管理、レベルアップ処理、スキル発動、魔法API、ダンジョン生成、天候制御、季節の巡り、神託通知、転職・転生、住人の認証、戦闘判定、経験値計算、アイテムドロップ、商業流通、家畜と作物の育成記録、出産と死亡の記録、結婚と婚姻の記録、土地の名前と地形の更新、年代記録、暦——
「えーと……数えきれません」
「数える必要はない。まずは大きい五つを切り出す」
俺はホワイトボードの上に、五つの円を描いた。
住人の生活、戦闘と冒険、自然環境、流通と経済、記録と歴史。
その五つで、世界の表側の機能はほぼ覆える。あとは内部処理だが、それは表側を支えるための裏方として整理し直せる。
「この五つに整理した上で、もう一段、設計原則を立てる」
「えーと……原則、というと」
「『世界は終わらない前提で動く』。終了判定処理を持たない。劣化を前提にしない。代わりに、必要なら別の指標で世界の健全性を測れる仕組みを別途用意する」
俺はホワイトボードの隅に、原則を書き並べた。
原則一:世界は終わらない前提で動く。
原則二:判定の主体は装置ではなく、住人の生活そのものとする。
原則三:劣化は前提ではなく障害として扱う。直せるものは直す。
原則四:管理層は最小限の介入で動く。住人の自治の妨げにならない範囲で運用する。
原則五:終わらせる必要が出てきたとき、それを決めるのは住人の総意であり、装置ではない。
書き終えて、俺は腕を組んだ。
書いてみると、五行で済む。でも、この五行を実装するために、世界の半分以上を作り直さなければならない。
* * *
「ノード、いまの設計原則と、今の世界の実装を、項目ごとに突き合わせたい」
「えーと……はい。やります」
画面が二分割された。左に新しい原則、右に現状のコード。
突き合わせた結果は、見事なくらい、噛み合っていなかった。
原則一に対し、現行は終了プロセスが定期実行されている。
原則二に対し、現行は装置(魔王)による定期判定が組み込まれている。
原則三に対し、現行は劣化が「仕様」として組み込まれている。
原則四に対し、現行は深層に固定された判定ロジックがあり、後任者の権限では触れない部分が多い。
原則五に対し、現行は終了の主体が定義されていない(自動)。
全部、根幹レベルで違っていた。
「全項目、書き直す必要があるな」
「えーと……ぜんぶ、悠真さんおひとりで、ですか」
ノードが俺の顔を見上げた。
俺は少し黙った。
前の世界で、規模の大きな再設計を「ひとりでやろう」とした若い頃がある。徹夜して、図を描いて、コードを書いて、レビューも自分でして、結局、抜けがあちこちで噴出した。あのとき先輩に言われた言葉を、思い出した。
「大きい設計は、ひとりで持つな」
「ノード」
「はい」
「分担する」
「えーと……分担、ですか」
「五つの円。住人の生活、戦闘と冒険、自然環境、流通と経済、記録と歴史。それぞれ専門家がいる」
俺はホワイトボードの円に、担当者の名前を書き入れた。
住人の生活——リーゼル、ガルド。神官と冒険者ギルド長。地上の人と直接接している。
戦闘と冒険——アリア、カイル、フィオナ。勇者パーティ。戦闘の最前線。
自然環境——セレス。天候と季節を担当する管理層のサブプロセス。
流通と経済——カルク。計算と数値を扱う。経済の数式は彼が一番速い。
記録と歴史——ノード。お前だ。
ノードが、自分の名前を見つめた。
「……わたしが、ですか」
「お前が、世界のログを一番長く見てきた。歴史の連続性は、お前がいないと保てない」
「でも、わたし、忘れっぽくて——」
「お前は、忘れた分を抜きにしても、誰よりも記憶してる」
ノードは何度かまばたきをした。それから、小さくうなずいた。
「……はい。やってみます」
ノードに任せると決めたあと、俺は彼女の数千年分のログを思い浮かべた。半分壊れているとはいえ、世界の連続性をいちばん長く見てきたのは、間違いなく彼女だ。前の世界でも、誰よりも長くシステムを見てきた運用担当が、いちばん芯のあるドキュメントを書いた例を、何度か見ている。経験の長さは、ときどき、能力の正確さよりも頼りになる。
「ダンジは——」
俺は手を止めた。ダンジョンの再設計は、ダンジに任せる必要がある。だが、ダンジョン生成は「戦闘と冒険」の中にあり、独立した円にはなっていない。整理し直す必要がある。
「もう一つ円を足す。地形と建造物。ダンジが担当」
ホワイトボードに、六つ目の円を描いた。
* * *
「ノード、それぞれの担当に集まってもらえるか」
「えーと……地上の方も、ですか」
「最初は管理層側だけでいい。セレス、カルク、ダンジ、お前。設計の骨子を四人で固めてから、地上に下ろす」
「はい。声をかけます」
ノードがアーカイブを操作した。
管理層の三人のサブプロセスに、招集の通知が走った。
声を上げてはいけない、と感じるくらいの静けさが、管理層の一角に降りた。今までは俺ひとりが運用を回してきた。これから先は、俺と、彼ら四人で、世界の作り直しを進める。
俺は深呼吸をした。
* * *
その夜、招集に応じる前のひととき、俺は深層の最も奥まった画面を開いていた。
以前、設計書の前半を読んだ場所。読み終えていない章——『4. 終了処理について』『5. 後任者への申し送り』が、まだ残されている。
今日、開くつもりはなかった。でも、目次の隣に、新しい一文が浮かんでいるのに気づいた。
たぶん、俺がこの章を開ける条件——「設計を変える準備ができた」——を、システムがいつの間にか満たしたと判定したんだろう。
俺は『5. 後任者への申し送り』を、ゆっくりと開いた。
最初の一行に、こう書かれていた。
『次に来る者へ。すまない』
俺は、しばらく、その一行から目を離せなかった。
深層のどこかで、何度も見てきたコメントと同じ言葉。エルディアスが、後任者に宛てて残した最後のメッセージ。
「ノード」
「はい」
「俺たちは、ひとりで世界を背負うつもりはない」
「……はい」
画面の中の文字に、俺は小さくつぶやいた。
「あなたは、ひとりで背負って、限界が来たんだろう。俺は、同じ轍は踏まない」
画面は何も返してこなかった。
でも、書かれた言葉が、たしかに残っていた。
言葉は、書いた人がいなくなっても、残る。前の世界でも、辞めた先輩のドキュメントに何度も救われた。書いた本人はもういなくても、書いた言葉が、未来の誰かを助ける。エルディアスの「すまない」も、たぶん、そういう種類の言葉だった。
お読みいただきありがとうございます。
【今回のIT用語】
設計原則の言語化:大規模なシステムを作り直すとき、コードを書き始める前に「このシステムは何のために動くのか」「何を前提とし、何を前提としないのか」を文書化することが、SRE・設計者の最初の仕事です。本作の五つの原則は、世界という巨大システムを再設計するための土台として、悠真がまず書き出したものです。コードより先に、原則が要ります。
設計と実装のギャップ分析:新しい設計原則を立てたあと、現行の実装が原則からどれだけずれているかを項目ごとに突き合わせる作業を「ギャップ分析」と呼びます。すべての項目で噛み合っていない、というのは絶望的に見えますが、SREの現場ではよくあることです。ギャップが大きいほど、再設計の意義が明確になります。
次話「みんなで作り直す」もよろしくお願いします。
感想・ブックマークいただけると励みになります。




