第1話 あと一つだけ
魔法がコードに見えはじめた日のことを、今でもはっきり覚えている。
それはこの世界で目を覚ましてから十日ほど後のことだった。
——コードがあれば、必ずバグもある。
わたしがそのことを思い知るのは、もう少し先の話だ。
◇◇◇
「あと一つだけ……あと一つだけ、関数を書き終えれば……」
モニターの白い光が滲んで見えた。
指先はキーボードの上に置かれたまま、もうほとんど動かない。
それでも頭の中だけは動いていた。
——次の引数は何だっけ。
——あの正規表現、もう一回テストしないと。
——あ、ここのループ、O(n²) になってる。書き直したい。
——書き直したい、書き直したい、書き直したい——
数時間前、最後のテストが緑に変わった瞬間を、まだ指が覚えている。
ずっと赤かった一行が、すっと通った。あの瞬間、わたしは確かに笑った。
こんな身体なのに、こんな時間なのに、それが嬉しかった。
——もっときれいにできる。もっと速く、もっと美しく動かせる。それが見えてしまうから、止まれない。
子供の頃から、ずっとそうだった。
誰に頼まれなくても、作っては壊し、もっといい形に組み直す。それが、いちばん好きなことだった。
仕事と趣味の境目は、とっくに無かった。
オフィスの蛍光灯はいつから消えていたんだろう。
窓の外はすっかり暗い。机の上には半分残った冷たいコンビニコーヒーと、開きっぱなしのドキュメント。
「これさえ書ければ……明日の朝までには……」
——あと一つだけ。
——あと一つだけ書けば、わたしは満足できる。
——だから、もう少しだけ、もう少しだけ——
ふっと視界の端が黒くなる。
慣れた感覚だった。立ち上がろうと思った。水を飲もうと。
——だがその時にはもう、
何かがぷつりと、
切れた。
◇◇◇
「リナ、起きた?」
優しい知らない声がすぐ近くから聞こえた。
目を開ける。
ぼやけた視界に映ったのは木目の天井。古びた、けれども丁寧に磨かれた木材。
頭の下には麻のような布の枕。
「もう、ずいぶん寝ていたわよ。熱が下がったみたいで、よかった」
声の主がわたしの額にそっと手を当てる。
冷たくて柔らかい手だった。
その手を見て、わたしは——息を呑んだ。
わたしを覗き込んでいるのは、見たこともない女性。栗色の髪を後ろで一つにまとめて、優しい緑の瞳をしている。年は三十代の半ばだろうか。
「……どこ、ここ」
そう言おうとした自分の声が想像していたものと全然違って、わたしは今度こそ凍りついた。
高く澄んだ子供の声。
それも女の子の。
「リナ? どうしたの?」
女性が顔を曇らせる。
わたしはゆっくりと自分の手を持ち上げた。
小さい。
肌がつるつるで、まだ何も書いていない、まっさらな子供の手。年の頃は、たぶん——小さな女の子のものだ。
——なに、これ。
頭の中でぐるぐると考えがめぐる。
過労で意識を失ったのは覚えている。「あと一つだけ」と呟いたのも。
それなのにこれは何だ。
「リナ、お水飲める?」
女性が木のコップを差し出してきた。彫りの入った素朴な木の器。
近代的なグラスじゃない。
部屋の中をもう一度見回す。
窓にはガラスではなく、薄い布のような何か。家具はすべて木製で、釘も金具も最小限。電気の気配はない。代わりに机の上に置かれた小さな器の中で、ほのかな光が揺れている。
蝋燭ではなさそうだ。何かの——光?
わたしはコップを受け取る代わりに、女性の顔を見つめた。
理解の追いつかない頭でそれでも、一つだけ確かなことがあった。
——ここはわたしの知っている世界ではない。
◇◇◇
それから何日経ったのか、正確には覚えていない。
わたしは——「リナ」という名前の、八歳の女の子になっていた。
場所はヴァルジア王国のグレンフィールド村という小さな農村。
家族は、わたしを入れて五人。
父はアルベルト。寡黙だけれど優しい、村の時計師。
母はエマ。さっきわたしの額に手を当ててくれた女性。
兄はヨハン。わたしより五つ年上で、笑うとえくぼができる、もうすぐ少年期を抜けそうな男の子。
そして妹はノラ。三歳。世界の半分くらいしか言葉を喋れないけれど、すでにわたしのことを「ねぇね」と呼んで後ろをついてまわる。
最初の数日はただ呆然としていた。
熱を出して寝込んでいるリナ——八歳の少女にわたしの意識が宿ったらしいと理解するまでに、それなりの時間がかかった。
なぜそうなったのかは分からない。
ただわたしが前世で書いていたあの未完成の関数も、納品予定のドキュメントも、もう永遠に手を離れてしまったらしいということだけはなんとなく分かった。
愛田莉奈、三十三歳。
過労で死んだ一人のプログラマー。
それが今のわたしのもう一つの名前だ。
そして——もう一つ確かなことがある。
ここは魔法のある世界だった。
◇◇◇
「リナ、ほら、見て」
母エマがわたしの手を引いて、台所に連れていった。
竈の前に小さな黒い石が置かれている。エマがそれに人差し指で軽く触れた。
「ベシリア」
短い、聞いたことのない言葉。
それだけで石の表面にぼんやりとした赤い光が灯り、すぐ隣に置かれた薪にぽっと火がついた。
「ね、便利でしょ」
エマが微笑む。
わたしは火を見つめた。
火を、というより、その火が点いた瞬間を。
魔法だ、と思った。
童話でしか聞いたことのない、本物の魔法だ。
驚くべきなのに、しかし頭のどこかが別のことを考えていた。
——あの瞬間、何が起きた?
エマが「ベシリア」と言葉を発した瞬間、黒い石の表面にはほんの一瞬だけ、何かの模様が浮かんで消えた。わたしの目はそれを確かに見ていた。
複雑な、けれど規則性のある模様だった。
そして石は薪に対して反応した。
特定の入力——「ベシリア」という詠唱——に対して、特定の出力——着火。
ふと頭の中で、ある言葉が浮かんだ。
——これって、
わたしはもう一度、エマと石を見比べる。
エマが詠唱する。模様が一瞬光る。火が点く。
入力、処理、出力。
息が止まりかけた。
◇◇◇
「リナ? どうしたの、ぼうっとして」
エマが不思議そうにわたしの顔を覗き込む。
わたしは慌てて首を横に振った。
「な、なんでもない、お母さん」
そう言いながらわたしの頭の中ではものすごい速度で、何かが繋がっていく。
魔法。詠唱。石。光る模様。火。
それはまるで——
口に出してはいけない、と本能が告げる。
八歳の少女が台所で唐突に口にしてはいけない、その言葉を。
それでも心の中では止められない。
——あの魔法、なんか変じゃない?
わたしの知っているあの、もう二度と書けないと思っていたあの世界の言語によく似ている何か。
エマは「リナ、火に近づきすぎないでね」と笑って、わたしの頭を撫でた。
わたしは頷きながら、ずっとその黒い石を見つめていた。
胸の奥が久しぶりに少しだけ熱を持っていた。
前世で死ぬ間際まで頭の中に巣食っていた、あの「あと一つだけ」の声が——もう一度、わたしの中で目覚めかけていた。
■あとがき・解説
ここまで読んでいただきありがとうございます。
この後書きでは、本文に出てきた「プログラマー用語」を非エンジニアの方にも分かるように、ゆるく解説していきます。
■この話で出てきた言葉
■「関数」
リナが死ぬ間際まで「あと一つだけ書き終えたい」と呟いていた、あの「関数」。
プログラムの世界で「関数」とは、ひとまとまりの仕事をしてくれる処理のかたまりのことです。
たとえば「数字を二つ受け取って、合計を返す」「お客さんの名前を受け取って、挨拶文を作って返す」など。
一度作っておけば、別の場所から呼び出してそのまま使い回せるので、プログラマーは日々この関数を組み立て続けています。
リナにとって関数は、料理人にとってのレシピのような存在だったわけです。
■「ループ/O(n²)」
「ループ」は同じ処理を繰り返すこと。一覧の中身を一個ずつ順番に見ていくときなどに使います。
「O(n²)」は読み方が独特で「オー・エヌ・じじょう」と読みます。
ざっくり言うと「データの数が増えたとき、処理時間がどれくらい増えるか」を表す目安です。
データの数を n とすると、n の二乗ぶんだけ時間がかかるよ、という意味。
データが 10 個なら 100 回、100 個なら 1 万回、1000 個なら 100 万回。あっという間に重くなるので、プログラマーが「うっ」と顔をしかめる代表的なパターンです。
リナが「書き直したい」と呟いたのは、まさにこの「重くなりそうな書き方」を見つけてしまったからでした。
■「正規表現」
文字列の中から特定のパターンを探したり、置き換えたりするためのルールの書き方です。
たとえば「メールアドレスっぽい文字列だけ抜き出したい」「電話番号の形をしているものを見つけたい」というときに使います。
独特の記号がたくさん出てくるので、プログラマーの間でも「読みづらい」と評判の代物。
リナが死の間際まで「もう一回テストしないと」と気にしていたのも納得です。
ところでリナは、前世で「あと一つだけ」と呟きながら息絶えてしまいました。
転生先の異世界で、エマが黒い石に触れただけで火が点くのを見たとき、彼女の頭の中でその「あと一つだけ」が、もう一度動き始めようとしています。
入力、処理、出力。
プログラマーが世界を見るときの、ちょっと変わった眼鏡が、ようやく新しい景色を捉え始めたところです。
次の話もお楽しみに。




