CoffeeBreak 01 - hacker.explain(Phone);
「そういえばバンペイ。結局のところ、電話はどうやって実現してるんだ?」
電話をマギサービスとしてサービスインして初日、ばたばたと慌ただしかった作業を終えてお茶を飲んでいると、ボスが突然そう切り出してきた。
穏やかな昼下がり、開け放たれた窓の外から青い色が見えるような爽やかな空気が流れ込んでいる。
このオフィスに初めて来た時には板が打ち付けられて塞がれていた窓だったが、板を剥がしてボスと二人で何とか窓をでっちあげた。いつも今日のような日ならいいのだが、風が強い日には室内の書類がまきちらされてしまうので、また板でふさいでしまう。
このような不便さは他にも様々あるものの、住めば都とはよく言ったもので今ではマギデバイスを駆使した生活にも慣れつつあった。
「ボス、前にも説明しませんでしたっけ?」
「ははは、すまない。理解したつもりだったのだが、やはりあの『でんぱ』だったか? あれがよくわからなくってな」
真っ赤な髪をかきあげて照れるボスに呆れつつ、でも仕方がないとも考えなおす。携帯電話の仕組みなんて地球の現代人でもなんとなくでしか理解していないはずだ。
電波が飛んで来て、手元の携帯電話が受け取る。電話に話しかけると、それが電波になって飛んで行く。基地局とかいう施設があるけど、それが電波を中継してるんだっけ? という具合だろう。
「マギデバイスの場合、電波は使ってないですよ?」
「なに? では、どうやって電話を実現しているんだ。電波を使うから電話じゃなかったのか? 私をだまそうったってそうはいかないぞ」
「いや、ですから、マギデバイスに遠くのマギデバイスと通信……はわからないか。えーと、『やりとり』する機能があるんですって」
「マギデバイス同士がやりとり?」
「そうですよ。名前だって説明したのにボスが『じゃあ、このマギサービスの名前は電話だな!』って無理矢理に採用してしまったんじゃないですか」
「そうだったか? いや、すまんすまん。まあ過ぎた事はいいじゃないか。『電話』でマギサービスを開始してしまったし今さら変えるわけにもいかないだろう。それで、結局のところ電話のマギサービスはどうやって実現されてるんだ?」
「はぁ、まったく……。えーと、ですね。マギランゲージが何かに『命令』するための言語だという事は説明したと思うんですが――」
//----
マギランゲージとは、何かに『命令』を送る事によって全てがなりたっている言語だ。計算ですら数に対して『1増えろ』や『1減らせ』といった命令で成り立っていて、全てを『オブジェクト』に対する命令として扱うという概念を『オブジェクト指向』と呼ぶことは前に説明した(#007参照)。
マギランゲージを書いていて大変なのは、マギランゲージが提供するのは最小限でしかなく、全てを自作しなくてはならない点だ。掛け算すらできないのに円の面積を求めろと言われても困ってしまうだろう。
そこで、僕はまず出来ることを増やす事から手をつけた。例えば、『1増えろ』ではなくn増やす。これには『1増えろ』という命令をn回繰り返す事になる。
ややこしいのは、この繰り返しすら何かへの命令で表現しなくてはならないところだろう。数nに対して『この命令を自分の数だけ繰り返せ』と『命令』するのである。この時、『この命令』という部分に『1増えろ』を当てはめれば、その数nは二倍になるわけだ。
マギランゲージの面白いところは、『この命令』という形で扱ったように『命令』自体も一つのオブジェクトとして扱えるところだ。そして『命令オブジェクト』は、そのもの自身に対する命令だけではなく、別のオブジェクトへの命令も表現できる。例えば『Aに対して1増えろ』という具合である。
結論からいえば、Aをn増やすには、『“Aに対して1増えろ”という命令を自分の数だけ繰り返せ』という命令をnに送ることになる。
さあオブジェクトと命令だらけで混乱してきたぞ。この混乱が、異世界の人々をマギランゲージから遠ざけている元凶だろう。ちなみに、地球のオブジェクト指向言語はここまで難しくはない。計算だって最初から簡単にできるようになっている。
悪戦苦闘しつつ加減乗除の四則演算や簡単な計算ができるようになったら、ようやくスタートラインに立ったことになる。これでは、マギランゲージを勉強しようという気もなくすのは仕方ないだろう。
『n増やす』のような直感的で簡単な書き方ができれば、もうちょっと間口が広がるのにと考えたところで、閃くものがあった。
いっそのこと、こういった書き方ができるようにマギランゲージの上に新たな言語をかぶせてしまえばいいのではないか?
そして僕は新たな言語づくりに手をつけた。より簡単に、より直感的な記述ができるように、誰でも書けるようにするためだ。さらにマギランゲージの文字を覚えなくても使えるように、異世界で主に使われている言語を使って書けるようにする。
それは地球におけるコンピュータの歴史の再現だった。
コンピュータが作られた当初、コンピュータが解釈できるのは『機械語』と呼ばれる言語、一種類のみだったのである。それは人間ではなく機械のための言語であり、0と1で構成されていて単なる数字の羅列にしか見えないものだ。例えば1番が加算で、2番が減算、といった具合である。
当然ながら機械語でプログラムを作るのは非常に大変で、単純な操作しかできないために1つの動作を書くのにも膨大な量の機械語を書く必要があった。人間からすれば数字しかないために間違いも起きやすく、とてもではないが大規模なシステム開発など不可能だった。
次に登場したのが『アセンブリ言語』と呼ばれる言語である。これは機械語の数字をそのまま同じ意味の英単語に置き換え、数字の代わりに英単語でコードを書けるようにしたものだ。例えるなら、1番の代わりに『ADD』、2番の代わりに『SUB』といった形だ。それぞれ加算を意味するAddition、減算を意味するSubtractionの頭文字である。
数字を読み書きするよりはだいぶ負担が減ったが、それでもできる事が単純な操作しかできない事にかわりはなく、やはり大きいコードを書くのは非常に大変だった。
それでも人間の慣れとはすごいもので、当時は大企業の作るシステムや商用ソフトウェア、コンピュータを動かす基本ソフトのOSですらアセンブリ言語で書かれていた。
僕がマギランゲージという言語に抱いた印象は、このアセンブリ言語に近い。単純な操作しかサポートされておらず、しかし既存のマギサービスのような大規模なシステムでも使われている。
実際にはオブジェクト指向のサポートがある分、もうちょっと抽象度が高いが、そのまま人間が読み書きするには大変だというのが正直な感想だろう。
アセンブリ言語の次に生まれてきたのが、『高級言語』と呼ばれるようになったプログラミング言語たちである。対して機械語やアセンブリ言語は『低級言語』と呼ばれる。
この高級や低級とは値段や品質のことではなく、ソフトウェアがハードウェアの上で動くことになぞらえて、ハードウェアに近い単純な操作だと低く、ハードウェアから遠い抽象的な操作が高いからだ。
高級言語と呼ばれる言語は、人間にとってよりわかりやすく、機械語のようにハードウェアに依存しない書き方ができるように考案されたものだ。
当初は数式を書きやすくするために、あらかじめ数学関数やよく使われる操作を備え持ったFORTRANという高級言語が開発され、その有用さが証明されると次々と新たな高級言語が作られていった。
僕がやろうとしているのは、まさしくこの『高級言語』の開発である。マギランゲージという『低級言語』をよりわかりやすく、書きやすくするためのオリジナル高級言語を作るのだ。
//----
「ちょ、ちょっと待ってくれバンペイ。えーとだな、私は電話の仕組みを聞きたかったのだが、その、高級? 言語を作っているのはおいておいてだな……」
「ああ、すみません。ちょっと熱中してしまって。でもボス、高級言語は大事ですよ。これができれば、もっと多くの人がマギを作れるようになるはずです」
「う、うむ。私だってマギランゲージに挫折した一人だから。それは嬉しいのだが……」
どうやらボスは言語の開発の話はお気に召さないようだった。これから面白くなるところだったのになぁ。仕方ないので、電話の開発の話をすることにする。
あれ、そういえば以前に電話の話をした時も、地球の電話の話ばかりしていた気がしてきたぞ。もしかしてボスが勘違いしていたのは僕のせい?
「す、すみませんボス。どうもマギランゲージの話になると熱中してしまうみたいで」
「いや、いいんだ。それでこそバンペイだろう。それじゃあ電話の方も聞かせてもらえるだろうか」
「ええ、そもそも電話を実現するには遠くのマギデバイスと通信……つまり、やりとりする必要があるんですが――」
//----
電話を実現するには、遠くのマギデバイスと通信する必要がある。それをどう行なうかが問題になったわけだが、シィから借りた『仕様書』のおかげでマギデバイスにはそもそも通信機能のようなものが備わっている事が判明した。
しかしマギランゲージの例によって、これも一筋縄ではいかない代物だった。
通信に関する要素として『通信相手』と『通信方法』の二つがあげられる。
この内『通信相手』に関しては、まず『どのマギデバイスと通信するのか』を教えなくてはならない。通信するといっても、どの相手と通信するのかわからなければどうしようもないからだ。
地球のインターネットでは、この通信相手の指定に『IPアドレス』と呼ばれるものが使われている。電話機に電話番号があり、郵便配達には住所があるように、インターネットの中でも接続しているパソコンやサーバーなどの端末を識別するための番号があるのだ。
端末から発信された『パケット』、ようするに『情報の小包』には送り先となるIPアドレスが書かれている。宅配便の荷物に送り先の住所が書いてあるのと同じだ。
荷物を渡された配達業者は、自分の管理する住所の範囲でなければ、送り先の住所を知っていそうな別の配達業者に配達を委託する。そしてその配達業者も知らなければ別の業者へ……といった具合に、どんどんと荷物をリレーしていく。
こうして無事に相手の元まで荷物である情報が届くのである。誤解を恐れずにいってみれば、インターネットとは配達業者のネットワークとも言い換えられる。
ではマギデバイスの場合はというと、一応、相手を識別するための情報自体は存在する。しかしそれはマギデバイスに付いているのではなく、なんと『人間』に付いているのである。
仕様書によると、これは『マギフィンガープリント』と呼ばれている。フィンガープリントとは『指紋』のことなので、要するに人間ごとに異なるのだろう。国民総背番号制の個人番号みたいなものだ。
マギフィンガープリント自体も長い桁数の数字だ。いつの間に、どうやって割り振られているのかはわからないが、異なる世界からやってきた僕にも割り振られている。
マギデバイスをボスから借り受けた時に所有者登録を行なったが、所有者の識別もこのマギフィンガープリントによって行われているらしい。これは仕様書にあった。
マギサービスの利用者登録も、実際には利用者のマギフィンガープリントを登録しているわけだ。だから、ボスからマギデバイスを借り受けても、ボスの使っているマギサービスを使えるわけではなかった。
マギデバイス同士をくっつけると、その所有者のマギフィンガープリントを相手に伝える事ができる。こうして、マギサービスの登録を行なっているわけだ。
であれば、電話にもマギフィンガープリントを使えばいいと思うだろう。
しかしマギフィンガープリントは、電話番号のように気軽に相手に教えるべきではない情報だ。電話帳にマギフィンガープリントがたくさん載っていると、漏洩のリスクが高すぎる。それに、お店のように電話番号は必ずしも個人と対応するわけではない。
よって、マギフィンガープリントではなく電話番号を採用したのだ。
電話番号とマギフィンガープリントの対応表は、登録所の中央マギデバイスのみが持っている。電話をかける時は、電話相手の電話番号を中央マギデバイスに伝えて相手方の特定とマギフィンガープリントによる符号化音声の中継を行なってもらう。
こうして、電話をする際には必ず中央マギデバイスを通して行なう、というモデルを構築した。
つまり、電話のネットワークは全てのマギデバイスが1つのマギデバイスにつながっているという中央集権型なのだ。それぞれのマギデバイスがつながっている分散型のインターネットとは異なっているわけだ。
インターネットを目指す僕としては苦渋の決断だったが、いざできてみれば、うまくできたものだと傲慢に自画自賛している。
通信の要素として、もう一つの『通信方法』だが、これもまた難しい決断が必要だった。
インターネットでは、世界規模で『こういう風に通信しましょう』という決まりがあり、それに則って端末や配送業者がやりとりしている。この決まりの事を『プロトコル』と呼ぶ。
当然ながらマギデバイスの通信機能にプロトコルなんてものは存在しない。本にも書かれていないため、マギサービスも恐らく企業ごとに通信方法がバラバラだ。
これはかなり恐ろしい状態だ。マギサービス同士の連携というのが一切不可能なのである。いわば企業内で閉じたイントラネットみたいなものだ。
僕が作るマギサービスだって、他のマギサービスとの互換性なんてあるはずがないから、ひとりよがりの状態になるだろう。
そこで僕は、自分でプロトコルを策定して、それに則って通信を実装した。このプロトコルを今後、公開していくつもりである。もし他の企業がプロトコルに従ってくれたらしめたものだが、まだまだ難しいだろう。
でも、今は一人だけであろうと『決めておく』ことが重要なのだ。そして、それをはみ出さないようにする。そうする事によって将来につなげていけるのだ。
ひとりプロトコルの策定を始めたものの、かなり大変だった。地球では長い時をかけて何人もの手で作られチェックされ、策定に至ったものだ。一人でやれば大変なのは当たり前だ。
例えば、通信に使用する文字ですら、1から『文字コード』を決めなければならない。文字コードとは文字を符号化したものだ。音声を1と0に変換したように、文字も一文字一文字に番号を割り当てて1と0で表現できるようにする。
パケットの定義、使われる文字コード、やりとりの手順、通信される内容の規格にいたるまで、1つずつ自分で決めなくてはならなかった。通信の暗号化もここで定めたものだ。
これを十日、ブライさんの件があったから実質八日ほどで全て一人で作成した。
//----
「……なんというか、おつかれさまだったな」
「ええ、僕の苦労がボスに伝わったようでなによりです」
「いや、その、気軽に十日を目処に、なんて言って悪かったな」
「ふふふ、いいんですよ。ボスは無茶ぶりするぐらいがちょうどいいんですから。それに十日でできるといったのは僕自身です。僕の矜持にかけても約束をやぶるわけにはいきませんでしたから」
「そ、そうか……」
なぜだかボスが少しひいた様子だったのが不思議だった。




