1-6 ハロー・ワールド
私の小説『ひきこもりのおうじさま』の後日譚のようなお話です。
・『ひきこもりのおうじさま』を未読でも読めるようにはなっています。
「プログラマー」と言って、あたしは思いっきり後悔した。……そんな言葉が通じるんかい?
「……公示書?」とケファが言う。どの言語かは分かんないけれど、あたしの視界に字幕が出たってことは、似たような言葉がイェシュアたちの知る言語にあるってことだ。
「どういう仕事か説明できる、かね?」とイェシュアは微笑する。「できるだろ」と言われてもコンピューターのない世界でどうやってコンピューターで動く開発言語を説明するのさ? 「コンピューター、プログラムなければただの箱」とも言うし……。そか、これだ!
「……ゴーレムってわかるかしら?」
「石や鉄、砂などで人形を作って、魔法で動かすもの、だね?」と、変わらない微笑でイェシュアが言う。後で聞いたところでは「プログラム」はラテン語の「あらかじめ定められた手順」という意味からきているので、「こういうことかな」とチート野郎は何となく察していた、らしい。
「あ、はい」と、あたし、「それを制御する呪文を作成します」いや、あたし確かに、機械組み込み系の制御プログラムをC、C++で作ったことはあるよ? 経歴として、むしろJavaとかで経理システム作るとかのほうの経験が長かったよ? でもコンピューターは存在しないけれど魔法やゴーレムの存在するナーロッパで、他にどう説明しろって言うのさ?
「お前は魔法使いだったのか!」とケファが驚く。
「うーん、そうであるような、ないような?」と、あたしが首をひねるとケファは困惑しているけれど、あたしは無視する、「……たとえば、人がちまちま機を織るのではなく、『機を織る』プログラムを作ります。そして、そのプログラムで数千体のゴーレムで機を織って、布を大量生産します」
「それは壮観な眺めだろうね」と微笑しながらイェシュアは立ち上がる。そして微笑したまま、あたしに近寄る、「すまないが、そなたの記憶を、もう少しばかり深く読んでも、かまわないだろうか?」
「あ、はい」
するとイェシュアは、あたしの頭に右手を置いた。……なんか、イェシュアから「癒し」とか「祝福」とかを受けているみたいだな。
「そうでもある」というイェシュアからの念話を、あたしは無視した。
「ふむ」とイェシュアは立ち上がり、懐から袋を取り出した。そして中のものをぶちまける。いくつかの石。ところが石は、きれいに縦横に並んだ。おまけに、いつの間にか、素材不明な枠にきっちりとはめ込まれた状態になっている。……石には、文字が書いてある。あたしは文字を読む、Q、W、E、R、T……。
「QWERTY配列じゃん!」
「そなたの言うキーボードというものを再現してみた」とイェシュアが言うけど……ロスマン語!?
次にイェシュアは、先ほど鏡を作ってみせた器を取り、モニターも作ってみせた、「さあ、見せてくれたまえ」
「いや、見せるって言ってもね? これ、キーボードもモニターも、どこにも繋がっていないよね?」またまたロスマン語だったけれども、もう、あたしは気にしない、「いったい、どこのオシャレなCPUに繋がっているというのさ?」
「父だ」
あたしは、思いっきりのスピードで首をうなだれる、「そりゃ、壮絶チートなハードスペックだわ」と、これまたロスマン語。
「さあ」とイェシュアは石ころキーボードの石の一つを示す、「電源ボタンを押せば、起動する」とロスマン語。
「あ、はい」と、あたしが電源ボタンを押すと、見慣れたOSの起動画面がモニターに表示された。あたしは、ため息とともに、首をうなだれた。
気を取り直して、デスクトップにあったEclipseアイコンをたたく。……あ、少し古い。けれど、さらに気を取り直してEclipseの表示を見ると……。元の世界のあたしの設定。あ、はい、もう気にしないことにしましたよ、うん。
と、何か作ろうとして、はたと、あたしの腕は止まった。Javaで「ハロー・ワールド」を書いても、壮絶短くて面白くない。ただの「ハロー・ワールド」では、なおさら面白くない。
「ここはCかな」と言いながらコマンドプロンプトを開く。確かめると、いろいろとパスが通っている。……そりゃそうか。
そして、あたしは、アレンジ版の「ハロー・ワールド」(HelloWorld.c)を一気に書いた。
#include <stdio.h> //標準入出力機能を取り込む
#include <time.h> //時間関連機能を取り込む
int main(void) { //主処理
time_t timer; //時間構造体を定義
struct tm *local; //ローカル時間の構造体を定義
// 1. 1970/1/1からの経過秒数を取得(この世界ではどうなるかは分からないけれどもとりあえず)
timer = time(NULL);
// 2. ローカル時間の構造体に変換
local = localtime(&timer);
// 3. 秒を整数型に置換
int sec = (int)local->tm_min;
// 4. 現在秒が30秒未満なら"!"をつけて表示、大きければ"..."をつけて表示
if (sec < 30) { //30秒未満
printf("Hello World!\n"); //"!"をつけて表示して改行する
} else {
printf("Hello World...\n"); //"..."をつけて表示して改行する
}
return 0; //処理終了(main関数が整数型なので、とりあえずゼロを返してあげる)
}
あたしは、HelloWorld.cをコンパイルした。面倒くさいので、実行形式プログラムは拡張子抜きのHelloWorldだ。……コンパイルエラーが出なくて良かった。出ても、元の世界の面倒くさいコンパイラーと違って、父なら、あたしの意図をくみ取って、デタラメソースでも何とかしてくれたろう。
コマンドプロンプトで、あたしはHelloWorldとたたく。HelloWorld!と表示された。しばらくして、もう一回HelloWorldとたたく。HelloWorld!と表示された。さらにもう一回。今度はHeloWorld...と表示された。
「どや!」とあたしはモニターを示した。
「師よ」とモニターを凝視するケファが言う、「私には、何のことだか、よくわかりません」
「いや、よくわかるぞ」とイェシュア、「ソースを最大表示に」と言う。が、あたしは、もう気にしないことにしたのだ、うん。
「あらかじめ決められた呪文をいくつか書く」とイェシュアは「時間構造体を定義」「ローカル時間の構造体を定義」を指さしていく。「……そして、条件により処理を変える」とイェシュアはif文を示した、
「おそらく、ではあるが複数分岐や繰り返し文もあるのだね?」
「あ、はい、あります」
「そして」とイェシュアは「return 0」を示した、「いくつかの機能をまとめて……『関数』にまとめる。『関数』と『関数』を、より大きな『関数』にまとめる」そこでイェシュアは2行目「#include <time.h>」を示した、「そして、最後、かなり大きくなったプログラムを、別のプログラムから呼び出し、より巨大なプログラムを作り出す」
ケファは相変わらず分かったか分かったかのような顔をしている。
「そなたの世界にプログラマーは何人いたのかね?」
「それこそ数えきれないほど、いっぱいいましたよ?」
「……素晴らしい世界だね、それは」とイェシュアは微笑する。
「主に、あんたのおかげだったと思いますが」
「私だけの『おかげ』でもあるまい」
「あのぅ……」
3人が見ると、檻の外に、気弱そうな獄卒が、あたしたちを見ていた。
「もう少し静かにしていただけるとありがたいのですが」
獄卒に聞くと、イェシュアとケファは「変な魔法で人々を惑わす不審人物」として、この牢屋に拘束された、らしい。元の世界と同じだね。で、あたしは、空から王様のお城の木に落ちてきた不審人物として、この牢屋に拘束された、らしい。しかも、なんと、この牢屋は、昔、ドヌエル1世が諸事情で引きこもっていた地下室を牢屋に改造したものだった、らしい。
「あまりにも大きな声だったので、王様が『なにごとか、連れてまいれ!』との仰せですので。ご同行いただきたいのですが」
「ふむ、それでは」とイェシュアは、内側から牢屋の扉を開ける。鍵のかかっていたはずの扉は、何の支障もなく開いた。……うん、チート野郎だとは知っていたけれどもね、うん。
「すみませんが、こちらになります」と獄卒は、先頭に立って、地下牢の階段を上へと上がっていく。イェシュアに次いでケファ、そして、あたしが続く。さあ、これからが、あたしにとっての「ハロー・ワールド」だ!




