071 - hacker.fix(system);
「自分の幸福を追求して何が悪いというのです? 人は幸せになる権利があり、義務があるのですよ」
突然現れた『教皇様』をチラリと見ると、そこには手を広げた『子供』が立っていた。
いや、違う。どうやら『小人族』の男性のようだ。珍しい銀色の髪を肩より下に長く伸ばし、教会でお馴染みの黒いローブを身に着けている。ただ、他の関係者のローブに比べると、ところどころにワンポイントの刺繍や金糸での上品な飾りが入っており、豪華な雰囲気だ。
男性のはずなのにやけに高い声だったから不思議だったが、小人族なら理解できる。彼らは大人になっても、ヒト族における10歳ごろの見た目を保っているのだ。当然、変声期など存在しない。
教皇は子供の見た目ながら異常な美形であり、人形めいた印象を受ける。形だけは柔和な笑みを浮かべているのだが、どことなく冷めた感じというか、血が通っていないというか、あまり良い印象は無い。しかし、何万人もの信者を束ねるリンター教のトップなのだ。きっといざという時は威厳とカリスマ性を発揮するのだろう。
「仮に高い利用料で不幸になる人が多少いようとも、それを貴女が気に病む必要などありません。貴女はこれまで多くの人を救ってきた。貴女によって救われた人の数を考えれば、物の数には入らないのですから、ね?」
「で、ですが、人の幸不幸を数の大小で考えるべきでは……」
「ふふ……、いえ、失礼。貴女があまりにも真っ直ぐだったもので。しかし、こう考えてみてはいかがでしょう? 我々は富める者から貧しい者達へと富の再分配をしているのだと。我々がいなければ治療マギサービスは存在せず、富める者は病に怯え、貧しき者は貧しさに飢えてしまいます。我々がいたからこそ、富める者は病に怯える事もなくなり喜んで富を差し出し、貧しき者達は施しを受ける事ができるのです。ほら、誰も不幸になどなってはいないではないですか」
「そ、それは……」
シスターは言葉に詰まっている。確かにマギサービスが存在する事で経済が循環しているという側面もあるだろう。娯楽の少ない世界だから、どこかで高額な商品やサービスを売りつけないと、富は高所得者に集中したままだ。
「でも、それって詭弁ですよね」
「ほう?」
思わずポロリと口からこぼれた言葉に、教皇はグリンと首を回して反応する。やはりどこか人形のようで、ガラスのように青く澄んだ瞳で見つめられると居心地が悪くなる。
「高い利用料を取るのは別に治療マギサービスでなくてもいいはずです。他のマギサービスならともかく、治療マギサービスは生命に直結するものなんですから、水生成などと同様に安価で提供されるべきですよ」
「ははは。面白いことをいいますね。それはつまり、我々に『国営』となれと言っているのに等しいですよ? つまりダイナ王国は国として宗教を運用する、立派な宗教国家となるわけですね。ふふふ。私もそれは望むところです」
「い、いえ、そうではなくて、治療マギサービスを王国が運営すればどうかと言っているのですが……」
「そうなれば、リンター教は教義の中心である治療マギサービスを失う事になり、多くの人々が信仰を失うでしょう。心の拠り所を失った人々が、今より不幸でないと誰が言えるでしょうか?」
ダメだ。ああいえばこういうタイプで、全く通用する気がしない。
細かく突き詰めれば論理的におかしい部分もわかるのだろうが、人形めいた姿と笑っているのに目が笑っていない顔のせいで全く集中できない。
「それより、手が止まっていますよ? 治療マギサービスの復旧は至上命題です。傷ついて倒れている者たちのためにも、一刻でも早い復旧をお願いしたいですね」
「は、はい。すみません……」
もやもやとした気持ちになりつつも、言っている事は間違いないのでコードに集中する。人形のような顔が頭に浮かんでは消えていったが、次第に集中を深めていった。
//----
治療マギサービスのコードは大きく2つに分けられる事がわかった。
1つは実際に人々を治療する部分。やはりこちらが一番巨大なコードとなっている。複雑なコードも大部分はここだ。模倣を疑われると心配していたのだが、これでは模倣すら容易ではないだろう。
そしてもう1つが――
「うーん、こりゃあ刷新も必要になるよなぁ」
「なんというか……なんでわざわざ人の手を通すようになってるんでしょう?」
マギサービスの管理、つまり利用者のIDにあたるマギフィンガープリントの管理や売上の計算などを行なうための部分だ。そして今回のコンペで刷新の対象とされた部分でもある。といっても、そのコード量は治療のためのコードに比べれば非常に少ない。
せっかくのマギシステムだというのにほとんど自動化されておらず、人の手が必要になるようになっている。登録所での利用登録が手動で行われる事から始まり、売上の計算も、それに使う利用回数の計測すら人力で行われているようだ。
驚いたのが、「マギの発動」ですら人の手が介される事である。
マギサービスというのは、利用者がマギを発動しようとすると「マギを発動したいというリクエスト」を受け取る事になる。このリクエストに応じて、利用者のマギデバイスを通してマギを発動させるのだ。
いつくるかもわからないリクエストを待ち続けるなんて無理なので、僕の場合は当然ながら自動化している。しかし、治療マギサービスにおいてはその無理を通して理屈を引っ込めさせたらしい。どうやら、24時間人が張り付いて、リクエストに応じてマギを発動させているようなのだ。
そりゃあ、マギサービスの運営に多くの人が必要になるのもわかるし、利用者が増えてくれば限界が出てくるのも当然だ。
「うーん、これは、治療する部分と、管理する部分を作ったのは別の人なんだろうな。明らかにコードの質が違う。治療する方は非常に複雑だけどいちおう構造化はしてるし、マギランゲージの変わった書き方まで駆使して書かれてるから、かなりマギランゲージに精通した人が書いたのは間違いないね」
「はい。師匠に会う前の私なら、こういうコードを書いてたかも……」
「ははは。それと比べると、管理部分は明らかに治療部分を見よう見まねで書いたとしか思えないな。構造化も中途半端でところどころルールを逸脱してるし、大した事をやってないのにやたらと複雑になっている」
「教科書とかで良く見かける書き方ですね……」
ちなみに『構造化』というのは定義が様々であるが、ここではプログラムをいくつかの『
例えば、インターネットの通販サイトで何か物を買った時に行われる処理が、どのように構造化されるか想像してみる。一番上の層では「○○という物を買う」という抽象的な処理が書かれているだろう。
次の層では少し具体的になって「○○という物の値段を得る」「クレジットカードで代金を決済する」「○○を買った人に発送する」といった処理が書かれるだろう。
さらに次の層ではもっと具体的に「データベースに○○という名前の商品の値段を問い合わせる」「カード会社に通信して決済を依頼する」「発送システムに送り先情報と商品情報を登録する」といった処理が書かれているはずだ。
このように層を分けることで抽象度を高める事ができ、各層でやるべき事に集中する事ができるなどメリットは多い。例えば後から「対応するクレジットカード会社を増やしたい」という追加依頼が来ても、物を買う処理の中で修正するのはカード会社と通信している層だけで良いのだ。上手く構造化されていれば、修正範囲をきちんと切り分ける事ができる。
しかし、管理部分の方は構造化のルールを逸脱していて、処理の具体度もまちまちだったり、層がきちんと切り分けられておらず、混在していたりする。これでは無駄に複雑で混乱を招くだけだ。
残念ながら、こういった「間違った構造化」が当たり前となっているのが現在の一般的なマギエンジニアなのだ。これでは書いた端からスパゲッティコードになってしまうのも仕方ない。
「で、肝心の停止している原因なんだけど」
「うーん、私の方は見つかりませんでした……」
「僕の方はね、それらしいところがあったんだ」
「えっ! 本当ですか?」
驚いたパールに問題のコードを示してみせる。それは、保存されているマギフィンガープリントの一覧を読み込む部分の処理だった。起動時には必ず通る場所だ。
「うーん、別におかしいところはないような……」
「うん。だけどね、この処理は『異常なマギフィンガープリント』が存在する事を想定していないんだよ。全部が正常なマギフィンガープリントだと仮定して書かれているわけだね」
「え? それって当たり前なんじゃないんですか?」
「確かに普通はそうだ。『異常なマギフィンガープリント』が保存されているはずがないからね。だけど……これを見て」
そう言って示したのは、マギフィンガープリントの一覧データ。ぼんやりと明るいスクリーンの光を、パールのメガネが反射する。
「えっ……!? な、なんですか、これ!」
「明らかにおかしいだろ? マギフィンガープリントは長い桁数の数字のはずだけど、これは空っぽのデータだ。空っぽのデータをマギフィンガープリントとして扱う事なんて出来るわけがないよね」
「は、はい。これじゃあ途中で処理が失敗して止まっちゃいそうです」
というわけで、すぐに修正してみる事にした。少し緊張しながら、該当のデータを削除し、再起動を試みる。すると、マギデバイスが光り輝き、正常に治療マギサービスが開始した事がわかった。
「やった……! 直ったぞ!」
「やりましたね! さすが師匠ですっ!」
僕達がそう声をあげると、周囲からも歓声があがる。直った事を知らせるため、すぐに数人が部屋を飛び出していく。
「シライシさん……本当に、感謝いたします」
シスター・エイダが膝をついて手を組み、大げさに感謝を告げる。まるで豊穣をもたらした神に感謝するような態度だ。偉くもないのに偉くなった気分になるのでやめてほしい。
パチパチパチ、と音がしたので目を向けると、教皇が拍手をしていた。拍手の意味はこちらの世界でも変わりはない。賞賛を送るために使われる。
「お見事、お見事。さすがマギハッカーの再来と呼ばれるだけの事はありますね」
「い、いえ……僕には過ぎた称号ですが」
「ふふふ、謙遜は美徳ではありますが、過度な謙遜は時に人を傷つけます。注意することですよ」
「は、はぁ……」
「それにしても、停止の原因は何だったのでしょう? もう一度停止する可能性もあるのでしょうか?」
「あ、それなのですが」
空のマギフィンガープリントの事を教皇とシスター達に説明する。シスター達はなんとなく理解したようだったが、たった1つの空のデータが登録されていただけでシステム全体が止まってしまうという事が、ピンと来ない様子だった。
「なるほどなるほど。空のマギフィンガープリントですか。果たしてそれは、一体どのようにして登録されたんでしょうね?」
「わかりません……が、少なくとも登録所に詰めている職員によるものではないと思います」
「ほう? どうしてそう言い切れるのですか?」
「マギフィンガープリントが登録される経路には2種類あるのがわかります。1つは登録所の職員達が利用する『管理画面』経由でのもの。こちらは登録時に空のマギフィンガープリントは弾かれるようになっています」
「となると、もう1つの経路が怪しいというわけですね」
「はい。といっても、本来なら使われるはずのない経路なんです。こちらは恐らく『デバッグ用』、つまり開発者がマギシステムの動作を確認するために使うものでしょう。本番で稼働する際に消し忘れていたのではないかな、と……」
管理部分を作成したマギエンジニアのミスである。といっても、よくあるミスなのだ。デバッグのために一時的にコードを追加する事はよくある。それを消し忘れてしまうというのもありがちなポカだ。
「なるほど。そのような『裏口』が存在していたのですね」
「はい。ただ、この存在はマギシステムのソースコードを読まない限りはわからないはずなのですが」
空のデータを登録した誰かは、ソースコードを読んでこの『裏口』の存在を知ったのだろう。『裏口』経由の登録は遠隔で呼び出す事もできるため、犯人を特定する事は難しいのだが……。
「ふふふ。シライシさん。何やらお考えがあるようですね?」
教皇にはお見通しだったらしい。その顔は先程の人形めいた笑顔ではなく、少しイタズラっぽい子供のような笑顔だ。
僕はゆっくりとうなずいて、教皇に答える。
「はい。もしかしたら犯人がわかるかもしれません」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます