朝食の席で、三通の伝書が届いた。
工房のテーブルに並べた羊皮紙を、リオンは順番に読み上げる。
「ブラント村。『通信魔法陣の伝送が遅く、隣村への連絡に半日かかる。至急確認されたし』」
「ミルデ村。『先日修繕いただいた農地魔法陣は好調だが、通信魔法陣の応答が極端に遅い。返信が届くまで丸一日かかることがある』」
「カーレン村。『通信が途絶することがある。魔獣の目撃情報を共有できず困っている』」
三通を並べて、リオンは腕を組んだ。
「……三つの村から、同時に通信障害の報告」
エルナがパンをかじりながら首を傾げた。
「同時、ですか? 偶然じゃなくて?」
「偶然で三つの村が同じタイミングに同じ症状を出すことは、まずない」
リオンは巻物を広げ、以前描いた辺境の魔法陣ネットワーク図を指でなぞった。ルーンフェル村を中心に、ブラント村、ミルデ村、カーレン村、ハーゼル村が魔力パスで繋がっている。各村の通信魔法陣が発した信号は、中継ノードを経由して目的地に届く仕組みだ。
「三つの村に共通する経路がある。ここ、ブラント村の中継ノード」
リオンの指が、図の一点を叩いた。
「全部の通信が、ここを通ってる」
三人でブラント村へ向かう畦道。秋の風が黄金色の麦畑を撫でていく。
「リオンさん、中継ノードってなんですか?」
エルナが隣を歩きながら聞いてきた。工房で座学を受けるようになってから、わからないことを素直に聞くようになった。
「通信魔法陣は直接遠くの村に信号を飛ばせない。途中に中継地点を置いて、バケツリレーのように信号を渡していくんだ」
「じゃあ中継地点が詰まると、全部の通信が遅れる?」
「正解」
後ろを歩いていたドルクが、ぼそりと口を開いた。
「道が一本しかないところに荷馬車が集中してる、ってことか」
「ドルクさん、その例え完璧です」
「……ふん」
ブラント村に着いたのは昼前だった。
村の広場にある通信魔法陣の前で、リオンは【診断】を発動した。
目の前に、魔力の流れが可視化される。
通信魔法陣から伸びる魔力パスが四方に走り、各村へと繋がっている。中継ノード——村の広場の地下に埋め込まれた石板の集合体——が、すべての通信を一手に受けて処理している。
「……やっぱりか」
リオンは目を細めた。
中継ノードの負荷は、処理限界の九割を超えていた。魔力の流れが滞り、信号の伝送に著しい遅延が発生している。前世の言葉で言えば——。
「ボトルネックだ」
「ぼとるねっく?」
エルナが復唱した。
「瓶の首。液体を瓶から出すとき、首のところが細いから流れが制限される。それと同じで、このノードの処理能力が足りなくて、全体の通信速度がここで頭打ちになってる」
「でもリオンさん、この魔法陣が作られた頃は問題なかったんですよね?」
「この中継ノードが設計された時代は、通信量が今よりずっと少なかった。でも最近は工房の業務で村同士の連絡が増えた。つまり……僕たちのせいでもある」
「え!?」
「インフラが通信量の増加についていけてないんだ」
ドルクが腕を組んで石板を見下ろした。
「で、どうする」
リオンは白紙の羊皮紙を地面に広げ、図を描き始めた。
「今の構成はこう。全部の通信がブラント村の中継ノード一箇所を通っている。スター型トポロジーの」
エルナとドルクが揃って怪訝な顔をしている。
「……一箇所に集中してる、ってことです」
「最初からそう言ってください」
リオンは苦笑しつつ、解決策の図を描いていく。中継ノードを複数に分散させ、通信の行き先に応じて最も負荷の少ないノードに振り分ける。描きながら、手が加速していった。
「まずラウンドロビンで振り分けて……いや、各ノードの処理能力が違うなら重み付けが要る。ウェイテッドラウンドロビンにして……でも通信の種類によって処理負荷が変わるから、L4スイッチ的な振り分けロジックも——」
「リオンさん」
「リアルタイムの負荷監視も入れて、レイテンシベースのルーティングで最適な」
「リオンさん!」
エルナの声で我に返った。
見ると、エルナもドルクも、完全に置いてけぼりの表情だった。
「……何語ですかそれ」
エルナが半眼で言った。
「さっぱりわからん」
ドルクが腕を組んだまま、淡々と追い打ちをかけた。
リオンは赤くなって頭を掻いた。
「すみません……興奮すると前の世界の言葉が出ちゃうんです」
深呼吸。
リオンは羊皮紙の余白に、改めて図を描き直した。今度は二人にわかる言葉で。
「いいですか。今の問題を荷馬車で例えます」
ドルクが「おう」と頷いた。彼にはこの例えが一番通じる。
「今、辺境の全部の荷馬車が一つの橋を渡ってる。橋は一本しかない。荷馬車が増えたから、橋の上が渋滞してる。これが今の状態」
「だったら橋を増やせばいい」
「そう。でも、ただ橋を増やすだけだと、全員が新しい橋のほうに殺到して、今度はそっちが渋滞する。だから」
リオンはペンで図を叩いた。
「振り分け役が必要なんだ。橋の手前に立って、『こっちの橋は空いてますよ』『あっちは混んでるからこっちへ回ってください』って案内する人。それが——」
言葉を選ぶ。IT用語を抑えて、この世界の言葉で。
「魔力分散陣。通信の流れを見て、空いているほうの中継ノードに自動で振り分ける魔法陣です」
エルナの目が輝いた。
「つまり、交通整理をしてくれる魔法陣……!」
「そういうこと」
「なるほどな」ドルクが顎を撫でた。「で、その分散陣ってのは、どうやって作る」
リオンはペンを止めた。
ここからが本題だ。
「まず、中継ノードを追加で二つ作ります。一つはルーンフェル村とミルデ村の中間地点。もう一つはカーレン村寄りの丘の上。これでブラント村のノードと合わせて三つになる」
「石板は要るのか」
「要ります。ドルクさんに刻印板を三枚追加で打ってもらいたい。あと、振り分けの制御用に小さい刻印板が一枚」
ドルクは「ふむ」と低く唸った。
「図面は」
「これから描きます。今日中に」
「なら明日には打てる」
職人の返事は潔い。リオンは心の中で感謝しながら、エルナに向き直った。
「エルナ、振り分けの仕組みを魔法陣に実装する方法なんだけど」
「はい」
「各中継ノードの魔力残量を、分散陣がリアルタイムで感知する必要がある。魔力操作で、各ノードとの間に細い魔力パスを通してもらえるか? 常時接続で、ノードの負荷状態を流してくる感知用の回線」
エルナは少し考え込んでから、手を握ったり開いたりした。彼女が魔力の感覚を確かめるときの癖だ。
「……できると思います。ノードの魔力の揺らぎを拾って、分散陣に戻すんですよね。感覚的には——各ノードの脈拍を測るような感じ」
「その例え、すごくいい。まさにそう。ヘルスチェックだ」
「へるすちぇっく?」
「各ノードが元気かどうか、定期的に確認する仕組み。それを基に、元気なノードに多く振り分けて、調子が悪いノードには少なく振り分ける」
エルナはぱあっと表情を明るくした。
「わかります! 感覚的にはわかります! ノードが疲れてたら休ませて、元気なほうに回す——」
「完璧。それを魔法陣の仕組みとして組み込む」
設計は午後いっぱいかかった。
集会所を借りて図面を引くリオンの隣で、エルナが魔力の流れを感覚で確かめる。「ここのパスは細すぎます」「この角度だと魔力が減衰します」。理論と感覚が噛み合う瞬間だった。
図面を受け取ったドルクが、黙って眺めてから赤を入れた。
「刻印の深さ、ここは0.3ミルのほうがいい。石板の目に沿って刻めば、同じ深さでも伝導率が変わる」
リオンは目を見張った。【診断】では見えない領域。素材を何十年も触ってきた職人だけが持つ知見だ。
「ドルクさん、それ、すごく重要です。図面に反映させてください」
「おう」
翌日。ドルクが仕上げた四枚の刻印板に【診断】をかける。精度、伝導率、設計との一致、すべて問題なし。修正箇所はむしろ当初の設計より性能が上がっている。
「完璧です、ドルクさん」
「当然だ」
午後、設置作業。既存中継ノードに分散制御板を追加し、二箇所に新設ノードを埋設する。エルナが各ノード間に魔力パスを通していく。
「感知用パス、接続完了です。各ノードの魔力状態が分散陣に流れ込んでます」
「よし。じゃあテスト通信を送る」
リオンはブラント村の通信魔法陣から、試験信号を三つ同時に送出した。ルーンフェル村宛、ミルデ村宛、カーレン村宛。
【診断】で魔力の流れを追う。
信号が分散陣に到達し——三つの中継ノードに振り分けられていく。ブラント村のノードにルーンフェル村宛が、新設の中間ノードにミルデ村宛が、丘の上のノードにカーレン村宛が、それぞれ流れていく。
「分散してる……!」
エルナが声を上げた。彼女の目にも魔力の流れが見えているのだろう。感覚派の魔術師にとって、魔力の動きは肌で感じ取れるものだ。
「各ノードの負荷は……」リオンは【診断】の数値を読み上げた。「ブラント村ノード、負荷35%。中間ノード、負荷28%。丘上ノード、負荷31%」
以前は90%超だった負荷が、三分の一に分散されている。
「ドルクさん、刻印板の状態は」
「問題ない。振動もない。安定してる」
リオンは深く息を吐いた。
「——成功です」
夕暮れ。
ブラント村の集会所で、村長に報告をした。
「通信の遅延は解消されるはずです。今後は三つの中継ノードで分散処理されるので、一箇所に負荷が集中することはなくなります」
村長は目を丸くした。
「もう直ったのか? 昨日来たばかりじゃないか」
「原因の切り分けができていれば、対応は早いんです。手順書は後日お届けします」
エルナが「また手順書……」と小声で呟いたが、リオンは聞こえないふりをした。
集会所を出ると、秋の夕空が橙色に染まっていた。三人で畦道を歩く。
「リオンさん」
「ん?」
「さっきの……らうんどろびん? とか、えるよんすいっち? とか。あれ、全部前の世界の言葉なんですか?」
「ああ、うん」リオンは照れくさそうに頭を掻いた。「ロードバランサーっていう仕組みがあって——交通整理係みたいなものなんだけど、その振り分け方にいくつか種類があるんだ」
「種類?」
「ラウンドロビンは順番に振り分ける方式。一番目はAへ、二番目はBへ、三番目はCへ、四番目はまたAへ……って」
「それだと、重い荷物も軽い荷物も同じに扱っちゃいません?」
リオンは足を止めた。
「……エルナ、君もう僕の説明いらないんじゃない?」
「え? いや、感覚で思っただけで」
「それが正しいんだよ。だからウェイテッド——重み付けの仕組みが必要になる。各ノードの処理能力に応じて、振り分ける量を変えるんだ。今回はそれを採用した」
エルナは「へえ」と感心した声を上げた。それから少し誇らしげに笑った。
「私、ちょっとわかるようになってきたかもしれません」
「座学の成果だな」
「リオンさんの説明が上手いからですよ」
ドルクが後ろから、短く鼻を鳴らした。
「……何ですか、ドルクさん」
「何も言ってない」
帰り道、ミルデ村とカーレン村にも立ち寄った。どちらも通信の応答速度が劇的に改善していた。
カーレン村では、農夫が魔獣の目撃情報を送信して目を丸くした。
「おお、速い! 送ったらすぐ返事が来たぞ!」
「今までの十分の一くらいの遅延に抑えられてるはずです」
「ありがてぇ……! これで魔獣の情報がすぐ共有できる」
通信インフラの改善は日常の安全に直結する。地味だが、現場では切実に必要とされる仕事だ。
工房に戻ったのは、日がすっかり暮れてからだった。
エルナがスープの入った器を差し出す。リオンは一口すすって、ほっと息をついた。
「明日、手順書を仕上げます。各ノードの点検方法と、分散陣の設定変更手順」
「もう明日の仕事の話してる……」エルナが呆れたように笑った。
「定時で帰るんじゃなかったんですか?」
「帰ってますよ。ここが工房兼自宅なので、帰宅済みです」
「それは屁理屈です」
ドルクがスープを啜りながら、ぼそりと言った。
「嬢ちゃんの言う通りだな。手順書は明後日でいい。十分やった」
リオンは口を閉じた。前世の自分なら「今日中に」と思っただろう。でもそれが、過労死への道だった。
「……わかりました。明後日にします」
エルナが嬉しそうに微笑んだ。
夜。自室のベッドで天井を見つめる。
前世なら、ロードバランサーの導入に提案書、承認、発注、検証、本番反映で三ヶ月はかかる案件だ。それを二日でやった。しかも一人じゃない。エルナが魔力パスを通し、ドルクが刻印板を打ち、三人で設置した。
「……いいチームだな」
前世の九条諒は、一人で抱え込んで倒れた。今は違う。エルナは感覚で核心を突き、ドルクは素材の知見で設計を補正する。リオンにはない力を持つ二人がいる。
一人に依存しない体制。前世でずっと目指していたものに、少しずつ近づいている。
定時で帰るために、今日はもう寝よう。
翌朝。
リオンが工房に降りると、エルナがすでに来ていた。テーブルの上に羊皮紙を広げて、何かを書いている。
「おはよう。早いね」
「あ、おはようございます。えっと、これ」
エルナが差し出した羊皮紙には、昨日の作業内容が箇条書きで記されていた。中継ノードの設置場所、魔力パスの接続方法、分散陣の動作確認手順。
「……手順書?」
「あの、まだ全然ちゃんと書けてないんですけど……リオンさんがいつもやってるのを見て、私もやってみようかなって」
リオンは羊皮紙を受け取り、目を通した。
書式は我流で、用語も怪しい。でも——必要な情報は網羅されていた。感覚派のエルナが、論理的に手順を整理しようとしている。
「エルナ」
「は、はい。ダメですか?」
「すごくいい。骨格は十分だ。特に魔力パスの接続手順は、僕が書くより実践的だ」
「ほ、本当ですか!?」
「本当。ありがとう」
エルナは耳まで赤くなって視線を逸らした。
「べ、別に……リオンさんが『手順書は?』ってうるさいから」
「うるさくて結構」
リオンは笑いながらペンを取り、エルナの手順書に赤字を入れていく。鍛冶場からドルクの金槌の音が聞こえてくる。
穏やかな朝だった。辺境の小さな工房で、魔法インフラを支える三人の日常。
リオンはふと窓の外を見た。秋の空は高く、澄んでいた。
——だが、この穏やかな日々がいつまでも続くとは限らない。
工房のテーブルの隅に、まだ開封していない伝書が一通あった。差出人はベルクハルト辺境伯の執事。内容は——「防壁魔法陣の挙動がおかしい。至急相談したい」。
リオンはまだ、その伝書に気づいていなかった。
【あとがき】
IT用語ダダ漏れ回。ロードバランサーを「橋の交通整理係」に翻訳するリオンの苦労は、エンジニアなら共感できるはず。