第1章 異世界Gitに転生!魔法術式がバグりまくってる件
ふと気づくと、パソコンのディスプレイに映っていた青白い光が遠のいている。
いや、意識が遠のいているのかもしれない。
そもそも今が何時かもわからない。深夜残業どころか、三日徹夜コースなんて当たり前になって久しい。
俺の名前は天城創也、ブラック企業の社畜SEだ。仕事場の蛍光灯がチカチカ点滅してるのを見ながら「まじで寿命縮むぞ」と思っていたはずなのに、まぶたが閉じる感触に抗えなくなってきた。
「納期?昨日までだけど?」と悪夢のような上司の声が頭をぐるぐる回る。タイムリミットどころか、もはやタイムトラベルが必要なレベルだ。大量のエラーメッセージを眺めながら、「もう笑うしかないって…」と苦笑した記憶がある。
結局この状況を打開できないまま、俺はデスクに突っ伏して――そこで完全に意識がブツッと切れた。
そして次に目を開けると、床の冷たさとざらつきを感じる。
コンクリートの床……いや、これ、石畳か?視界に広がるのは中世ヨーロッパみたいな町並み。時計なんて見当たらない。
俺がさっきまでいたオフィスは……どこだ?まさか、寝ぼけて観光地のセットの上にでもいるのか?そんなありえない思考が頭を巡るが、耳に入ってくるのは悲鳴と怒号と、かすかな焦げたにおい。火薬とは違う。もっと生々しい、燃え盛る炎の嫌なにおいだ。
「おい、大丈夫か!」
急に声をかけられて顔を上げる。そこには妙に若い少女……いや、俺から見ればかなり年下の女の子が心配そうにのぞき込んでいる。
長い金髪をツインテールにまとめた彼女が、汗で額に貼りついた前髪を手の甲で拭っているのが目に入る。服装は見たことのない世界観……これは本格的にどこかのテーマパークか?でも、町のあちこちで家が崩壊しかけ、赤い火の玉が上空から降ってきている現実感に「演出か?」なんて気楽なことを考える余裕はない。
「炎が……やばいよ。逃げないと!」
彼女――あとでリナと名乗るとわかるが、その子が必死に手を差し伸べてくる。
訳がわからないままだけど、とにかく体を起こす。頭がズキズキするし全身が重い。仕事疲れが完全に抜けてない感じだ。なんで眠った先がこんな惨状なんだ?
「ここ、どこだ?」
思わずそう問いかけると、リナは血相を変えて周囲を見回す。
「魔法が暴走してるの。これじゃ町が全部燃えちゃうよ!急いで避難した方がいいけど……どうすれば止められるの?」
「魔法……?」
寝ぼけた状態でリナの言葉を繰り返す。魔法なんてゲームやラノベの世界だろ?けど、上空で爆発している火の玉がそれを否定するように次々降り注いでる。これがVRだとか、何かの巨大プロジェクトの一環の悪ふざけだとか、そんな説明が思いつかないほどリアルだ。
「とにかく逃げ……」
言いかけたところで、上空から降りてきた炎のかけらが数メートル先の石畳を砕く。熱気が一気にこっちまで吹き付けて、思わず腕で顔を覆う。すると視界の端に何やら奇妙なものが見える。
地面に円形の魔方陣みたいなものが浮かんでるが、まるでプログラムのソースコードみたいに文字がぐちゃぐちゃと連なっている。「Fireball()」「mana」など、妙に見覚えのある単語に心臓がドキッとする。
「これ、コードじゃないか?」
俺は思わずつぶやく。けれどリナは、はぁ?という顔で首を傾げる。
「コード……?よくわかんないけど、これは『火球術式』だよ。でも今はコンフリクトとか起きてて……もうダメみたい」
「コンフリクト?」
一瞬、脳裏にGitのエラー文がよみがえる。コンフリクト。要するに同じファイルを別々に変更して競合した、アレか?
「火球術式が衝突して、こっちを攻撃してる……?」
いや、理解が追いつかない。そもそも魔法でGit……? そんな突拍子もないことがあり得るのか。でもこうして目の前に術式が浮かび上がっていて、さらにその術式が火の玉を無差別に放り投げてるように見える。現実離れしてるが、これはまぎれもなく「暴走」ってやつに見える。
「やばいやばい、もっと火が広がるよ!」
リナが焦りながら後ずさる。周囲の住民らしき人々も右往左往していて、悲鳴や叫び声が入り乱れている。俺は仕事柄、パニック状態を鎮めるために脳内で冷静モードに切り替えようとする。すると自然と技術的な考えが浮かんでくるから不思議だ。
「この魔方陣、よく見ると関数っぽい。function Fireball() {…} とかあるし、条件分岐があるみたいだな。mana >= 10 とか。まるでJavaScriptか何かか?」
「あの……あなたの名前は?」
「え? ああ、俺は……天城創也。君は?」
「リナって言うよ。創也くん、詳しそうだね。その『コード』とかいうの」
「詳しいっちゃ詳しいけど……いやいや、こんなの初めて見るよ」
なんて言いながらも、目にはっきりと術式のエラーを示す文言が表示されているのを捉える。error: "Not enough mana" とか出てるじゃないか。普通にエラーメッセージだ。もしかして、本当に魔法がソースコードとして管理されてる? そしてその管理方法がGit……?
「コンフリクトしてるってことは、どこかに変更履歴とかマージログみたいなのがあるんじゃないか?」
そう考えて魔方陣の端の方を探してみると、淡い光の文字が浮かんでいる。git status とか git pull とか……まさかこれは夢か? けど頬を軽くつねってみても痛い。夢じゃない。
「リナ、そこどいて!火の玉が飛んでくる!」
大きめの火球が空から落ちてきて、慌ててリナを引っ張って地面に伏せる。意外と身軽に動ける自分に驚きつつ、黒い煙が立ち昇る石畳を見やる。完全に戦場だ。被害が拡大しているのはわかるが、どう止めればいいかわからない人が多いみたいだ。
「もうこうなったら、俺が試してみるしかないか。Gitコマンドがあるってことは、修正できるのかもしれない」
「修正?」
リナが目を丸くして聞き返す。
「火球を発生させてるコードを、ちょっと書き換えてやれば暴走を止められるかも」
「……本当にできるの?」
不安そうな顔。でも、ほかに手立てがない。俺は見よう見まねで宙に表示された文字列を指先でスクロールさせる。すると git pull の文字を見つけたので、半信半疑で口にしてみる。
「……git pull」
言うと同時に、目の前に火球術式のコードがばっと展開される。今度は細かい記述が鮮明に見える。manaの使用量が10に固定されてて、しかもバグっぽい条件分岐が混在してる。
おまけにコメント欄には「//やばい」とか「//たぶん大丈夫」みたいな謎のメモが散らばっている。プログラマーあるあるの匂いがプンプンする。ここまで来たら逆に笑えてくる。
「mana >= 10 じゃなくて、もう少し消費を下げればいいんじゃないか? これで術式が安定するか試してみるか」
俺は指先でif文をいじってみる。mana >= 10 を mana > 5 に変更。次いでdamageの計算式も微調整。ついでに変なコメントを削除しつつ、軽く最適化する。
すると画面下部に「git push」という文字が現れる。押してみよう。
「git push……っと」
呟いた途端、今まで無秩序に暴れていた火球がピタリと収まる。いや、それだけじゃない。俺が書き換えたfireball関数らしき魔法術式が、まるで“正常にコンパイルされた”かのように安定して動き出した感じがする。町の空を覆っていた火の雨が急に勢いを失い、ポツリポツリと消滅していく。
「嘘……止まった!」
リナがうれしそうに声を上げる。周囲にいた住民らしき人たちも状況の変化に気づいたのか、「火が消えてるぞ!」「助かった!」と口々に叫んでいる。どうやら成功したらしい。
「まじか。ホントに動いた」
俺も半分信じられないまま呟く。Gitコマンドで魔法を管理する世界……本当にそんなとこに来ちまったのか。それでも目の前で起きていることが現実だから受け入れるしかない。
俺の手元にはなぜか修正後のfireball術式がまるでプルリク完了したように表示されている。
「ありがとう……助かったよ、創也くん!」
リナがホッとした表情で俺の手を握る。16歳くらいの少女が、純粋な目でこっちを見てる。その勢いに少し戸惑うが、状況が落ち着いてなによりだ。
「いや、あんまり深く考えてないけど、まあ成功したんだな」
そう苦笑していた矢先、今度は遠くの方から黒づくめの集団がぞろぞろとやって来るのが見える。何やら威圧感がある装束だ。胸のあたりに怪しげな紋章をつけた男たちが町の中心に集まり、俺を睨み据えている。
「おい、お前……今、魔法術式に干渉したな?」
先頭の男はギルドマスターと呼ばれているらしく、ルシアスという名前だとあとで知る。長いマントを翻し、冷たい視線で俺を見下ろしてくる。
「干渉というか、コードを直しただけだけど?」
俺がそう返すと、彼は眉をひそめる。
「その力があるのは魔王だけだ。勝手に術式を修正するなど許されん」
「魔王?」
思わず聞き返す。リナから聞いてはいたが、やはりこの世界では魔法を根本的に書き換えられるのは“魔王”だけらしい。いや、そんな伝説を今さら振りかざされても困る。俺はただの社畜SEであって、魔王なんかじゃない。
「Gitのコードを書いたのは魔王、と言い伝えられている。貴様がそれを改変したということは、魔王の力を持つ異端者ということだ」
ルシアスの口調は冷酷だ。周囲のギルドメンバーらしき人たちも杖を構えて、完全に俺を敵視してる。「救世主」としての扱いを期待したが、どうやら甘かったらしい。
「やめてください!彼は私たちを救ってくれたんです」
リナが必死にかばうけど、ルシアスは聞く耳を持たない。どう見ても余計に怒りを買ってる雰囲気だ。ああ、面倒なことになりそうだ。
「黙れ、リナ。ギルドの秩序を乱す行為は断じて許さない。貴様も共犯だというなら処分対象だ」
「そんな……」
リナが唇を噛む。俺も頭を抱えたい心境だ。せっかく火球の暴走を止めたのに、この仕打ちはないだろう。しかし、あちらはまさに武装した部隊。
いくらSEスキルがあっても、魔法的にはこっちが不利……いや、待て。コードの書き換えができるのは俺の強みなんじゃないか?
「お前ら……コードを直すのってそんなにヤバい行為なのか?」
冷静に聞いてみるが、ルシアスは鼻で笑う。
「魔王以外にコードを扱う権利はない。それがこの世界のルールだ。貴様は異端者だ。排除するのみ」
そこまで言われると、もう対話の余地もない。ギルドメンバーの一人が杖を振り上げるのが見える。なんだ、これが“魔法ギルド”ってやつか。だったらこっちもやるしかない。少なくとも俺は、この世界で“Gitによる魔法管理”をいじれるっぽい。先ほどのコードがまた空間に浮かび上がっているのを感じる。
「……ちょっとやってみるか。git reset --hard、と」
俺はふと思いついたコマンドを唱える。すると術式が瞬時に巻き戻ったようで、相手が詠唱していた呪文が一瞬にしてかき消える。杖をかざしていた男が「何……?」と絶句している。
「強制巻き戻し……ってわけ。あんたらの魔法は今、発動前の状態にリセットされたはずだ。呪文の記憶すら飛んでんじゃないか?」
自分でも驚くほど冷静に口にしている。実際に巻き戻った感触があるから説得力もある。相手のギルドメンバーは動揺している。
「ふざけるな……もう一度だ!」
別の奴が杖を掲げ、呪文を唱えようとする。しかし俺は心の中で「またかよ」と呆れながら、再びコードを呼び出す。手元の画面(?)にはfireball関数だけじゃなく、ほかの術式も並んでる。けど、今はとりあえず火球を“攻撃側”に回す術式を作りゃいいんじゃないか?
「fireball……をちょっと改造して、範囲拡大しとくか。damageを上げて……manaコスト下げて……」
ぱちぱちとコードを編集するように宙をなぞる。口では「git push -f」なんていう強制コマンドまで唱えてしまう。
「push -f……?」
リナが不安げに首を傾げるけど、俺としてはこれが最速かつ最強。
完成した術式を発動すると、先ほどの火球とは比べ物にならないほど巨大な炎が空中に生まれ、相手たちの真上で炸裂する。派手な爆音に耳がビリビリ震える。でも爆炎の先にいるギルドの面々も、さすがにただでは済まないんじゃ……と少し焦るが、狙いは威嚇だ。
実際ギルドの男たちは尻餅をついて悲鳴を上げている。命を取る気はないが、「本気を出せばこうなるぞ」というデモンストレーションだ。
「何者だ……貴様……」
ルシアスが悔しそうに歯ぎしりしている。
「だから、ただのSE……いや、この世界じゃ『魔法デバッガー』でいいのかな。とにかく、俺は魔王でも何でもないんだが」
「そんなことはどうでもいい……ギルドは貴様を許さないぞ。必ず捕らえて処刑する。覚悟しろ……!」
どうやら完全に恨みを買ってしまったようだ。とはいえ今は街が助かったことが最優先か。
住民たちは口々に「ありがとう!」と俺に声をかけてくれるし、リナもほっとした顔をしている。が、それも束の間、黒いマントの集団は撤退する気配もなく、今にも再度襲いかかりそうだ。
ここはまず逃げるのが得策だろう。
「リナ、行くぞ。ギルドがマジで暴力沙汰に出る前に」
「うん、わかった!」
俺はリナの手をつかみ、通りの裏へと走り出す。背後で「異端者め!」「待て!」という叫び声が響いてるけど、ガチの追跡モードに入られる前に距離を取らないとだ。
すばしっこい動きには、自分でも驚いてる。
会社のオフィスチェアで育ったわりにこんなに動けるのは、身体が若返ってる? 気づけば俺、なんだか20代前半よりさらに若い感覚がある。
「とりあえず町外れに出れば、隠れられるかもしれない。こっち!」
リナが小さな手で俺をぐいぐい引っ張る。どうやら地理をわかってるのは彼女の方だ。裏通りを抜けると、町の石壁が見え始める。門の警備兵は混乱の最中らしくバタバタしていて、俺たちがこっそり抜け出すにはちょうどいい。
荒れ地のような場所へ出た瞬間、町を振り返ると、さっきの火災が嘘みたいに鎮火している。炎を消すだけでも大変なはずなのに、俺のコード修正が思いのほか効果を発揮したらしい。遠目に見えている町人たちが、こちらに何度も手を振っている。
「創也くん、すごいね。あの暴走魔法を直しただけじゃなくて、ギルドの魔法まで封じちゃうなんて」
リナが感心したように見上げる。ポジティブに褒めてくれるのはうれしいが、俺自身は混乱真っ最中だ。死ぬほど働いて倒れたはずが、起きたら異世界らしき場所。それも魔法がコードで管理されてて、Gitコマンドで修正可能? 一体どういう理屈だ。
「いや、俺も頭の中が追いついてないんだけどさ。とりあえず……助けてくれてありがとう、リナ」
「ううん、助けてくれたのは創也くんの方だし。私、魔法管理官とは名ばかりで、コードを見ても難しくてよくわかんないんだ」
彼女は恥ずかしそうに笑っている。まさか『魔法管理官』なんて肩書があっても、コードの中身は理解してないのか。
「ところで……魔王って言ってたよね、ギルドの連中。魔法術式の作者が魔王らしいけど、どういうこと?」
腰に手を当てて問いかけると、リナが真剣な顔でうなずく。
「うん、この世界の“Git”を作ったのが魔王様なんだって。大昔、魔法を統合管理するシステムを作ったのはいいけど、途中で無茶苦茶なコピペをしまくったせいで、たくさんバグが発生して……あちこちで暴走が起きるようになったって」
「つまり……クソコードを書いた張本人が魔王ってことか。やれやれだな」
思わず苦笑する。そんなコードを放置してるから世界中に暴走魔法が蔓延してるのか。かつて魔王がGitに強制マージしたせいでエラーが大量に出た――それを直せるのが俺らしい。だからって、直すと今度はギルドから目をつけられる羽目になる。なんだこの理不尽ゲー。
「でも、創也くんなら修正できるよね? さっきの火球だけじゃなくて、魔王が残した本体のコードも……」
リナの目がきらきらしている。俺が直したらまた厄介事が増える気しかしないが、見過ごして町が炎上するのも放っておけない。助けを求める人がいるなら、できる限りの手は尽くしたい。
SEの端くれとして、バグがあるなら直したいというのは性分だ。
「そうだな……いずれは魔王が書いたスパゲティコードも全部見てやりたい。まあ、命がけっぽいけど」
「うん! 私、手伝うよ!」
「でもギルドに見つかったらおしまいじゃね? “魔王コード”を修正できるなんて、彼らにとっては脅威なんだろ?」
そう言いながら、俺は口元に苦い笑みを浮かべる。しかしリナは真剣に首を振った。
「このまま放置してたら、いつか世界が崩壊するって言われてる。勇者たちも挑んだけど、みんなコンフリクトを処理できなくて死んじゃったんだって……でも、創也くんなら絶対にできる。だってもうfireballを直したじゃない!」
今にも泣きそうな顔でリナが訴える。彼女自身もギルド内で苦労してきたのかもしれない。コードがわからないまま管理を任され、結果暴走を止められず、多くの人が危険にさらされた。そんな状況で、俺が突如現れてデバッグしたから希望を見出しているのだろう。
「まあ……やるだけやってみるよ。元の世界に帰る方法もわからないしな」
素直に答えると、リナの表情がパッと明るくなる。何かあったら彼女も手伝ってくれそうだ。幸いGit操作で魔法が動くなら、俺には得意分野がたっぷりある。ブラック企業で酷使された甲斐があるのかないのか……少なくとも“Gitで魔法修正”なんて常人にはわからない世界で、俺のスキルが活きるのは事実っぽい。
「じゃ、とりあえず今はギルドの追手をかわすところからだな」
「うん、こっちの森を抜けた先に隠れられそうな場所があるみたい」
リナと並んで荒野を抜ける。その先にはうっすらと森が見える。俺たちが逃げたと知れば、ギルドがすぐに追跡をかけるのは想像に難くない。
けど、魔法を直接使う相手に真正面から付き合うより、隠れるのが先決だ。
森の入り口で一瞬振り返ると、遠方の町の上空にはまだ薄い煙が漂っている。俺が手を加えたfireball術式はとりあえず安定させたが、根本原因となる“魔王のクソコード”が残っている限り、同じようなバグがまた起こるだろう。確実にどこかで最終的な大仕事が待っている。
「行こう、リナ。Gitがあるなら、俺はそれを使ってこのバグだらけの魔法術式をまとめてデバッグしてやる」
強がり半分、本気半分。リナは無邪気に「すごい!」と笑う。
こうして俺は、得体の知れない世界で“魔法術式のGit管理”なるものに深く関わる運命を背負ったらしい。魔王のコードを直したら俺が魔王扱いされるってのがシャレにならないが……ま、そんなこと考えても始まらない。
森の木々が近づくに連れ、空からの熱気も和らぎ、耳に入るのは鳥のさえずりと風のそよぎだけになる。足を進めるたび、知らない世界で本当に生きているんだと実感が湧いてくる。過酷なオーバーワークで潰れたあとにこんなファンタジーな展開とは予想もしていなかったけれど、そこに今の俺の居場所があるのだとわかってきた。
いつかこの世界の人々が「コードって素晴らしい!」と笑えるように、俺は“最強のデバッガー”としてこのGitシステムを最適化してやる。――そんなことを考えながら、俺はリナとともに一歩ずつ森の奥へと足を踏み入れていく。
ギルドからの追手が迫ってる気配を背中に感じながらも、胸の奥では不思議と高揚感がくすぶっている。だって、クソコードを直すのは俺の十八番だからな。
そして今度は、誰が書いたかわからない“魔王のクソコード”――そいつを責任もって修正してみせる。
とことん遊んでやろうじゃないか、この異世界のGitで。
やれやれ、なんだか妙に燃えてきた。噂に聞く“魔王”がどんな奴かは知らないが、俺の書いたプルリクには絶対に落ち度がないように仕上げてやるつもりだ。
……こうして俺とリナは人目を避けながら森を抜ける道を探す。遠くからはまだ「逃がすな!」と怒号が聞こえるものの、急に不安が襲ってくるというよりは、妙な期待感がこみ上げている。たぶんこの先、いろいろな騒動に巻き込まれるだろうが、俺はもう“Gitコマンドで魔法を修正できる”というとんでもない力を手に入れちまったんだ。だったら、やれるところまでやるしかない。
面白い/続きが読みたい、と感じて頂けましたら、
ページ下の【☆☆☆☆☆】から評価をお願いします!
ブックマークと、いいね・感想なども頂けると、とても嬉しいです