星野アツコのプログラミングなクリスマス (1)
12 月22 日。
そのビルは横浜駅西口から南西に800 メートル足らずの場所にあった。3 階建てでエレベータはない。雑居ビルという表現が最もふさわしい。ビルの外観は薄汚れていて、持ち主がメンテナンスに興味を持っていないことを主張しているようだ。郵便受けもないので、どんな企業が入っているのか、または入っていないのかさえわからない。わずかにその存在を示すものとして「ATP 横浜ビル」と素っ気なく書かれた表札が出ているのみだ。クリスマスシーズンに各地で繰り広げられるイルミネーション競争も、このビルには無縁だった。
ビルの3 階の一室で、2 人の男が深刻そうな顔で話していた。
「プログラマが足りないぞ」白髪の多い50 代の男が手にしたタブレットを弾いた。「なんでこんなに休暇が多い?」
30 代のメガネをかけた男はディスプレイから目を上げもせずに答えた。
「仕方ないでしょう。クリスマスなんですから。みんな家族や友達とバカ騒ぎしたいんですよ」
「時給の説明はしたのか?」
「1.5 倍にするという話ですか? もちろんしましたとも」
「それでも休むか。全く、使命感のかけらもない奴らだ」
「使命感と言われても、我々の仕事のバックグラウンドを知らないんですから、そんなもの持ちようがないでしょう」
白髪の男は別のプリントアウトを取り上げた。
「この予測の誤差は?」
「場所については誤差87.7 メートル以内、時間はプラスマイナス29 分といったところです」メガネの男はマウスを操作した。「もっとも場所の誤差は確率的な話で、実際はほぼ間違いないでしょうね」
「よりによって、ここか」
「そうです。この時期だとクリスマスイベントで混雑してるでしょうね」
「どうする? 本社に応援を要請するか?」
「もうやりました。あっちはあっちで手一杯です。やっぱりクリスマスですからね」
「くそ」
「ご心配なく。つてを辿って募集をかけてます。2、3 人なら何とかなりそうです」
「この前みたいな職業意識のかけらもないろくでなしのプログラマじゃ困るぞ。あいつのせいで、どれだけ後始末に金と時間がかかったことか......」
「大丈夫です。優秀なのを、と言っておきました」
「いつから来るんだ。今日か?」
「もう21 時ですよ。明日の朝10 時です」
「そんなに遅くて大丈夫か。説明にも時間がかかるだろう」
「いきなり本番に投入しようと思います。なに、優秀なプログラマなら、どんな状況にだって順応できるはずです」
12 月23 日。
星野アツコは内心の戸惑いを押し隠して、目の前に座ったメガネをかけた男性に訊き返した。渡された名刺には「アーカム・テクノロジー・パートナーズ 横浜支部 システムエンジニア 佐藤」とある。名字だけで名前はない。
「ええとつまり、こういうことでしょうか」アツコは手元のプリントアウトに視線を走らせた。「これから私は何かのシステムの一部のプログラムをいくつか作る。でも、何のシステムなのかは知らされないし、作成するプログラムがどの部分なのかも知らされない......」
「その通りです」
「ソースにコメントは入れない」アツコは続けた。「空白行を作らない。変数名は17文字以内とし、記号は使わない。変数名に大文字のW とT、小文字のu とz は使用しない。逆に、大文字のG、S、L、小文字のg、s、m、p のいずれか1 文字以上を必ず含めること......」
「その通りです」
佐藤はにこやかに答えた。その笑顔に、アツコは理由を質問しようという気勢を削がれてしまった。
アツコに変わって、隣に座っていた男性が口を開いた。アツコと同じく臨時で派遣されてきた40 代ぐらいのプログラマだ。説明が始まるまでの数分で、2 人は互いに自己紹介している。東海林、という名前と顔は、何となく記憶野を刺激したが、それを追及する前に佐藤が現れた。
「Java のクラス名は指定、public なメソッドはmain() のみ」東海林は言った。「private メソッドの呼び出し階層は2 つ以内にする、テストを含めた実行は指定のテスターツールを使用し、JUnit その他のツールは使用しない」
「その通りです」佐藤はまたもや微笑んだ。
「これらの制限の理由をうかがってもよろしいでしょうか?」
佐藤はまた微笑むと、手振りでプリントアウトを裏返すように合図した。アツコが裏面を見てみると、さらにいくつかの制限事項が並んでいて、最後に「上記の理由を質問しないこと」とあった。
アツコは東海林と視線を交わした。東海林の目は「うさんくさい」と告げている。きっとアツコの顔からも同じ言葉が読み取れたことだろう。
昨日の夕方、エージェントから突然の打診があった。23 日から25 日までの3 日間、臨時の開発業務に行く気はないか、という話だった。緊急にプログラマを必要としているため、金に糸目はつけない、とまではいかなくても、かなりの好条件でのオファーだった。祝日の23 日はアツコの仕事はなかったが、公務員の夫がゴルフ仲間との忘年会、中学1 年生の娘は友達の家でお泊まりパーティで、どちらも夕食が不要だった。新しい仕事を受ける機会をできるだけ逃さないことにしているアツコは、24 日の午後までなら、という条件で受諾した。24 日の夜は家族でささやかなパーティだし、25 日は家族揃ってみなとみらいにお出かけする予定だ。
どこの会社の仕事か、という質問に、エージェントは歯切れの悪い返事しか寄こさなかった。役所関係らしい、と聞き出せたのがせいぜいだった。具体的な社名や勤務地の連絡があったのも今朝になってからだ。
「詳しいことは実際にコーディングのときに説明します。よろしいでしょうか?」
アツコと東海林は、それぞれ頷いた。
「ありがとうございます。では、その下にサインと捺印をお願いします。印鑑なければ、拇印でも結構ですよ」
2 人が署名と捺印を済ませると、佐藤は満足そうに頷いて立ち上がった。
「感謝します。それでは、早速ですが、仕事にとりかかっていただきます。開発ルームへご案内しましょう。こちらです」
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
開発ルームは、応接室のドアの向こうにあった。足を踏み入れたアツコは、貧相な応接室とのギャップに驚くことになった。
ビルの外観からは想像もできないほど、明るく清潔な開発ルームだった。15 メートル四方の、落ち着いた暖色系の壁に囲まれた空間に、インテリア誌で特集されていそうなお洒落なデスクが等間隔に配置されている。アツコが開発ルームという言葉から連想するのは、身体を横にしないと通れないほどデスクが詰め込まれた部屋だが、ここではデスク同士の間に象が通れそうなほど余裕があった。壁にはセンスのいい抽象画や、風景写真などが飾られていて、スケジュール表やタスク表などは皆無だ。皆無といえば、どこのオフィスにもあるファイルキャビネットの類も全く置かれていない。おかげで、十分広い部屋がさらに広く見える。
「窓がないですね」東海林さんが囁いた。「全く」
アツコは頷いた。そのことは真っ先に気付いていた。本来なら窓があるべき方角には壁しかない。
デスクのいくつかにはプログラマらしき男女が座り、大きなモニタを睨んで忙しそうにキーを叩いている。全部で4 人。ほとんどはアツコたちが入っていっても、ちらりと見た程度だったが、ドアに近い位置の若い男性は仕事を中断して立ち上がった。
「新しい人ですか」20 代ぐらいの茶髪の男性は、アツコと東海林の顔を無遠慮にジロジロ見た。「2 人だけか」
「こちらは戸川くん」佐藤は2 人を紹介した。「こちらは東海林さん、星野さん。じゃあ、後は任せる」
「いいっすよ」戸川はぶっきらぼうに言った。
アツコは佐藤を見た。佐藤は頷いた。
「仕事の内容は戸川に聞いてください。後で入室カードなんかをお渡しします」
そう言うと、佐藤は開発ルームから出て行ってしまった。戸川が2 人に声をかける。
「じゃ、お二人さん、こっち来て」
二人が連れて行かれたのは、戸川の近くの並んだデスクだった。パワーのありそうなミニタワーのPC にデュアルモニタが設置されている。すでに起動していて、Windows ではないデスクトップが表示されている。Linux のようだが、ディストリビューションを示す壁紙などは一切なかった。
戸川はアツコの席で、早口に開発ツールについて説明した。Eclipse に似ているが微妙に異なるツールだった。ソースを保存するとコンパイルされる、という点は同じだ。
「まず簡単なやつから。星野さんはこれね」
戸川はA4 サイズのプリントアウトを渡した。中央に半透明の五角柱のイメージ、その下に問題文が印刷されている。
上記の図は、各辺の長さが82 の正五角柱である。以下の経路で各頂点を通るプログラムを作成せよ。
[c] → [b] → [b'] → [a'] → [e'] → [d] → [e] → [a] → [a'] → [d'] → [c'] → [c]
なお、[a] をx=0,y=0,z=0 とする。座標は小数点以下3 桁を切り捨てること。
「これだけですか?」アツコはプリントアウトと戸川の顔を交互に眺めた。「プログラムを作成せよ、と言われても......」
「簡単だよ。この手の図形タイプは、開始座標と終了座標を算出して、line() メソッドに座標を渡せばいいから。詳しい引数なんかは入力補完を参照して。それから東海林さんはこれね」
東海林に渡されたプリントアウトには、16 進数らしい文字列が無数に並んでいた。アツコは首を伸ばして問題文を読んだ。
入力値として与えられる上記の文字列は、0~9、a~f までの英数字のみが出現する。X 方向、Y 方向の文字数はそれぞれ64 である。x=42、y=7 を起点とし、同じ文字が2 回以上連続する箇所を探してマーキングするプログラムを作成せよ。探索方向は上下左右斜めのいずれかとなる。連続文字が出現したら座標をマーキングし、発見された箇所の反対側へ進む。8 方向のいずれにも出現しなかった場合は、最小文字の方向へ進み探索を続ける。端に到達した場合、反対側から続ける。マーキング数が17 に達した場合、そこで処理を終了する。最後の連続文字は2 度マーキングすること。
「マーキング?」東海林は首を傾げた。
「marking() メソッドに座標を渡すってこと。入力補完見ればわかるから」
「たとえば」東海林が文字列を指した。「目で順番に見つけていって、座標を直書きしても?」
「ダメダメ」戸川は首を横に振った。「必ず既定のメソッドを通してね。じゃ、二人とも始めて。クラス名は先頭に書いてあるから。できたら教えて」
戸川はさっさと自分の席に戻っていってしまった。東海林が肩をすくめると、割り当てられた席に移動してキーを叩き始めた。仕方なくアツコもモニタに向かうと、ロジックを考え始めた。
まず開始ポイントの[c] の座標を得る必要がある。正五角形は、対角線で3 つの三角形に分割できるから、内角の和は540 度。5で割った108 が内角一つの大きさだ。[a] から[c] の角度は(180 - 108) ÷ 2 = 36 となる。[a] から [c] までの距離は、36度、72度、72度の二等辺三角形の長い辺の長さとなるから......
アツコが指定されたクラス名は、ia.ia.hastur.x2.cfayak.GT7700088s07f だった。パッケージ名から何のシステムかを類推するのは無理のようだ。アツコはmain() メソッドを作成すると、思いついた計算式をコーディングしていった。
ちらりと隣を見ると、東海林は悩む様子もなく滑らかにキーを叩いていた。脳と指先が直結しているタイプのプログラマらしい。またしても、どこかで会った、という漠然とした記憶がよぎったが、すぐには思い出せない。後で確かめようと決めて、アツコは数式に集中した。科学技術系の仕事に派遣されることもあるので、基本的な方程式程度は頭に入っているが、元々、文系脳なのでこの手のプログラミングは得意とは言えない。
先に完成させたのは東海林だった。東海林が手を挙げると、戸川はすぐに飛んできてモニタを覗き込んだ。
「ああ、ダメダメ」戸川はすぐに目を上げた。「1 と素数以外の定数は使わないで。この、-1 はNG」
東海林はムッとした顔で訊いた。
「じゃあ、-1 を使いたい場合はどうすれば?」
「2 から 3 を引けば、-1 になるでしょ」
「そんなこと、さっきもらった制限事項にはなかったけど」
東海林が差し出した制限事項の一覧を、戸川はざっと眺めた。
「あ、これ改訂前のプリントだ。後で最新のを渡すから、ソース修正しておいて」
アツコは自分のソースを見直した。素数以外の定数をいくつか定義している。まず180 だ。180 を素数から算出するには......5×37 が185、そこから5 を引く、か。思わずため息が出た。数値一つをコーディングする際にも、いちいち考慮が必要とは。
隣から似たようなため息が聞こえた。顔を横に向けると、東海林がうんざりしたような顔でアツコの方を見た。相手の顔に浮かんでいる表情が、自分のそれのコピーのようで、二人はどちらからともなく苦笑した。
アツコがプログラムを完成させたのは、10 分後だった。ざっとチェックしてから、戸川を呼んだ。ほぼ同時に、東海林もプログラムの修正を終えた。
「うん、よさそうだ」戸川はあっさり告げると、内線電話を掴んだ。「コミットして。あ、えーと、07f と33g が終わりました。送出できますか......はい、はい、え? マジですか?」
戸川が驚いた声で訊き返した。アツコは首を傾げながら待った。戸川は何かに抗議しているようだ。
「......いきなりですか......これまで......はい......はい......そう言うなら......わかりました。じゃ、行きます」
受話器を置いた戸川は、肩をすくめてアツコと東海林を見た。
「今、作ったもらったプログラムを送出するところを、おたくらにも見せろってことなんで来て」
送出? アツコは東海林と顔を見合わせたが、戸川の後についていった。
戸川は開発ルームの反対側のドアを、カードキーで開けた。中は薄暗かったが、戸川は気にすることなく足を踏み入れ、アツコたちにも入るように促した。中に入ったアツコと東海林は、思わず立ちすくんだ。
そこは開発ルームの半分ほどの面積の部屋だった。ドアのすぐ横から部屋の奥までの壁面は、50 インチぐらいのテレビで埋め尽くされている。全てのテレビには、それぞれ異なる映像が映し出されていた。どれも同じ時間帯なので、ライブ映像のようだ。いくつかの映像に、アツコは見覚えがあった。クイーンズスクエア、ランドマークタワー、赤レンガ倉庫、氷川丸......横浜市内の観光スポットだ。その他の映像は、オフィス街や工場、さびれた商店街、スーパーのバックヤード、ホテルのロビー、解体中のビルと脈絡がない。共通しているのは、全ての映像の右下に、マイナスの数値がインポーズされている。桁数は2 桁から6 桁とバラバラだ。いくつかの映像の数値は、たまに変化している。
「やあ、どうも」近くのデスクから佐藤が立ち上がった。「自分たちが作ったプログラムが何に使われるのか知りたいのではないかと思いましてね。今まで、派遣の人には説明とかしてこなかったんですが、ちょっと方針を変えることにしたんです。クリスマスに、目的もゴールもなしにやる仕事って、つらいですからね」
「何を見せていただけるんですか?」アツコは訊いた。
「そのモニタです」佐藤はテレビの1 つを指した。「何が見えます?」
アツコと東海林は指定されたテレビに近付いた。白い外壁の建物の玄関が映っていた。玄関前の駐車場には数台の軽トラックが停車し、作業服を着た男性が、台車でダンボール箱をいくつも下ろしている。入り口の脇に太いゴシック体で「清水羊腸輸入(株)」と社名が見えた。この映像の数値は-2 で、見ているうちに、-1 へと変わった。
「どこかの会社みたいですが」
「横浜港近くの輸入会社です」佐藤は説明した。「画面手前に停まってるトラック、その近くのブロック塀をよく見ていてください」
わけがわからないまま、アツコと東海林はテレビに顔を近づけた。液晶テレビかと思っていたが、その画面の質感から有機EL のようだった。アツコは自宅にある6 年前の32 インチ液晶テレビと比較してしまい、夫がそろそろ買い換えるか、と言っていたことを思いだした。これを1 台、もらっていけないものか。
画面右下の数字がゼロに変わった。同時に佐藤が少し緊張した声で言った。
「始まります」
何が、と問い返す間もなく、それは始まった。
ブロック塀の中央に、何の前触れもなく1 本の縦線が出現した。亀裂にしては、直線的すぎる、と思ったとき、縦線が左右に分裂し、続いて等間隔に横線が重なった。
聞き慣れた音がアツコの耳に届いた。キーボードの打鍵音だと気付く。佐藤が画面を見ながら、すごい勢いでキー操作をしているのだ。佐藤がかけているメガネの表面に、小さな光が踊っている。スマートグラスだったらしい。
ブロック塀に出現したグリッドが、さらに上下左右に増殖した。中央部分は漆黒で、周辺はほぼ透明だ。グリッドの一辺は2、3 センチぐらいか。厚みはなく、空間そのものに描かれた幾何学模様のようだ。
不意に、グリッドの漆黒部分から何かが出現し、アツコは息を呑んだ。
鋭く尖った鋭角上の破片。ガラスの破片、と分類したアツコは、次の瞬間、それを訂正することになった。生物の指に繋がっているのが見えたからだ。恐ろしいほど鋭く長い爪を持つ指......いや、手だ、7 本の指が生えた手がゆっくりと侵入しつつある。
アツコの膝が笑った。床にへたり込む、と思ったとき、腰の下にキャスター付きの椅子が滑り込み、アツコの身体を受け止めてくれた。戸川がタイミングよく押しやってくれたのだろうが、アツコは礼を言うどころではなかった。ドサッと何かが落ちる音がしたので、そちらを見ると、東海林が床に座り込んでいるのが見えた。
「タイプNG-4」佐藤が猛烈な勢いでキーを叩きながら呟いた。「それほど大きくない。はぐれものだな」
空間上に開いた裂け目から、もう1 本の手が飛び出してきた。周囲を探るように、のろのろと動いている。トラックから荷下ろししている作業員は、まだ異変に気付いていなかったが、3 本目の手が出現したとき、ふと顔を上げてブロック塀の方を見た。音か臭いか、それとも何らかの瘴気を感じとったのか。いずれにしろ、空間から生えている3 本の手を目にしたとき、作業員はダンボール箱を放り出して尻餅をついた。その若い顔が驚愕で歪んでいる。
裂け目から別のものが出てきた。手ではない。アツコはそれを表現する言葉を検索し、日常では滅多に使用することがない「触手」という単語に行き着いた。決して正体を知りたくない粘液に覆われた、7、8 本の触手が勢いよく動きながら、まるで視覚器官を持っているかのように作業員の方に向かって伸びだした。作業員は絶叫の形に口を開いた。
「送出」佐藤が勝ち誇ったように呟き、勢いよくEnter キーを叩いた。
数本の触手が作業員の身体に巻き付こうとしたとき、不意に背後のグリッドが揺らいだ。続いて周辺部のグリッドが次々に消滅し始める。消滅は連鎖反応的に中央部分への波及していった。
危険を察知したかのように、3 本の手はサッと引っ込んだ。触手群も慌てて元に戻ろうとしたが間に合わなかった。グリッドが完全に消滅すると同時に、取り残された触手はぶっつりと断ち切られて地面に落ちた。作業員は我に返ったように跳ね起きると、おそらく悲鳴を上げながら建物の方へ全力で逃げていく。
妙な息苦しさを感じたアツコは、自分がずっと息を止めていたことに気付いた。呼吸を再開すると、酸素を送り込まれた脳がようやく理知的な思考するようになる。
地面に落ちた触手は、未練がましくのたうち回っていたが、次第にその動きは緩慢になり、やがて停止した。同時にそのおぞましい肉塊が急速に崩壊し始めた。分子間結合を強制的に解除されたようにバラバラになり、細かいかけらとなって蒸発していく。しばらくして、先ほどの作業員が何人かの男たちと一緒に戻ってきたときには、コンクリートの上の染みでしかなくなっていた。
「シークエンス終了」佐藤が言った。「お二人とも、いいお仕事でした」
アツコは口を開くどころではなかったが、東海林が立ち上がると、佐藤と戸川を交互に睨み付けた。
「説明をしていただけるんでしょうね」
「もちろんです」佐藤は立ち上がった。「こちらへどうぞ」
とんだクリスマスイブイブだわ、とアツコは思った。
(続)
この物語はフィクションです。
コメント
匿名
クトゥルーだー!やばい楽しみ!!!
tako
ia.ia.hastur wwww
こりゃヤバイ
暇つぶし中の名無しさん
最初の段落、クリスマスシーズ「ン」ですかね?
リーベルG
暇つぶし中の名無しさん、どうも。
「ン」が抜けてましたね。
ねざーど
アーカムって名前だけで胡散臭いと思ったんだよ。(頭抱え)
p
まさか東海林さんとアツコさんのSAN値が削られる場面がみられるとは思わなかったw