第4話 術式干渉(コンフリクト)を恐れるな
「ひゃあぁぁぁっ! あ、アイザック先輩! 魔導書が……魔導書が真っ二つに裂けちゃいましたぁぁっ!」
ルミナの悲鳴が、第一編纂室の静寂を切り裂いた。
部屋の中央の台座に鎮座する【原典大魔導書】の第七章三十四ページ。
先ほどまで美しく整っていたはずの羊皮紙の上に、まるで傷口から吹き出したかのような禍々しい赤紫色の放電がバチバチと火花を散らしている。
その紙面に刻まれていたのは、誰も見たことのない奇妙な魔力文字の断絶だった。
――――――――――――――――
<<<<<<< HEAD (本流:ルミナが高速展開用に書き換えた共通循環節)
魔力励起循環節・風華流動式第七項(流速三倍加速)
=======
魔力励起循環節・火炎凝縮式第七項(熱量圧縮優先)
>>>>>>> feature/fireball-eco (テオが燃費向上用に書き換えた共通循環節)
――――――――――――――――
「お、俺のせいです……!」
同僚の若手魔導士テオが、青ざめた顔で両手で頭を抱え、その場に崩れ落ちた。
「俺が……調子に乗って火炎球の節約呪文なんて合体させようとしたから……! ルミナさんの素晴らしい防御魔法を壊して、大魔導書を呪い殺しちまったんだ……!」
「がっはっはっは! 見よ、この無様なザマを!」
部屋の最奥の執務席から、待ってましたと言わんばかりにバルカス室長が立ち上がった。
太い腹を揺らし、下卑た笑みを浮かべて中央の台座へとズカズカと大股で歩み寄ってくる。
「平行世界じゃと? 自由に実験じゃと? 笑止千万! 別々の枝で勝手気ままに弄くり回した呪文を無理やり一つにねじ込もうとするから、魔導書が拒絶反応を起こして腐食したのじゃ! 術式同士が互いを喰い合い、文字が化け物のように裂けておるではないか!」
バルカスは勝ち誇ったように杖を突き立て、編纂室の全員を見回した。
「古来より魔導書は一意専心、一人の大魔導士が一貫した魂で書き上げるべしと定められておる! 下級魔導士どもが群れをなして勝手に書き散らかせば、こうして破滅を招くのだ! アイザック、貴様の小細工は所詮、魔導の神聖な調和を乱す邪法に過ぎんかったのじゃ!」
バルカスの怒声に、ルミナは涙目で震え、テオは床に額を擦り付けるようにして項垂れていた。
周囲の若手魔導士たちも「やっぱり、みんなで同時に呪文を改良するなんて無理だったんだ……」「大魔導書が壊れたら死刑だぞ……」と、絶望的なざわめきに包まれていく。
だが。
そのパニックの渦中において、アイザックだけは――深く、安らかな息を吐いていた。
(……やれやれ。バルカス室長は『術式が喧嘩して魔導書が死んだ』と喜んでいるが、完全に逆だな)
アイザックは手にした黒革の手帳『クロノス・ターミナル』の紙面を軽く指先で払った。
前世で、Gitを触り始めたばかりの新卒エンジニアが「画面に謎の不等号が出てシステムを壊しました!」と涙目で駆け込んできた光景が思い出され、口元が微かに緩む。
「ルミナさん、テオくん。顔を上げてください」
アイザックの澄んだ穏やかな声が、部屋の空気をスッと鎮めた。
「大魔導書は呪われてもいませんし、死んでもいません。むしろ、魔導具が正常に機能して、あなた方の尊い成果を守り抜いた証拠です」
「え……?」
ルミナが丸眼鏡を涙で濡らしながら、信じられないといった顔でアイザックを見上げた。
「ま、守ってくれた……? でも先輩、魔導書の上に変な矢印と横線が浮かび上がって、ページが石みたいに固まって動かないんですよ……!?」
「固まって当然なんですよ、ルミナさん」
アイザックは中央大魔導書に歩み寄り、赤紫色に光る文字の境界を優しく指し示した。
「もし、この仕組みが存在しなかったらどうなっていたと思いますか? ルミナさんが先に苦労して刻み込んだ『風華結界』の美しい術式の上に、テオくんの『火炎球』の術式が、何の警告もなく上書きされて消え去っていたはずです」
「あ……」
テオがハッと息を呑んだ。
「その通りです。二人の呪文は、一見すると『風の結界』と『火の玉』で全く別物に見えます。ですが、どちらも魔力を生み出す根底の部分――第七章三十四ページにある【共通魔力励起循環節の第七項】という、王国魔導の土台となる共通の術式を書き換えていました」
アイザックは手帳の余白に、二本の光の線を空中に描いて見せた。
「ルミナさんは、結界の展開速度を上げるために『魔力の流速を三倍にする式』を書いた。テオくんは、火球の燃費を改善するために『熱量を圧縮して消費を抑える式』を書いた。……さて、魔導書からすればどうでしょう? 同じ行、同じ循環節に対して、全く正反対の要求を持った二つの命令が同時に届いたんです」
「あっ……!」
ルミナの瞳に、理解の光が宿る。
「魔導書は、決して二人を拒絶したわけではありません。『ルミナの術式もテオの術式も、どちらも素晴らしい。勝手にどちらか一方を消去して捨てることなど、私にはできない。だから、人間がどちらを採用するか、あるいはどう合体させるかを決めてくれ』――そう言って、自動統合の足を止めてくれたんです」
アイザックはバルカスへ視線を向け、静かに言った。
「もしこれを『喧嘩』と呼ぶなら、室長。かつてあなたが行った『無言で他人の修正を塗り潰す行為』は、ただの夜盗の略奪ですよ。システムが立ち止まり、人間に選択を委ねてくれることこそが、最も高度な安全機能なんです」
「ぐ、ぐぬぬ……! へ、屁理屈を……! だが、現に魔導書は固まっておるではないか! どうやってその化け物のような文字を消すというのだ!」
バルカスが顔を真っ赤にして喚く。
「簡単ですよ。――これより、【術式干渉】の解消儀式を行います」
アイザックは手帳を水平に掲げ、ルミナとテオを手招きした。
「さあ、二人とも大魔導書の前へ。この赤紫色の文字の読み方を教えます」
「は、はいっ……!」
ルミナとテオが、緊張した面持ちで大魔導書を覗き込む。
「まず、この 「<<<<<<< HEAD」 という記号。これは【現在の本流】……つまり、ルミナさんが先に合流させた最新の呪文の始まりを示しています」
アイザックの指先が、中間の 「=======」 をなぞる。
「そしてこの横線が、境界線です。上半分がルミナさんの書いた『流速三倍加速の式』。そして下半分から 「>>>>>>> feature/fireball-eco」 までが、テオくんが新しく持ち込もうとした『熱量圧縮の式』です」
「なるほど……! 上が私ので、下がテオさんの式……!」
「俺の書いた式も、消されずにちゃんと残ってる……!」
二人の顔に、パッと安堵の色が広がった。
「そうです。システムは一切の情報を捨てていません。さて、ここからが魔導士の腕の見せ所です」
アイザックは二人に羽根ペンを手渡した。
「【術式干渉】を解決する方法は、大きく分けて三つあります」
アイザックは指を一本立てた。
「一つ目は、ルミナさんの式を採用し、テオくんの式を取り下げること」
「う……」とテオが少し肩を落とす。
「二つ目は、逆にテオくんの式を採用し、ルミナさんの式を諦めること」
「うぅ……」と今度はルミナが眉を寄せる。
「そして三つ目――二人の術式の意図を両方汲み取って、どちらの望みも叶える『第三の統合式』を、二人で協力して新しく書き直すことです」
「「第三の統合式……!!」」
二人の声が重なった。
「二人とも、どちらかを諦めたいですか?」
アイザックが優しく問いかけると、ルミナとテオは顔を見合わせ、力強く首を横に振った。
「諦めたくありません! テオさんの火球の燃費改善、すごく画期的で素晴らしいんです! 私の結界のために消しちゃうなんて絶対に嫌です!」
「俺だって、ルミナさんの風華結界の展開速度に感動したんです! 俺のせいでルミナさんの努力を無駄にしたくありません!」
「いい返事です」
アイザックは満足そうに微笑んだ。
(前世のチーム開発でも一番尊い瞬間だな。お互いのコードをリスペクトし合い、コンフリクトを契機に対話が生まれる)
「では、術式の設計を見直しましょう。テオくん、あなたの熱量圧縮式は、なぜルミナさんの流速加速式とぶつかったんですか?」
「ええと……火の魔力を小さく凝縮させるために、魔力の通り道をあえて細く絞る数式を使っていたんです。でも、それだとルミナさんの『風を素早く通すために通り道を広げる式』と矛盾しちゃって……」
「なるほど。ルミナさん、どう思いますか?」
「えっと……! 通り道を最初から細くするんじゃなくて、私の風の流動式で魔力を高速で送り込んだ『出口の直前』で、テオさんの熱量圧縮陣を通せばいいんじゃないでしょうか!? 風の勢いを利用して、外側から魔力をギュッと押し固めるんです!」
「ああっ……!!」
テオが目を見開いた。
「それだ! 風圧で外側から熱を包み込めば、魔力の通り道を狭めなくても、勝手に極限まで熱量が圧縮される……! それなら通り道の広さはルミナさんの流速三倍のままでいい!」
「素晴らしいアイデアです、ルミナさん、テオくん!」
アイザックが手を叩いた。
「では、二人の知恵を合わせた新しい統合循環式を書き込みましょう。そして――一番大切なことですが、あの邪魔な 「<<<<<<<」 や 「=======」 や 「>>>>>>>」 の境界記号は、一文字残らず綺麗に消去してくださいね」
「はいっ!」
ルミナとテオは、一本の羽根ペンを交互に握り、肩を並べて大魔導書に向き合った。
境界の記号を魔力インク消しで綺麗に拭い去り、二人の合作となる、洗練された黄金の幾何学陣を中央に描き込んでいく。
風の流動によって加速され、直後に対流によって極限まで圧縮される――流速三倍、熱効率三倍を両立する、奇跡のハイブリッド魔力循環式。
最後のルーンが書き終えられた瞬間、アイザックは手帳を掲げた。
「――術式干渉の解消を確認。コマンド【統合完了刻印】!」
カチリ、と美しい鐘の音が室内に響き渡った。
中央大魔導書を覆っていた赤紫色の放電が、霧が晴れるようにスーッと消滅した。
代わりに、第七章三十四ページの紙面全体から、柔らかな、神々しいばかりの黄金の魔力光が立ち上った。
衝突は解消された。
二つのブランチは、完全なる調和をもって本流へと合流したのだ。
「消えた……! 光の乱れが消えて、黄金に輝いてる……!」
「統合……成功したんだ……!!」
ルミナとテオが、手を取り合って飛び跳ねて喜んだ。
「ふ、ふん! 見た目だけは綺麗になったようだがな!」
面白くないバルカスが、鼻を鳴らして割り込んできた。
「風と火の相反する術式を無理やり継ぎ接ぎしたのだ! どうせ魔力を流した瞬間、中で暴発して不発に終わるに決まっておるわ! おい、そこの訓練用ゴーレムに向けて術式を試射してみよ!」
「言われなくても試射しますよ。テオくん、新しい循環式で、火炎球を放ってみてください」
「は、はいっ!」
テオは編纂室の防壁の向こうにある、分厚い鉄板をまとった訓練用ゴーレムに向き直った。
杖を構え、新しく統合された第七章三十四ページの魔力を引き出す。
「――【火炎球】!!」
轟ッッッ!!!!
その瞬間、編纂室の空気が激震した。
杖先から放たれたのは、従来の火炎球のような鈍重な火の玉ではなかった。
ルミナの暴風循環によって音速を超えて加速され、テオの圧縮式によって白熱化された、超高密度のプラズマ光弾。
目にも留まらぬ速さで空間を突き抜けた光弾は、訓練用ゴーレムの分厚い装甲に着弾した瞬間――
『――ドッッッガァァァァァァン!!!!』
凄まじい衝撃波と爆風が吹き荒れ、鉄製の頑強なゴーレムが上半身ごと粉々に吹き飛んだ。
爆煙が晴れた後には、赤熱してドロドロに融解した鉄くずが転がっているだけだった。
「「「「――――なっ!?」」」」
編纂室にいたすべての魔導士が、顎が外れんばかりに目を見張り、言葉を失った。
「ば、馬鹿な……! 下級魔法の火炎球じゃぞ……!?」
バルカスがパイプを床に落とし、ワナワナと震える指で破壊されたゴーレムを指差した。
「初級魔導が……上級の極大爆炎魔法に匹敵する威力を叩き出したというのか……!? あんな術式、見たことも聞いたこともないぞ……!!」
「えへへ……テオさん、やりましたね!」
「ルミナさんのおかげです! 信じられない威力だ……!」
若手二人はハイタッチを交わし、満面の笑みを咲かせていた。
一人の天才の勘ではなく、チーム全員の知恵の統合。
コンフリクトを恐れず、互いの意図をすり合わせたからこそ生まれた、未曾有の魔導イノベーションだった。
沸き立つ室内。
しかし、その歓喜の輪の中で、アイザックは一人、静かに手帳を見つめて思考を巡らせていた。
(……結果は最高だった。だが、運が良かったとも言える)
アイザックは前世のエンジニアとしての冷静な視点で、今回の事象を客観的に分析していた。
(今回は僕がその場にいて、ルミナとテオという素直で優秀な二人が対話できたから、綺麗なマージができた。だが、もし魔導士の数が何十人、何百人に増えたらどうなる? 誰かが変なコンフリクト解消をして、壊れたコードをそのまま本流(main)に強制プッシュしたら、王都の魔力炉は今度こそ即死する)
自由なブランチ開発と、安全なマージ。
その二つを両立させるために、現代のソフトウェア工学が導き出した「絶対不可欠な関門」が、まだこの世界には存在しない。
アイザックは手帳をパチンと閉じ、全員に向き直った。
「みなさん、よく聞いてください」
凛としたアイザックの声に、歓声を上げていた若手魔導士たちがピタリと静まり、姿勢を正した。
「今回の成功は素晴らしいものでした。ですが、誰もが勝手に本流へ呪文を統合できる今の状態は、あまりにも危険すぎます。そこで明日から、王立魔導院に新しいルールを制定します」
「新しい……ルールですか?」
ルミナがおずおずと尋ねる。
「ええ。――【統合申請】と【魔導査定】の義務化です」
アイザックの瞳に、エンジニア組織のリーダーとしての揺るぎない覚悟が宿っていた。
「どんな天才が書いた呪文であっても、仲間の魔導士の客観的な審査を通らなければ、本流の大魔導書には一文字たりとも合流させません」
◆【今話のITまめ知識:コンフリクトは「怖いエラー」ではなく「守護神」】
第4話のテーマとなった「コンフリクト(競合・術式干渉)」。
Git初心者が最も恐れ、パニックになりやすい現象ですが、実は開発者を守る最高の安全装置です。
◆1.なぜコンフリクトが起きるのか?
作中のルミナとテオのように、「同じファイルの同じ行」を、別々のブランチで同時に書き換えたときに発生します。
Gitは非常に賢いので、違う行の変更であれば自動的に綺麗に合体してくれます。
しかし「同じ行に矛盾する変更」が届いた場合、Gitは「勝手にどちらかを消すわけにはいかない」と判断し、人間に判断を委ねるために停止します。
◆2.コンフリクトマーカーの読み方
コンフリクトが起きると、ファイルの中に以下のような記号が自動挿入されます。
――――――――――――――――
<<<<<<< HEAD
(いま自分がいるブランチ・本流のコード)
=======
(新しく合流させようとしている相手のブランチのコード)
>>>>>>> feature/xxx
――――――――――――――――
この不等号やイコールに囲まれた部分を見比べながら、「どちらを採用するか」、あるいは「両方の良いところを合わせた新しいコードにするか」を人間が決めて書き直します。
◆3.コンフリクトはチームの対話を生む
作中でアイザックが言った通り、コンフリクトは決して「誰かの失敗」ではありません。
複数のメンバーが同じ機能や共通モジュールを同時に良くしようとした結果です。
「どうしてここを変えたの?」「じゃあこう合体させよう!」と対話を行うことで、一人では作れなかった最高品質のコードが生まれるのです!




