314手目 開発現場の嘆き
※ここからは、松平くん視点です。前話の前日の話になります。
人通りの少なくなった、深夜の大通り。
俺と磐は、首都工近くのコンビニへ買い出しに出かけていた。
明日も講義はある。だが磐は、今日中にプログラムを組むと言って聞かなかった。
「松平、こういうのは気分の問題だぜ」
磐はローラーブレードで滑走しながら、買ったばかりのアイスコーヒーを飲んだ。
「だけど仕様もまだだろ」
俺がそう言うと、磐は急ブレーキをかけて半回転した。
危ない。
「俺の頭のなかでは、だいたいできあがってる」
マジか?
俺はどういうふうに組むのかたずねた。
「言語はCかC++でいこう。文字を数値計算できるし、そこそこ速い」
「それならCにしてくれ。制御で触ってる」
「オッケー。基本的な発想は単純だ。暗号文に対して、鍵候補を……」
a -> ... z -> aa -> ... -> zz -> aaa -> ...
「という風に、回してやればいい」
そこは昼間の会議で出たアイデアだ。
さすがに俺も工学部だから、どういう感じで組み始めるかもみえた。
「暗号文に鍵を当てる関数を組んで、それをfor文で繰り返せばいい」
「なんだ、松平もわかってるじゃん」
「問題は平文のチェックだ。でたらめな文字列かどうかを、見分けないといけない」
ようするに、こうだ。今からやる作業は、アルファベットをAから順番に総当たりさせる。仮に鍵が8文字だとしても、26の8乗。俺の計算では──
2088億2706万4576通り
という、とんでもない組み合わせになる。これを人間の目でチェックするのは不可能。平文がきちんとした文章になっているかどうかも、コンピュータにチェックさせるしかない。そのチェック方法が思いつかなかった。
ところが磐は、この点に自信があるらしかった。
「そんなに心配するほどじゃない。とりあえず、平文は英語か日本語にしぼるぞ」
「ほかの言語の可能性は考えないのか?」
「バージニアがヒントなら、英語が第一候補だろ」
そこは反論できないが……まあ、地球上の言語全部はどうせチェックできない。
どこかで妥協するしかなかった。
「まず、どうやって英語をチェックさせるんだ?」
「英文校正アプリを使うのさ」
俺は、なるほど、となった。
正しい英文かどうか、調べるアプリはいくらでもありそうだ。
「だけどアクセス規制されないか? 1秒で何十、何百とチェックさせるわけだろ?」
「あー、それじゃ足りないな。仮に1秒で100個チェックさせても、1日で800万と6400。これで26の8乗を割ったら、だいたい2万4000日かかる。俺たちが先に死んじまう」
俺は脳内で暗算してみた──たしかにそれくらいになる。
「逆算すると……2週間で終わらせるには、1秒で17万以上処理させないといけない。1ヶ月でも9万弱。そんなアクセスを許すアプリやWebツールがあるとは思えないが」
「だいじょうぶ。さっき検索したら、英文校正ツールのオープンソースをみつけた。機能は誤字チェックしかないが、俺たちの目的はそれだけだから十分だ。それを電動研のメモリ64ギガバイトPCちゃんたちで、並列処理させればいい。爆熱になるが、水冷式だからノープロブレム」
「部屋が真夏日になりそうだな」
「エアコンの電気代も、どうせ大学持ちだ」
だいじょうぶか?
あとで大学から大目玉を食らうのだけは、かんべんして欲しい。
とはいえ背に腹は代えられないから、その案を俺は飲んだ。
ここでサークル棟に到着。俺たちは電動研の部室にもどった。灯りはつけっぱなし。パソコンのディスプレイには、テキストエディタの黒い画面が見えた。
俺はカップラーメンにお湯を注ぎ、それから会話を再開した。
今度は日本語だったときのケースをたずねる。
「日本語ならヘボン式ローマ字だろ? ヘボン式ローマ字の校正ツールってあるのか? しかもオープンソースで?」
「ヘボン式ローマ字は統計的に解析できる」
「というと?」
磐はホワイトボードに一文を書いた。
BANKAZUMAHASYUTOKOUNOACEDESU
こういうところでアピールしなくてもいいだろ。
「この文章がどうしたんだ?」
磐は赤ペンで一定の文字に矢印をつけた。
「AAUAAUO……母音?」
そうだ、と言って、磐は赤ペンでホワイトボードを叩いた。
「日本語は子音+母音の繰り返しが多い。これを統計的に調べる」
俺は感心した。
もちろん子音+母音でないケースもある。NKは子音が連続しているし、OUは母音が連続している。だが、統計的には子音+母音が多い。その割合を調べて、誤差を設定し、その範囲に収まっているものに限定すればいい。
さらに、俺にもアイデアが浮かんだ。
「QQ、XXみたいに、ヘボン式ローマ字でありえないのは弾いてもいいな」
「たしかに。そういうフィルターも入れておくか」
俺たちは夜食のカップラーメンを食べて、さっそく作業にとりかかった。
ふたりで1台ずつパソコンを使い、開発プラットホームでコミットしながら作業した。
日付が変わる頃には、鍵を回すプログラムが完成した。
8割方、磐のおかげだった。
しかしここからが問題だった。英語と日本語のチェックシステムを構築しないといけない。このレベルになると、俺にはよくわからなくなってきた。
オープンソースの中身を見ても、なにをしているのか判然としないのだ。
とりあえず磐の指示に従って、依頼された変更をほどこしていく。
ところがそれもだんだん行き詰まって、俺はギブアップした。
「すまん、俺の実力だとここが限界だ」
「おいおい、丸投げか?」
俺はもういちど謝って、のこりの部分は引き受けてもらうことになった。
カタカタと、キーボードを打つ音だけが聞こえる。
なにもしないのはさすがに悪いと思って、ヘボン式ローマ字で使わない文字列リストを作った。
BBBみたいな同じ子音の3連続は、わりと弾ける。NNNは例外だ。
2連続の同じ子音は、なるべく残しておいた。SHIPPAIは日本語だがPP。
QとXはどうするか……1文字くらいは紛れ込む可能性があるか?
例えば会社名が出てくるかもしれない。弾くのはQQとかXXあたりにしておこう。
俺はリストがけっこうな量になったので、
「案外、総当たりでも時間はかからないかもな。パターンはだいぶ減らせる」
と告げた。
すると磐は、ディスプレイとにらめっこしたまま、
「なあ、松平、折口研ってなに作ってるんだ?」
と、いきなり質問を飛ばしてきた。
「医療用ナノマシンの研究をしてるらしい……が、俺は直接関わってない」
俺が担当しているのは、シミュレーションデータを収集したり、3Dプリンタで大きめの見本を製作して、それを学外のひとに見せたりする役だった。2年生で、まだろくな回路も書けないのだから、しょうがないと言えばしょうがない。1年の平賀のほうが、まだマシなものを作れる、というレベルだった。
それを聞いた磐は、
「カネはある感じなんだな」
と言った。
「カネ? 予算のことか? 医療系だから出やすいとは聞いた」
科研費以外にも、外部資金をいくつか取っている、という話だった。
磐は手を休めて、大きく背伸びをした。椅子にもたれかかる。
「首都工だと、卒研は4年生からだしなあ。俺も大学の機器を使い倒したいぜ」
「うちもそうだぞ。正式な卒研は4年生だけだ」
「そうなのか? だったら違法じゃね?」
「ボランティアだからな。単位は出ない」
コピペレポートがバレた結果なことは、黙っておく。
磐はテーブルを指でこづいて、リズムをとった。
ずいぶんと古びたテーブルだったから、脚の部分がガタガタと揺れた。
「なんで日本は、研究費をこんなにケチってるんだろうな。首都工の施設もボロボロだ」
「そりゃ経済が伸びてないし、高齢化で医療費がかさんでるからじゃないか」
磐は椅子にもたれかかったまま、キャスターをくるくるさせて回転した。
視線は虚空を見つめている。
「……こうなったら、N資金で一発当てるしかない」
おいおい、俺はタメ息をついた。
「N資金なんて詐欺話だと思うがな」
「松平も、ちょっとくらい期待してるだろ」
「してない」
「ほんとに? 10億あったら、ひとり1億はもらえる」
俺は夜食のチョコレートのふくろを開けた。
磐に向けて、一個放り投げる。
磐はうまくキャッチした。
「俺と裏見と大谷で、もう話し合ってある。金が実在しても着服はしない。銀行に眠ってようが山に埋めてあろうが、手を出したら犯罪だ」
磐は肩をすくめた。
「たしかに……それじゃ、開発現場は割り当てられた仕事だけやりますか」




