呪文の“無限ループ”をデバッグせよ!
少女は黒い影の方に杖を向けて、何やら詠唱のようなものを始める。
「ラディク、サルヴェイラ……」
何を言っているのか理解できなかったが、少女の声にはただならぬ気迫があった。彼女は震える指先で杖先を相手に向ける。すると、杖の先端にほんのり火が宿った。
「う、うそ……?」
俺は思わず目を瞬かせる。まるでアニメのように、宙に浮く火が杖の先からにじみ出ている。それはごく小さな炎だったが、確かにそこに存在していた。
ガスバーナーでも隠し持ってるのかと思って目を凝らしたが、そんな機械的な装置は見当たらない。
「……エクストラードッ!」
だが、少女が呪文を唱え終えると、火は一瞬だけ輝いて轟音を立て、あっけなく弾けて消え失せた。
「ゲホッ、ゲホッ……う、また暴発……」
少女は驚いた様子で、小脇に抱えていたノートを落としかける。一方、闇の獣らしき影も、今の閃光に少なからずたじろいだようだ。
けれど、次の瞬間にはその巨体がずるりと動き、低く唸り声を上げる。
「おい、大丈夫か!? 早く逃げないと!」
少女は俺の声を無視するように、再びノートを開いて早口で詠唱を始める。
だが、獣はもうこちらに狙いを定めて動きだしていた。
少女が必死に呪文を紡いでいるあいだに、黒い影は素早い足取りで距離を縮めてくる。
背後に回り込む気配。まずい。このままじゃ少女が襲われる。
「くそっ……もういい、俺が行くしかない!」
俺は半ば強引に少女を抱きかかえ、近くの茂みに突っ込んだ。細かい枝が肌を引っかくが、そんな痛みを気にしている余裕はない。
少女は激しくもがいて、俺に文句をぶつけてくる。
「な、なにしてるのよ、邪魔しないで! 放して!」
「うるさい、あれは危険だ! 静かにしてろ!」
苛立ちと焦りが入り混じり、俺もつい声を荒げてしまう。どうかあの獣が俺たちを見失ってくれればいいが。息を殺して夜の闇に溶け込もうとするが、少女はささやかな抵抗を続けている。
「いいから大人しくしてくれ、あ、えっと……名前は?」
俺は、一瞬言葉が詰まった。そういえば、俺はまだ彼女の名前も聞いていない。
「……リリアよ。いいから、離してよ……!」
「リリア、まだ動くな。あいつ、近くにいる。下手に姿を見せたらヤバいだろ!」
俺が唇に人差し指を当てて黙らせようとすると、リリアもようやく状況を察したのか、ぎゅっと口を結んだ。互いに肩を寄せ合って闇の中で息をひそめる。
黒い獣の気配が遠ざかるように、落ち葉を踏み分ける音がかすかに聞こえた。
リリアは何度か小さく息を呑んで、そのたびに俺の胸ぐらをつかむ。
「……こんな奴、魔法で追い払えるはずなのに……どうして、失敗するのよ……」
「魔法って……リリア、本当に魔法が使えるのか?」
俺はいまだに信じきれない思いで尋ねる。先ほど杖の先から火が出たのを、目の錯覚だと思いたい気持ちも正直あった。
けれどリリアの真剣な顔を見ると、どうも単なる手品ではなさそうだ。
「馬鹿にしないで。わたしだって、ちゃんと勉強してるんだから。……まだ少し、安定しないだけで……」
リリアは黙りこくって下を向く。魔法……まじか。まだ半信半疑だが、すぐそこにあの黒い影は迫っている。もう冗談だとか言ってる場合じゃない。
俺は半ばやけくそになってリリアに尋ねる。
「なあ、そのノート……見せてもらってもいいか?」
「……あんたは魔法が使えないんでしょ? 見てどうするのよ」
リリアはため息をつきながらも、表紙に奇妙な紋様が刻まれたノートをそっと差し出す。
パラパラとページをめくってみると、見たこともない文字が無数に書かれていた。アルファベットに似た記号もあれば、幾何学的な文様のようなものもある。
いずれにせよ、まったく解読不能だ。
「うわ……こりゃすごいな。まるで暗号みたいだ。何が書いてあるんだ?」
「魔法の基礎や呪文の詠唱文とか……いろいろよ。教科書通りの呪文じゃ上手く行かないから、自分で考えたの」
俺はノートを眺めると、不思議なことに、見た瞬間“構造”が浮かぶような感覚を覚えた。条件式やループ処理のイメージが頭に湧いてしまう。システムエンジニアとしての職業病なのかもしれない。
そして、俺は一つの仮説にたどり着く。
リリアが魔法を失敗する理由は、もしかしたら自作の呪文に“バグ”があるからでは……?
「なあ、さっき暴発したのは、どの呪文だ?」
リリアは渋々ノートをめくり、一節を指さす。
「さっき使ったのはこれ。火属性の下級呪文をアレンジしたもの」
リリアが指差した先には、二十単語ほどで構成された一文が記されている。
「……悪い。俺は文字を読めないんだ。ひとつずつ発音して教えてくれるか?」
「う、嘘でしょ!? 文字すら読めないの? し、仕方ないわね……えっと、“ラディク”は火種を取り込む単語で、“フロヴェイラ”は凝縮したエネルギーを増幅する単語で……」
彼女は口早に説明を続けるが、ところどころ飛ばしている単語があるようだ。
「このへんの単語は読まないのか?」
「“アス”とか“リラ”って読むけど、ただの“つなぎ”だって先生から言われたわ。詠唱のリズムを合わせるため……とかなんとか」
「“つなぎ”ね……意味はないのか?」
「わかんない。先生もあまり詳しい説明をしてくれなかったし……」
なるほど。俺はノートの呪文全体をざっと目で追いながら、頭の中で構造を組み立てる。まるで、未知のプログラミング言語のソースコードを眺めているようだ。
バグだらけのシステムを改修してきたエンジニアとしての経験が、ここで騒ぎ始める。
そのとき、森の向こうから黒い影の咆哮が響いた。
まずい。また突っ込んでくる気配がある。俺とリリアは身を低くして、別の木陰へ少しずつ移動を始めた。
「もう一回撃ち返すわよ! 下がってて!」
リリアは息を荒げながら俺を睨む。今にも飛び出そうな勢いだ。
「ちょ、ちょっと待て。さっきと同じ唱え方だとまた――」
「やるしかないでしょ! くるわよ!」
リリアは杖を構え、先ほどと同じ呪文を詠唱する。
しかし――
ドンッ……!
小さな爆煙が起こるだけで、火の魔力はまともに制御されていない。リリアは尻餅をついて呻いた。
「うぅ……痛ったた……」
「くそ……急いで解決しないと……」
俺はノートを睨みつけ、小声で呪文の単語を確かめる。
――だが、今は細かい理屈を長々と考えている余裕はない。黒い影がいつ襲ってきてもおかしくない状況だ。
「ここの句は“リラ”で始まって……次の“リラ”までが5単語。その間で魔力を溜める処理があるっぽいな……」
必死に呪文の規則性を探っていく。現実世界のプログラミング言語には、”制御文”という構文が存在する。たとえばゲームなら、「体力が0より大きいときのみ行動をする」といった具合に、処理を実行する条件を指定するのだ。
リリアのノートに書かれた呪文を見る限り、意味のない”つなぎ”の単語が、この”制御文”の役割を果たしているように思えてならない。
「まてよ、もしかして、”アス”はif文の始まりなのか? だとすると、次の数単語がその条件の内容のはずで……」
俺は仕事中の癖で、呪文を解読しながら独り言をつぶやく。
偉大な先輩が会社を辞める前に残したぐちゃぐちゃのプログラムを解読した夜のことを思い出しながら、俺はノートを何度も読み返す。
「……そうか、“リラ”はおそらく条件分岐。で、”リラ”が二つあるから、おそらくその間の処理が本体だ。つまり……」
「……ちょっと、何わけの分かんないことブツブツ言ってんの! ループって何よ……?」
「同じ命令が何度も繰り返されることだ。もし増幅を抜け出せない構造なら、暴発する可能性が高いってこと!」
森の中を走り回りながらも、脳内で必死に呪文の“構文”を解析する。どうやら「フロヴェイラ」を無制限に呼び出し続ける部分が問題らしい。
「……わかんないわよ! だからどうすればいいの!」
「ループ部分を短縮しろ! えっと……まず二回目の”リラ”をカット、それから次の”フロヴェイラ”を一回か二回で終わらせて、すぐ“イニフェル”や“エクストラード”につなげるんだ!」
「はあ!? そんなことしたら火力が下がるじゃないの!」
そこで、黒い影が背後から木をへし折るように突進してきた。逃げ場がほとんどない。
「火力が多少落ちても、暴発で自分が吹っ飛ぶよりマシだろ!? このままじゃ死ぬぞ!」
「くっ……」
リリアは悔しそうに顔を歪めるが、背に腹は代えられない様子だ。俺も声が裏返りそうになるくらい焦っている。
「分かったわよ……信じられないけど、やるしかない……!!」
黒い影が大きく踏み込み、リリアも覚悟を決めて杖を握り直す。そして早口で呪文を唱え始めた。
「ラディク、サルヴェイラ、リラ――フロヴェイラ――イニフェル、エクストラードッ!」
いつもなら二つの”リラ”に挟まれて”フロヴェイラ”を何度も重ねるところを、思い切って削って終盤に飛ばす。
恐怖はあっても、彼女は俺を信じて(というよりヤケクソ気味に)呪文の構成を大胆に書き換えたようだ。
ゴッ……!
空気が震え、杖先に凝縮した火の玉がギュッと形を保ったまま生まれる。普段は増幅しすぎて弾けるはずのエネルギーが、今はきちんとまとまっていた。
リリアが杖を振り下ろすと、火球は一直線に黒い影の額へと飛んだ。ドォンという衝撃音が森に響き、黒い影はのけぞったまま前のめりに倒れ込む。
「うそ……できた、まさか……」
その場でリリアも俺も呆然と立ち尽くす。
黒い影はわずかに呼吸しているが、完全に意識を失ったようだ。
ほっとした途端、全身から力が抜ける。安堵の息を吐きながら、俺は苦笑まじりに呟いた。
「……はは、“デバッグ”成功だ」