megamouthの葬列

長い旅路の終わり

無N.O.の人

「頭の悪い奴にはできないが、本当に頭の良い奴はこんな仕事はしない」

とは、ある戦闘機パイロットの言葉らしいが、プログラマも似たようなもので、多くの技術書や、他人のコードを読み下し、膨大な知識を頭の中に放り込まないとまともなプログラムが書けない反面、それに見合った報酬はもらえないし、営業から居丈高に、あるいは哀願されて急なオーダーが通され、ひどいプレッシャーの中で間に合わせの実装をしたり、その後、理不尽としか思えない理由で仕様が変更されて、ようやく書けたコードを削除する時、そしてそれが原因でバグが発生した時は特に、歯ぎしりするほど悔しくなって「何を好き好んでこんな仕事をしているのだ」と思う事がある。

そんな私がプログラマになったのは、ほぼ成り行きに近いものがあるが、幾つか決定的な出来事があったようにも思う。その一つを今日は思い出してみたい。

無能の人

まだ大学4回生だった頃、とっくに講義に出なくなっていて卒業の見込みもなくなってしまっていた私は、気が向くと普通の通学路とは別の道を通って大学に行った。住宅街の中を通って、坂を登るそのルートを行くと、在校生にほとんど会わずに、また講義棟を見ることもなく、直接サークルの部室に向かえるのだった。

人気のない部室に入ると、私は誰かが置いていったCDをかけたり、本棚にある漫画を読んで時間を過ごした。その頃の私は、サークルの活動からは距離を置いていて、講義の合間にやってきたサークルの後輩と雑談をしたり、隣の部室にいる年上の知り合い(ようするに留年生である)と麻雀をしたりして夕方までの時間を過ごしていた。

こう書くとずいぶん楽しそうだが、実際には、将来の見えない不安と罪悪感で、心の休まらない日々であった。ようするに私は現実から逃げていたのだ。今で言えば、会社にも学校にも行かずにネットゲームをし続ける引きこもりのような心境だろうか。



その日も私は、同じく今セメスターの単位を諦めたダメ先輩たちと麻雀を打っていた。


「そういえば、もうすぐ学祭やな」

牌を切りながら、誰かが言った。

「講義も休みやから、連休やけど、俺らには大して関係あらへんな。」

何しろ俺らは毎日が日曜みたいなものやから、と5年は講義に出ていないと豪語する先輩は笑った。

「そういえば、学祭って誰でも部屋借りられるらしいですよ」

と私は言った。サークルの活動で、前に、何度か部屋を借りたことがあるのだが、講義棟の部屋を展示などで借りるには、公認サークルである必要はなく、むしろサークルの実在性すら問われないことを私は知っていたのだ。

「へえ。そんなもんなんやな」

と、次の手番の先輩が大して興味もなさそうに牌を切った。捨て牌から推測するに、早々と和了(あが)りそうだ。

「勝手に展示とかしたらおもろいかもしれんな。」

ふと、対面の男が言った。

「何をするんや?雀卓でも置いて麻雀するか?」

「麻雀研究会か」

「それは実際にあるしな」

確かに。私は先輩の上がり牌を切らないように、微妙に手を変えて牌を捨てた。

「石でも展示したったらいいんちゃうか」

つげ義春の『無能の人』みたいやな」

「サークル『無能の人』の部屋行ったら、無造作に石ばっかり置いてあったら、ちょっとおもろいな」

と、和了(あが)りそうな先輩が、ツモった牌を無造作に捨てる。

「サブカル臭がなんとも、やけどな」

「部屋だけでも抑えときましょうか。何も思いつかんかったら、石でも適当に置いとったらいいんで」

と私は言った。

「ええの?面倒くさいんちゃう?」

「だって他にやることがあるわけでもないし」

私は答えた。



そうして、私達は確たる目的もなく、講義棟の一室を借りた。学祭の実行委員会に展示内容を聞かれたので、「石展」だ、と言っておいた。

しばらくして、久しぶりに部室に訪れると、綺麗な石が机に山と積まれていた。「この前みんなで河原で拾ってきたんや」とダメ先輩たちが言った。なんだ結構乗り気じゃないか。と私は思った。

後から講義を終えたサークルの後輩たちがやってきて、石の山を見つけて「何ですかこれは」と驚いて言ったので、私は、事のおおよそを説明した。

「先輩たちも学祭やるんですか。どうせなら、アトラクション的のものも作りましょうよ」とよくわからないことを後輩たちは言った。そして、そのまま近くのホームセンターに行って、釣り糸や塩ビパイプなどを買ってきて、石の滑り台や、石のケーブルカーなど、よくわからないものを作り始めた。

なるほど、こうすれば、少しは見栄えがするかもしれないな、と私は思った。


さらに翌週、部室に行くと、石をイメージしたマスコットキャラクターのようなものが印刷された紙が置いてあった。「作ってみたんです」と後輩の一人が誇らしげに言った。そういえば彼はイラストが得意で、よく自作のTシャツなどを作っていた。

「材料費は出すから、アイロンプリントでこれのTシャツ何枚か作ってくれへんか?あとこのキャラのデータ送って欲しい」

と私は言った。

「いいですよ。何かするんですか?」

「わからんけど。一応」

なんだか知らないが、「石展」は妙な盛り上がり方をしているようだった。そうなると私も何か作らなければいけないような気がしてきたのだ。


自宅に帰った私は、後輩から送られたデータをいじくりながら、どうしようかと考えていた。その頃の私は、少しプログラムに手を出していて、サークルのホームページなどの掲示板のCGIPerlで書いたりしていたので、部室に転がっている旧型のPCを使って、何か展示物が作れないか、考えていたのだ。

やはり、エンターテイメント性を考えるならゲームだろう。と私は思った。マスコットキャラは顔のある石に手足が生えているようなデザインだったので、なんとなく格闘ゲームにしようと思った。

部室のPCでも動くような、旧世代のDirectXで動くフレームワークを探さないといけなかった。当時、よくそのブログを読んでいたやねうらお氏がYaneSDKだったか、DirectXがバインドされたスクリプト言語を作っていたので、それを採用することにした。

ジョイスティックでキャラが上下に移動するサンプルはすぐにできた。なんとなくいけるかもしれないな、と私は思ったが、そこで、早々と飽きてしまってもいたので、そのまま寝てしまった。

前夜

そうこうしているうちに学祭の前日になった。ダメ先輩たちはどこかに行ってしまったので、とりあえず私は後輩の手を借りて、石を丁寧に並べ、塩ビパイプで作られられた「石滑り」や「石ケーブル」などの「アトラクション」を設置した。

なんとも言えないシュールな展示だった。広々とした講義室の机に、点々とおかれた石と、意味不明の粗末なアトラクションという名のオブジェ。この部屋に合理的な説明をつけるとすれば、閑散とした資材置き場か、何かの魔術を行った後。といった印象だろうか。

そこにTシャツを作ってきた後輩が合流した。さっそく石キャラのTシャツを5枚ほど、入り口の近くにおいてみる。

ギャラリー・ショップ的な雰囲気が足されて、少しはマシになった気がするが、やはり決定的にエンターテイメント性に欠けていることは明らかだった。後輩たちのテンションも明らかに盛り下がっていた。

私は腹をくくった。

「今からゲーム作るわ」

「えっ」

と後輩たちが言った。「今からですか?」

「うん。部室にPCあるし、データーは持ってきてあるから。」

私は部室に戻って、CD-Rに焼いた作りかけ(といってもサンプル程度だが)のゲームデータとyaneSDKのリファレンスを部室のPCで読み込むと、そのままプログラミングを始めた。

当時は、スマホテザリングはおろか、WiFiすら部室になかったので、部室のPCはインターネットに接続されていなかった。なので、私は矢継ぎ早に後輩に指示を出した。

「背景になる画像をいくつか持ってきてくれ」

「君は、効果音だ。格ゲーで使えるやつ。ネットでもなんでもいいから適当に拾ってきてくれ」

「えっと、君の下宿は大学のすぐそばだったな、とりあえず夜2時ぐらいに夜食を持ってきてくれるか」

後輩は戸惑いつつ、めいめい家に帰った。

私は古いCRTのボヤケた文字に苦戦しながら、格闘ゲームを作り始めた。


まず、マスコットキャラをただ表示するだけでは、動きが足りないことがわかった。格闘ゲームというのは、キャラが移動していない間も、息遣いなどでキャラが常に動いていないとダメなのだと、その時気づいた。

だからといって、素材はこれ以上ない。私はキャラの頭と体のパーツを分離し、常に頭を上下運動させることにした。なんとなく格闘ゲームっぽくなった。困ったのは、どうも頭の移動ルーチンにバグがあるらしく、段々と頭が上空に浮かび上がっていき、10分ほど放置すると、頭だけが画面の外に出てしまうのだった。

とにかく時間がないので、そのままにした。パンチとアッパーとキックはデータを適当に編集してパターンを作って、ジャンプは同じ姿勢のまま上昇、必殺技は残像(同じパターンを座標と透明度をずらしながら表示すればよい)で誤魔化した。

続々と後輩たちが帰ってきて、素材が集まってきた。

格闘ゲームと言ったのに、背景係はなぜか能舞台とか、イルカが水面から飛び上がっている画像などを持ってきた。まあいい、時間がない。

効果音係が帰ってきた。格闘ゲームと言ったのに、なぜか生生しい呻き声や吐息、何かを包丁で切る音を持ってきた。まあいい、時間がない。

私は素材をすぐにゲームに組み込んだ。能舞台の真ん中で呻き声を上げながら頭と胴体が分離するキャラが飛び跳ねる光景は彼らの爆笑を誘った。「これいいですよ!」と彼らは嫌味なく絶賛するのだった。

終電がすぎても、私は黙々と必殺技(方向キーの入力キューを判別して、ストⅡ風のコマンド入力を実現した)の実装や、ダウン時のスローモーション処理などを実装した。

夜半、夜食係が到着した。彼が買ってきてくれたサンドイッチを頬張りながら、私はその時点のゲームを見せた。「もうこんなに出来てるんですか」と後輩は素直に驚いた。とはいえ、敵キャラ(プレイヤーと同じ石キャラの色を変えただけ)は動かないし、まだまだ未実装の部分がある。というか、どこまで実装するつもりなのか、その時点では自分でも見当がついていなかった。

学祭の前夜の午前2時半。部室棟に、まだちらほら人が残っていることに私は気づいた。看板を作るためにトンカンと金槌を振るう音、最後のバンド練習に明け暮れるもの。皆めいめい残された時間を過ごしている。

そうか、私はこういう時間を過ごすことを望んでいたのだ。と私は思った。まるで明日には人生が終わってしまうかのように、結局は何もできないかもしれないのに、それでも何かを作り続ける時間。

私の精神は途方もなく高揚していた。後にも先にも、プログラミングというものが私の魂をあれほどまでに燃やしたのはあの時が最初で最後であった、と今は思う。

石展

夜が明けた。私は敵CPUの処理を実装していた。作り始める前は実際どう実装したらいいのかさえ、さっぱりわからなかったのだが、プレイヤーとの距離、現在の自分の位置と、ランダム要素を組み合わせて、適当に技を出したり移動したりするだけの処理を書いてみると、何故かそれなりに敵CPUしていた。

ゲームのシステムとしては、敵を倒すと、さらに強い敵がでてきて(といっても外見は全く同じなので、背景だけランダムで変わる)、延々と敵が強くなり続けてクリアなどは特にない、というロクでもないシステムであったので、どこかで必ずプレイヤーを殺す必要があった。

なので、最強に近くなると、敵CPUは間合いに入るやいなや急速に接近して、必殺技を繰り出し、浮き上がったプレイヤーを連続で空中必殺技で仕留めるという理不尽さだった。

朝、出来上がったゲームを、私はPCごと、展示会場に運び込んだ。気を利かした後輩が、家のジョイスティックを持ってきてくれて、どうにかゲーム筐体っぽくなった。

ゲームは「石げんか」と名付けられた。後輩が必殺技の出し方などを記した、手書きのインストラクションシートを作ってくれた。

それらが、設置された展示場をざっと見渡すと、昨日より格段にエンターテイメントになった気がしたので私は満足した。



やがて、開場時間になった。一晩寝ていなかった私は、展示場の端に座ってうたた寝をしていた。

まばらな来場者が、おそるおそる中を覗いて、自作の格闘ゲームに気づいて、おずおずと入ってくると、やがてジョイスティックに手を伸ばした。

やがて、キャラの出すうめき声に混じって、嬌声が上がる。それをまた廊下を歩く他の来場者が怪訝な顔つきで見ている。

全てが満足だった。それは幸せな眠りで、夢だった。




いつの間にか本格的に眠っていたらしい私は、誰かに揺り起こされた。

ダメ先輩たちだった。

「お前さあ、なんでこんなゲーム作ったんだよ」

と彼らは笑った。

「ひどいなあ。まったく、この展示はひどい!」

とダメ先輩は満面の笑みで叫んだ、私はまどろみの中で微笑んでそれに答えた。


VITAMIN

VITAMIN



告知

どうもこのブログをtwitter経由でご覧くださる方が多いようなので、更新情報を流すtwitterアカウントを作りました。

twitter.com

意味があるかわかりませんが、更新情報を知りたい方はフォローくだされば光栄です。

あと、フォーム的なものもこのブログにありませんので、DMも無差別に受け付けております。
返信するかどうかは気分しだいですが、何かありましたら、こちらまで。

はいはい。みなさん。落ち着いて。

間違いですよ。

詳しくは、書けませんが、

先日、僕の方から病院に行ったのです。

相談の内容は、いつのまにかブログがBuzzって1000ブクマとか10万アクセスとかいったことです。

そしたら、逆に疑われてしまいまして、

尿検査をうけました。

何の、問題もありません。尿酸値が痛風寸前と言われたぐらいです。

ずべて、フライングのニュースです。

これから、医者と話をいたします。

megamouth




適当に書いた記事がBuzzると、どうなるか


これだけで投稿すると怒られそうなので、以下、いつもの「懺悔」です。

元々このブログ、月間PV1000ぐらいで、固定読者もだいたい10人ほどはいるかなあ、という程度のブログだったのですが、
11/27の午前2時ぐらいに「消えたプログラマの残したものは - megamouthの葬列」というエントリを書いて、
ふむ、これはなかなか上手くかけたな。と自画自賛して、あとはマイスリーとブラックニッカ(真似しないように)で晩酌して寝たわけです。

朝起きると、早朝からなんか異様なブクマ数とtwitterだったので、こりゃbuzzったな。とその時は、ほくそ笑みました。

2011年頃のエントリを見てもらえばわかりますが、元々私は、buzz狙いのエントリしか書かない、阪神で言うと、打率1割台でホームランを4本ぐらい打つ、往年の川藤みたいなブロガーだったわけなので、Buzzることにはある程度慣れている面があります。

しかし、ブクマ数やtwitterの言及数を昼頃に再確認すると、先のエントリよりbuzzってるのは
業務改善を現場に求める狂気 - megamouthの葬列
だったわけですよ。そっちかよ!っていうのと、こりゃマズい。というのがありました。

というのもこのエントリ、元々知りもしないトヨタカイゼンの話から始まり、一人で業務改善しようとするとどんな悲惨な目にあうか、ということを、おちょくった感じで書いた挙句、何の解決策も提示せずに「経営者のせい」という安直な結論を投げっぱなしにしたエントリでわけでして、、、そりゃまあ、みんな一言なんか言いたくなるわなあと思ったわけです。

とりあえず代表して、徳丸先生のコメントを引用します。

業務改善を現場に求める狂気 - megamouthの葬列

アンチパターンがあるからといってそれを一般化してボトムアップ改善全体を否定する論法は賛同できない

2016/11/27 12:24
b.hatena.ne.jp

はい、全くその通りでございます。このエントリで、もし気を悪くした方々がおられましたらここにお詫びする次第です。だってさ、書いた時は何のリアクションもなかったし、こんなエントリ誰も読まねえと思ってたしさ、いや、まさか徳丸先生にご笑覧いただけるとは思ってもおりませんで、あの、その、議論の起点ぐらいにはなったかな、とは思っておりますし、そもそもブログってそういう…(以下、声が消えいる)

とはいえ、ブクマコメントや、twitter、はたまた言及いただいた記事で

qiita.com

といったように、こんなクソエントリから建設的な議論を展開していただいた方々には本当に感謝でいっぱいです。私のほうでも、皆様のご意見を咀嚼し、今後に活かしていきたいという所存でございます。

IT土方ミステリー小説(id:keepkeptkeptさん命名)について

実際に私がbuzzりたかったのは、
消えたプログラマの残したものは - megamouthの葬列のほうだったわけですが、こちらもせいぜいブクマ30ぐらいつけば、十分嬉しい程度だったのに、思いがけず色々な方に読んでいただいて、さらにはお褒めの言葉も賜りまして、著者冥利につきるというものでした。

ブクマコメントなどを散見するに、こういった専門知識なしにはわからない内容を小説仕立てで書く、という形式そのものに驚いた方もいらっしゃったようなので、正直に打ち明けますが、この形式、実は私の発案ではなく、元ネタがあります。


最良のDTPとは、DTPしないこと


プロの作家でもあられます、中里一氏のサイトのコンテンツです。確かこれを最初に読んだのは私が20代の頃だったので、10年ぐらい前だったと思うのですが、私は、この形式と行間に漂う空気の素晴らしさに衝撃を受け、今でも時々、こうして真似をしているというわけです。もし未読の方がおられましたら、是非御覧ください。(同サイトに読み応えのある日記もありますが、最近更新されておられないのが、一読者としては寂しい限りです)

あと、村上春樹の影響を指摘された方もいらっしゃいましたね。俺の体の筋肉の30%ぐらいは、どこをとっても「世界の終りとハードボイルド・ワンダーランド」で出来ておりますので、そちらも正解です。おめでとうございます。

本件の本当の被害者について

皆様があまりにもtwitterで、本ブログのエントリに言及されたので、「megamouthの葬列」という単語がtwitterのトレンド入りしてしまいました。

その結果、以下のような悲劇が発生することになります。

これにつきましては、私の責任は一切ないことをここで明言しておきます。でも、つい、笑ってしまいました。ごめんなさい。


以上です。

消えたプログラマの残したものは

システム開発の佳境に、開発メンバーが突然出社しなくなってしまう。

携帯にも連絡がつかず、3日ほど音信不通になったので、さすがに心配になった上司が大家と共に自宅を訪れると、夕日が差し込む部屋の真ん中に、当の本人が何の表情も浮かべずにただ座っていたりする。

そういう事は大して珍しいことではないので、ある程度経験のあるIT業界人なら、同僚が「消えて」しまってもそれほど驚くことはない。


プログラマというのは、とかく「消えて」しまうものなのだ。と彼らは思っている。


「消えた」プログラマは、意識的にしろ無自覚にしろ自分の人生をちょっとばかり台無しにしながら、プロジェクトに虚無の穴を空けるわけだが、そうした「工程の穴」は他のメンバーが残業したり、派遣会社から来た代替の人員が埋めてしまったりする。ビジネス的には人月で数えられた我々の「数字」などというものはちょっとした帳尻あわせでなんとかなってしまうらしい。

消えたプログラマが残したものは、会社の立場から言うと、傷病手当の手続きとか、労災とか、そういう総務的な雑事は別として、特に何もない、と言えるかもしれない。





私が今ほど酒を飲んでいなかった頃、ちょっとした気まぐれで、あるシステム会社に常駐する仕事を請け負ったことがある。

PHPで組まれた開発途中の業務システムの引き継ぎ、というのがその内容だった。残り作業で言えば、2週間もあれば終わる内容に思えたが、依頼主であるシステム会社は納期として1ヶ月を設定してきたので、私はのんびりと会社員ごっこをするつもりで仕事を請け負った。

私がオフィスに出向くと、20代中盤ほどの女性が私の席のパソコンのセットアップをしてくれていた。

「ありがとう。これからよろしく」

と私が言うと、彼女は物怖じするような表情で言った。

「こちらこそよろしくお願いします。このシステム、元々は私が作っていたんですけど、手が回らなくなってしまって…」

依頼されたシステムは、全体の規模としてはそこそこの大きさだったので、私は彼女の若さに少し驚いたが、若く才能に恵まれたプログラマはそれほど珍しくもないと思い返した。

私は、割り当てられたパソコンに開発環境を整えると、早速依頼されたシステムのソースコードをざっと眺めることにした。


奇妙なコードだった。まず、既存のフレームワークは何も使っていなかった。ただ、独自フレームワークらしきものがかすかにあって、定数はconstant.phpというファイルにまとめられていたし、ログイン処理など共通の処理はcommon.phpに、またHTML表示部分はsmartyで完全に分離してあった。

まず奇妙なのは、その薄いフレームワークが無意味であるほど、あらゆる場面でコピー&ペーストされたと思しきコードが散乱していたことだ。

例えば、管理画面にログインしているかを判定している部分はこんな様子だった。

<?php
if(!is_already_logined($SESSION)){ /* 一般ユーザーとしてログインしていなければ */
   header("Location: ".LOGIN_URL); /* 一般ユーザーログイン画面へ */
   exit;
}else if(!is_already_logined_admin($SESSION)){ /* 管理者としてログインしていなければ */
   header("Location: ".ADMIN_LOGIN_URL); /* 管理者ログイン画面へ */
   exit;
}

このコードが、管理画面系のPHP全てにコピーされているのである。

is_already_logined関数もis_already_logined_admin関数も、common.phpにあった。ようするに、これらを一つの関数にして、

<?php
check_admin_login();

と書いたり、もっと普通の発想で言えば、管理画面系のURLルーティングを単一のファイルで行って、そこでログイン処理を行ってしまうべきだ。そう書いたほうがいい理由は省略するが、つまるところ、無意味なコピー&ペーストであり、それによってソースコードが必要以上に読みにくく複雑になってしまっているのであった。

なんだこりゃ?と私は思ったが。このへんの事情に足を突っ込んでも報酬が上がるわけではなかったので、次に共通して読み込まれているcommon.phpと、constant.phpを私は開いた。


私のEmacsがフリーズした。


constant.php2万行近くあるせいだった。constant.php

<?php

//...

define('TXT_RECORD_NOT_FOUND','レコードが見つかりません');


と言った有様で、ようするに、全ての日本語のメッセージがconstant.phpに埋め込まれていた。

堪りかねた私は、前任者である彼女に理由を尋ねた。何故、日本語メッセージを全て定数にする必要があるのか?何度も使用されるメッセージを共通化したいなら、gettextでリソースファイルに分離するなど他の方法はいくらでもあるだろう、と。

それほどの剣幕で迫ったつもりはないが、彼女は困惑顔で返した。

「さあ?なんでなんでしょうか?私が受け持った時には既にそうなっていたので…」


私は、全てを理解した。そうか、プログラマが「消えた」のだ。

静かに席に戻った私はEmacsPHP解析モードをOFFにして、シンタックスハイライトなどの余分な動作を切り、カーソル移動できる状態にして、もう一度common.phpとconstant.phpを最初から見ることにした。

ファイルの最初のほうはまともであった。すなわち、共通に使用される関数は簡潔に(当時の視点でさえ時代遅れの構造化ではあったが)まとめられており、constant.phpもほとんどはシステム動作に不可欠な定数の定義に使用されており、唯一の日本語メッセージは、共通のエラー文字列だけだった。

もはやファイルのタイムスタンプを確認するまでもないだろう、と私は思った。おそらくは、このシステムは構築の初期、ある程度はまともに作られていたのだ。しかし、そのまともに作ることのできるプログラマは「消えて」しまった。

あとを引き継いだ彼女は「消えた」プログラマほどの技量はなかった。彼女は「消えた」プログラマが残したフレームワークを理解することもできず、ただ、ソースコードを模倣した。

エラーメッセージがconstant.phpで定義され、テンプレートから引き出されている。ならば、メッセージは全てそうしなければならない。と彼女は考えた。日本語が表示される度、彼女はconstant.phpを書き足す。あるいは、二つのファイルで呼び出される関数が必要となったならば、common.phpに書き足す。長い孤独な開発期間の間、彼女をそれを繰り返し繰り返し、やり続けたのだ。

「消えた」プログラマがいたならば、どこかで自分のアーキテクチャが破綻することは明白だと考えただろう。彼女の作業は止められ、メッセージはgettextのリソースになり、common.phpは複数のクラスに分割されたであろう。

だが、彼は消えてしまったのだ。彼女に何も告げることもできぬ場所に。



「まるでカーゴ・カルトですね」

と、依頼主である彼女の上司に進捗を尋ねられた私は、正直にそう言った。その会社の会議室には灰皿が置いてあったので、私は遠慮なく煙草に火をつけた。

「ようするに、あのシステムを最初に作った白人は、ミクロネシアの奥地に飛行場を作ったんですよ。後任の彼女はそこで飛行機を初めて見た。そして、白人が去った後、彼女はあなたに飛行機を作るように言われたわけです。」

戸惑う上司の前で、紫煙を吐き出す。

「やり方は教わっていない。ソースコードしか手がかりはない。だから木の枝や藁で、無線機や、滑走路を作って、飛行機を呼ぼうとしているんです」

消えたプログラマソースコードを残す。残された者は好むと好まざるとに関わらずそのソースコードに書かれた「思想」を見ることになる。自らの「思想」を持たない者は、それを個人の「思想」としてでなく、「信仰」として受け止めてしまうのかもしれない。


長い沈黙の後、苦虫を噛み潰したような表情で上司は言った。

「システムは…完成できますか?」

「まあ、飛行機は呼べますよ。でも、彼女が作った偽物の無線機を作り直すつもりはないので、そのつもりでいてください」


私は、これ以上constant.phpを肥大化させないよう、メッセージはそのままテンプレートに埋め込むことにした。そもそも多言語対応する予定もないのだ、gettextを使うまでもない。同じようなメッセージが出る画面は、共通部分のテンプレートを分割してincludeするようにした。

新たな定数や共通関数は、constなクラス変数、静的なクラスメソッドとして定義した(実働環境のPHP名前空間をサポートしていなかったのだ)、そして、関連するファイルでだけそのクラスファイルを読み込むようにした。こうしておけば、これ以上、悲惨なコピー&ペーストや長大なconstant.phpを書き足さなくていいようにしたつもりだった。


1ヶ月後、私は仕事を終えた。自分が書いた部分にバグがないことは確信していたが、それ以外は知ったことではない。私もまた、その会社から「消えた」プログラマとなったわけだ。



最終日、私物を鞄に詰め込んで、私は、彼女に別れを告げた。

「ありがとうございました。あのシステムを書くの、本当に辛かったんです」

と彼女はその時、やっと微笑んだ。


おこがましいと自覚しながら、私は、自分が新たに書き足した「思想」が、その後を引き継ぐであろう誰かに「信仰」されるのではなく、糧となってくれることを、願わずにはいられなかったのだった。


レガシーコード改善ガイド

レガシーコード改善ガイド