(10)変わらないことを維持し続けることこそが幸せ

 吾輩はシステムエンジニアーである。やはり、前回の話もすこぶる面白くなかった。人間は追い詰められていると、ひたすら、自分のできることをやり抜こうとするからだろう。吾輩にも気持ちにゆとりがないのだ。ちなみに、試験前に部屋の掃除をしたくなる現象のことを、セルフ・ハンディキャッピングというそうであるが、追い詰められているときに、自分が書ける、自分がふさわしいと思うコードを書ききった里見さんのコードについても、同じようなことなのかもしれないと思った。いや、彼女は決して逃げたわけじゃないのであるが。

 彼女のコードは確かに清々しく、コーディング規約にも違反していなかった。そして、彼女の言葉からわかったように、この業界に入りたてのころに覚えたロジックを正義として書かれたわけである。しかし、それは吾輩には、彼女の中のテンプレートを使い回しているだけにしか見えなかった。メインフレームの有史以来、プログラマーというものはそういうものだったのかもしれないが、いつかどこかで書いたコードの反復がわれわれの仕事ではないと、吾輩は思いたいからだろう。それが、経験やスキルと呼べるものだったとしても。
 しかしながら、吾輩のプログラムが、果たしてテンプレート化していないのかということも自問自答しなければならないと、強く自分に言い聞かせる。そして、比較的若い今の年代では、いろいろなことに対応できていっているかもしれないが、将来、家庭を持ち、変わらないことを維持し続けることこそが幸せだと思えるようになったとき、吾輩はこんな気持ちでいられるだろうか。

 プログラマー30歳定年説が覆されて久しいのは、設計書を書いている時間がないのと、プログラムの生産性が飛躍的に向上しているからであるが、吾輩は、30歳を境に、コーディングへの執着は失せている。代わりの執着は、人間も含めた「システム」というものが出来上がっていくさまである。対して、吾輩のスマホは8ヶ月前のアップデイトをわざと適用していない。スマホは電話であり、不必要なアプリもほとんど入れておらず、ブラウザとメールさえ使えればよい。今使えているものをわざわざ刺激する必要はないからだ。

 さて、わがままな彼女も出社したし、事情聴取も終わった。最近、額も汗ばむようになってきたので、この現場で初めてジャケットを脱ぐ。スーツの上着は、椅子の背もたれに掛けると型崩れすると何かで読んだので、ていねいに左右に折りたたみ、襟のほうをつまみながら、オフィスのすみの衣文掛けに掛ける。吾輩がカフスボタンをしても不自然じゃなくなるのはいつになるのだろうかと、いつもと同じことを思いながら、袖のボタンをはずし、腕まくりをする。同僚たちも、昼食を終えて帰ってきた。さて、やるか。

「設計書のここのところなんですけど、もしかしたら、情報系のシステムからデータ連携があるかもしれないから、もう少し、拡張性を持たせておいてほしいんですけど。」
「でもそれ、その先のテーブルに連携データをいれておけば事が済むんじゃないんですか。」
「いや、別のプログラムを起動できるようにしておいてほしいんです。」
「んー、安藤さんのメモを見ましたけど、データ連携のプログラムは、サーバーにあるジョブスケジューラがをキックするとのことだったので、これで問題ないとお客さんのレビューまで行ってますよね。」
「これ、新しいほうのサブシステムなんですけど、まだ、ジョブスケジューラの選定まで至ってないんです。」
「まーたそれですか。この前の帳票の件もそうだったじゃないですか。なにも決まってないなかで、いろんな場合を想定して作ったのに、僕が聞いていないことが最後に出てきた。もうそういうことはこりごりなんですけど。」

 いやいやこちらも、まーたなんか穏やかじゃない会話が耳に入ってきた。プロジェクトにとって最適な方法を検討した結果の、浅見プロジェクトリーダーが、尖った山中さんをなだめている構図だ。安藤さんのメモがポイントのようだが、安藤さんは振り向きもしない。帳票の件という発言も気になる。
 見かねて、少し離れた場所から、髪の毛を下ろした白髪のおじさんが、書類をもってこちらにやってきた。彼はふたりの間に割って入り、言葉を発しようとしたとき、ハッと気がついた。髪形が変わってて、まったく気がつかなかったが、吾輩が新人サラリーマンのときに世話になった、あの頃からフリーランスの小倉さんじゃないか!

(9)吾輩も自分のコードにとやかく言われるのは嫌

 吾輩はシステムエンジニアーである。いやしかし、前回(先々月)の話はすこぶる面白くなかった。

 いや、前回の話で言いたかったことは、プログラミングにはパラダイムがあるということである。
 パラダイムというのは「ある時期の背景と方法を包括したもの」を示す「時代」や「流行」とは別の便利な言葉である。IT系のひとたちにとっては、ホスト、オープン、Web(次はフロントベースのサーバーレスと続くだろう)のことであるのだが、たとえば、近代の情報収集のやり方は、一般化したインターネットのうえで、はじめはパソコンだけだったが、iモードが生まれ、スマートフォンになっていったように、根幹を為す技術は変わっていないが、情報への触れ方は変わっていった、という説明であれば、IT系でないひとでもわかると思うのだけど、このそれぞれがパラダイムである。
 そして、前回の里見さんのプログラムは、少なくともM言語を使う場合においては、直近のパラダイムにふさわしくないものだったということが言いたかったと、高層ビルに入る常駐先の社食は避けて、いつも来ている地上の居酒屋で、ランチのアジフライ定食を頬張りながら考えていた。

 ビルに戻り、喫煙所で2本吸ってからデスクに戻る。休憩が終わるまであと15分ほどあるが、昼からと言っていた里見さんがもう来ていた。ノートパソコンに向かい、休憩ではない時間を過ごしているようだ。半休が気まずい現場もあるから、少し早く来るのは懸命な判断だと感心しながら、レインボーさんの島はまだ誰も昼食からは戻ってきておらず、ランサースタイルの島も、吾輩と彼女だけであると気づく。彼女が休憩中でないのなら、前回わかった「面白い話」がなぜそうなのか、聞くなら今しかない。彼女のコードは確かに「だいぶアレ」ではあったのだが、尖ったものというか、ある種の執着のようなものを感じたのだ。

「あっ、里見さん、お疲れさまです。あれ?、もうご飯は食べたんですか?」
「はい。来る途中に簡単にすませてきました。」今朝は彼女が来るか来ないかで揉めていたこともあったので、心配させまいと気丈に振舞っていたのが、その話し方からわかった。あまり話を長引かせたくなかったので、間髪入れず、吾輩が続ける。

「あの、3Aの4のソース見て、気になったんですけど、変数の局所宣言がないのとループが全部後判断になっているのが、面白いなあと思って見てたんですけど。」
 こういった話をされるのが初めてだったのか、最初は驚いたような顔を見せていたものの、徐々に彼女の表情が曇っていく。
「・・・なんでしょう?私のソースに対して、何か仰りたいことでもあるんですか?」
「いえ、言いたいことは特にないです。規約違反でもないし、汚いわけでもない。むしろ、清々しいくらいです。」
「じゃあ、何ですか?」
「たとえば、このメソッドの先頭の変数宣言、先頭に20行もあると見る人が面食らうのと、半分以上は、判断とループのブロックの中で使われるものだから、それらはブロックの中で宣言したほうが処理全体の見通しも立てやすいし、変数の適用範囲はブロック内だけだから意図しない代入とかもなくなる。あと、これとこれとこのループを抜ける条件式は後でなくて前に書けば、不要な変数も出てくるし、ソースファイルもだいぶ減らせる。」
「でも動作は変わりませんよね?修正しろと言ってます?」
「いや、そういうことは言ってない。でもM言語が属しているパラダイムいえば、こういう書き方が普通じゃないかなと思って。あと、それから・・・。」
「それから?」彼女に促され、吾輩が続ける。
「なんか、こうも書き方が統一されていると、いちばん最初に覚えたやり方をずっとたいせつに守っているような気がするんですよね。もしくは、これが正解だという方法を守っている、というか。もしかしたら、これまで、あるべきロジックの議論をしてきてないのかな、とすら思いました。」
「・・・そうですか。仰りたいことは以上ですか?」

 吾輩の、以上です、という言葉を聞いて、彼女は女性にありがちな、頬をふくらませて、ぷいっと顔を背ける仕草をしてみせた。・・・図星か。我々の仕事は納期通りに品質の高いプログラムを書くことであるから、意外とその中の書き方がどうあるべきかということは議論されにくい。彼女は、そういった機会が与えられることなく、自分の正解を貫いてきたんだろう。だから、他人の書いたコードは触りたくないという結論に至ったんじゃないかと思う。そして、自分のコードにとやかく言われるのが嫌なのは吾輩も同感だ。でも、最新の事情については、つねに取り入れていかなければと、自問自答しながら、昼休みの終わりを告げるチャイムを聞いた。

(8)面白いことは気のせいではなかった

 吾輩はシステムエンジニアーである。プログラムは人間の手によって書かれるものである。

 しかし、朝から感傷に浸っている場合ではない。このプロジェクトは火を噴いているのだったと自分に言い聞かせ、焦る気持ちを抑えながら、駆け足気味にデスクに戻った。とはいえ、吾輩の担当はバカデカい七画面から、「大きめの四画面」に減ったわけなのだから、いくばくかの安堵のようなものもあったが、それはすぐに間違いだったと思い知る。「3Aの大きめの四画面」というのは、3Aの3から6のことであるが、これらは、3A本体と、3Aの1と2から呼び出されるが、渡されるパラメーターが多く、それらは複雑な条件で結びついている。つまり、「小さめの三画面」自体のテストをしなくてもよくなったのは事実だが、それらから決別できたわけではなく、書きかけのコードを追って、仕様の把握をしなければならないというのは変わらないのだと認識した。同時に、ババをつかまされたというやるせない気持ちが吾輩を襲う。念のためと、昨晩のプロパーさんの成果を期待したが、リポジトリーのソースファイルの日付は一秒たりとも変わっていない。たぶん、この画面、みんな触りたがらないんだろう。吾輩も「話と違う」とか言ってみたい。

 さて「小さめの三画面」について、最初のソースファイルをクリックし、ホイールを転がす。そして、次のファイルをクリックし、またホイールを転がす。たまには戻したりもする。そうやって前後関係を読んでいく。少し面白いことに気がついて、次のファイルをクリックし、今度は、ホイールを下に転がすだけになる。ほとんどのファイルを下向きにホイールを転がし終わったあとに、面白いことが気のせいではないとわかった。

 里見さんのコードは変数の局所宣言がほとんどないのと、ループ処理がすべて後判断になっている。ループ処理というのは、繰り返しの処理である。たとえば、ある変数aに1を最初に格納しておき、aを1づつ足しながら処理を行い、aが一定回数になったら、繰り返しの部分を抜けるというものだが、里見さんのコードは、そのaが一定回数になったかどうかの判断が、繰り返し部分の後ろにある。べつに前判断でもいいところを、後判断にこだわって、処理の見通しが悪くなっているところも散見される。
 変数の局所宣言というのは、さっきの変数aについては、aという箱を使いますよ、と「宣言」しなければaは使えない。大昔のコンパイラーは、変数の宣言は、すべての処理よりも前に書かなければならなかったが、最近の言語は、処理の最中に変数宣言があってもよい。これを変数の局所化というのだが、彼女のコードにはそれがなくて、すべての変数宣言が、すべての処理の前にあって、見通しが悪くて仕方がない。この現場で使っているMという言語は局所変数はサポートしていないのか。というか、コーディング規約はあるのか、そして、このコードは誰かレビューしたのか。

 吉沢さんにコーディング規約の場所を教えてもらい確認してみたが、ループ処理を前判断、後判断にするかの指針について触れられていないのはともかくとして、変数の局所化については触れられていなかった。なるほど、規約違反ではないのか。

「吉沢さん、この現場ってコードレビューってしてます?」
「前はやってましたが、フレームワークが変わってからはものづくり優先ですね。」そうか、では。
「M言語って、変数の局所化ってサポートしてますよね?」
吾輩はM言語は初めてである。
「ループのときに、変数宣言するやつですよね。ほとんどのサンプルコードがそうなってますから、普通に書いてますよ。」
拍子抜けである。

 さて、里見さんは昼から出社すると、レインボーさんの島からもれ聞こえてきた。ここぞと、彼女が守られていたと言っていた山中さんの反応を見てみる。
「里見さん、昼から来るみたいですね。あっちで言ってます。」
「あ、そうですか。集中していて聞こえませんでした。」
「心配じゃないですか?」
「いや、別に。」
「守ってあげていたのに?」
「それは彼女が勝手にそう思っているだけです。」
 やれやれ、そうかい。

「ところで、里見さんのコード、ちょっとアレですね。」
「いや、だいぶアレだと思いますよ。」
 知ってるのか!

(7)そんな子供みたいなことを言ってないで

 吾輩はシステムエンジニアーである。現場には、受け入れられないこともある。

 今朝は、予定通り早起きだったが、昨日は久しぶりの男の自炊だったせいか、お腹の調子が悪かった。結局、朝のイベントに時間がかかってしまい、オフィスのゲートにIDカードをかざしたのは、始業の3分前だった。ピピッと音を立てて開いたゲートを通り、吾輩は、我々のプロジェクトの島に目をやる。この時間になるとほとんどのメンバーが揃い、静かに着席しているのだが、今日は、元請のプロパーの数人が立ち上がり、朝には似つかわしくない調子で、席をまたいだ会話が繰り広げられていた。

「あれ、何かあったんですか?」
 デスクに腰掛け、かばんを一番下の大きい引き出しにしまいながら、吾輩は、隣の席の吉沢さんに、ひそひそと尋ねた。
「里見さんがね、お休みなんだそうです。」
「それは心配ですね。お腹の調子でも悪いのかな。」
「いや、そういうのではないみたいで。『話と違う』とか言って、浅見さんに一方的にLINEを送ってきて、音信不通なんだそうです。返信も既読にならないし、電話も出ないみたいで。」
 どうやらゆゆしき事態のようである。続けて吉沢さんに問う。

「うーん。話が違うってなんなんですかね?」
「私、昨日、8時半くらいまでいたんですけど、7時くらいに、里見さんが浅見さんに呼び出されて…別室で打ち合わせをしてたみたいなんですけど、 30 分くらいして、里見さんが、涙目で怒ってるみたいなそんな感じで帰ってきて。そしたら、何も言わずにノートパソコンのフタをバンッってすごい音を立てて閉めて、挨拶もなく、無言で帰っていったんです。」

「なんか無茶なこと言われたのかしら?」
「…そうですねえ。たぶん、ずっと嫌がっていたテストをやってくれとお願いされたんじゃないかなと思います。私も、そのあと、浅見さんに、少しペースを上げてくれとお願いされたので。」
「そうですか。昨日、僕が早く帰っちゃったからですかね。」
「それはまだ関係ないんじゃないですか?」
 目は笑っていないながらも、パッと口角を上げる吉沢さんの表情に見惚れていた吾輩に、デスクに座ったままの浅見さんから声がかかった。

「すみませーん、ちょっと山口さんいいですか?」
 朝が早いこともあり、まだ浅見さんは腕まくりをせずに、ジャケットすら着ている。心中は穏やかじゃないのだろうが、変わらず冷静に、横に立った吾輩に曰く、
「少し担当の割り当てを変更したいんですが。3Aの6画面のうち、山口さんの担当は、大きめの4画面に変えます。そのあとは、基本的にもともとは里見さんがつくったものを割り当てていたんですが、別の人がつくったもので割り当てます。」
「はあ、よくわからないんですけど、彼女がつくったものが僕の担当ではなくなるということに、何か意味はあるんですか?」
「プロジェクトにとって最適な作業を検討した結果です。」

 その常套句を言われると、吾輩も言い返せない。釈然としないながらも、了承の返事をしたとき、いつもYシャツの胸ポケットに入れている、吾輩のアイフォーンが震え出した。発信元は、営業の出水さんだ。これは出たほうがいいな。
「あっ、すみません。ちょっと電話がかかってきました。とりあえずお話はわかりましたので。」
 浅見さんとの会話を終わらせ、オフィスのゲートの外の廊下まで移動した。着信は止んでしまったので、こちらからかけ直す。

「おはようございます。山口ですが、出水さん、出れなくてすみません。お電話、大丈夫ですよ。」
「ああ、すみません。ちょっと誰に電話しても要領を得ないので、山口さん入られたばっかりですが、仕方なくお電話しました。」

「里見さんの件ですか?」
「そうです。来てないんですよね?」
 出水さんが続ける。
「彼女が言うには『やりたくない仕事を押しつけられた。面接のときに、他人が作ったプログラムは触りたくない、と強く言っていたのに、押しつけられた作業は、それそのものである。話が違うから、それが解消されるまで行きません』ということなんですが、そこにいる誰に電話しても、知らぬ存ぜぬだったもので。」

「なるほど。だから、彼女がつくったもののテストを取り上げられたんですね。たぶん、マネージャーは、彼女の作業が、自分でつくったプログラムの修正作業だけになるようにしようと調整していますよ。彼女にお伝えください。そんな子供みたいなことを言ってないで、とりあえず出てこい、と。」
 最後の言葉は、自分でも少し言い過ぎ観があったのもあり、出水さんはしばらく絶句気味だったが、要領は得てくれたようで、話はまとまった。

 デスクに戻る前に喫煙所に寄った。いつもより少し力を込めて、ジッポーライターをスナップする。チャリンという甘い音を聞いて、迂闊にも、例の憧れの先輩のことを思い出してしまった。そういや、あの人もこんな感じで強く言う人だったっけ。先輩が抜けたあと、プロジェクトを任されたのはスキルが似ていた若輩の吾輩だったが、あのころは、なにひとつうまくいかなかったな。

(6)高嶺の花を満足させる自信はなかった

 吾輩はシステムエンジニアーである。現場にあるのは、仕様とプログラムだけではない。

 山中さんに話しかけるべきか、そして、なにを話すべきかも含めて、吾輩は(この休載期間の)丸3ヶ月も考えたわけだが、初めてのフリーランスとしての現場で、少し興奮しているのもある。この 10 年間のサラリーマン生活のなか、終電間際の乗換駅で、あの頃は味なんてわからなかったスーパードライを無理矢理ねじ込み、昼間の自分のふがいなさを悔やんだことを思い出す。絶対に言っておいたほうがよかった侘びの言葉を、番号を知っているにも関わらず、通話ボタンが押せなかったのは、当時が、個人主義が蔓延しはじめたころだからだったろう。それ以来、仕事は仕事と割り切ってしまったが、それでも、憧れの先輩と2人で行った出張のときの夕食では、彼女から傷心の話を打ち明けられ、僕は秘めた言葉を言えなかった。

 僕があのとき「すいませんでした、その場を取り繕うのに必死だったんです。」とか「先輩は素敵ですよ、僕が慰めたいです。」とか、ちゃんと言えていればよかったのに。…いや、高嶺の花を満足させる自信は、あの頃の吾輩には、なかったわけだけれども。
 
  
「あっ、山口さんでしたよね。あれ?帰ってもいいんですか?」
 後ろから、苗字をさん付けで呼び、振り返った彼の言葉は、概ね予想通りだったが、ちょっとした罪悪感に言葉が詰まる。

「いやっ、あのー、最初の画面がね、デカすぎてしんどくなったんです。少し動かしてもねえ、バグりまくりスティーでね。」最近、流行ってるらしい親父ギャグをブッこみ、ふっと表情を緩めた、山中さんにあえて、疑問をぶつける。

「山中さん、どうして、テストじゃなくて、新規やってるんですか?」
「え?」
「ごめんなさいね。ちょっと設計書が見えちゃったんです。10 年もやってると、机の上の表向きの資料は見ちゃうんです。」
 吾輩の言葉を聞いた彼の表情は、呆れ気味に変わり、喫煙所から見えていた、あの河川敷のほうへ目を細めた。

「下品な人ですね。」
「すんません。注意力が散漫なもので。」
「いや、謝らなくてもいいですよ。山口さんのことは、営業の出水さんから聞いてます。フリーになりたてなんですよね。だったら、人のやってることに口を出さないほうがいい。」

「その気持ちはわかりますが、どうすれば、この現場の仕事が早く終わるかを考えちゃうんです。ダメですか?」
「ダメじゃないですけど。」

 少しの間、沈黙が流れた。あと5分ほど歩みを進めると最寄り駅。次は吾輩のターンだという雰囲気の中で、次の言葉を絞ろうとしたとき、優しい彼が助け舟を出す。

「さっきも見ていたでしょ。あのプロジェクトが破綻していることは、きっと、山口さんにもおわかりでしょう?」
「お言葉ですけど、僕は、破綻という言葉は嫌いなんです。ざっと見たところ、あのプロジェクトは数千万円だと思うんですけど、書きかけのプログラムを見る限り、あの程度であれば…いや、収支的には失敗かもしれないけど、破綻という言葉は適切じゃないと思うんですけど。」

「じゃあ、破綻ってなんなんですか?」
「国家予算かしら。でも、国家予算も破綻ではないんじゃないかな。このあと、いくらでも修正が利くと思う。」

「よくわかりませんね。」
「そうですね。僕もよくわからない。」

不思議と重なっていた二人の革靴の音を聞いて、吾輩は思い出した。
「ところで、共通機能の設計書、よくできてましたね。あの分量で、あそこまで表現できているって、言葉の多い僕には絶対にできない。」

「誰もついてこれないんですよ。」
「たぶんそうなんでしょうね。」
「すぐれた技術で、エレガントなプログラムを書くことこそが、顧客のためになる。これは間違っていますか?」

「間違ってないです。でも、エレガントなプログラムなんて、僕にはもう書けないし、今では書けるひとも少ない。こちら側に来るのは、小さい頃からの夢だったけど、年もとったし、時代も変わったから。」

 微妙な空気を残しつつも、最寄り駅で地下鉄にもぐる彼を、お疲れさまでした、と声を掛け合い見送った。明日は早起きだ。
 
 

(5)安心せい、ここは不夜城じゃ

 吾輩はシステムエンジニアーである。この現場には、仕様とは別のさまざまなものがあるようだ。

 山中さんの席の表向きの資料の件は、のちほど、喫煙所で消化することにして、吾輩にとっては、それより重要なスケジュール調整をせねばと心を落ち着かせながら、プロジェクトマネージャーと現場で初めての会話を試みるため、彼の横に立つ。タスクバーが満杯のノートパソコンの画面が見えた。

「浅見さん、すみません。3Aの画面なんですが、5日では足りなさそうです。仕様を把握するだけでも時間がかかりそうで、そのうえ、量が多すぎるかなと。」
 画面から目を逸らさずに吾輩の話を聞いていた浅見さんは、少しキリが悪かったのか、しばらくキー入力を休めなかったが、ようやく、吾輩のほうを向いた。ガリガリと頭を掻きながら言う。
「そうですか。うーん、納期延長を何回もやっているのでね、このスケジュールで終わることがマストという感じなんです。とりあえず、最速でやっていただいて、結果的に、山口さんのこのあとのタスクができなさそうであれば、それを別の人に割り振るという形で進めたいです。申し訳ないですが。」
 振り絞るように答えた彼は、眼鏡を外し、手のひらで両目を揉みこむように押さえた。あまり寝ていないのだろう。

 さて、なんか、タスクの割り振りとか考えてくれる、とか言ってはくれたのだが、要するに、とりあえずこれでやってくれということのようだ。この人が、狸かそうでないかの見極めは徐々にやっていくことにして、ならばと吾輩が続ける。
「ちなみに、ここは不夜城ですか?」
 不夜城という言葉は、前職の先輩がよく使っていた言葉だ。バブルより少し前の先輩たちは、残業が美徳で、無理なスケジュールをこなすということに誇りを持っていた。吾輩が先輩に無理難題を言われ、消極的な表情になったとき、冗談っぽく「安心せい、ここは不夜城じゃ。」とよく言われた。つまり、この現場は、最終の退出時間がないから、思う存分、残業できるという意味だ。浅見さんは言葉の意味を測りかねていたが、しばらくして、その意味を理解したのか、
「はい、不夜城です。」
 と返ってきた。そして、浅見さんが続ける。

「実は、先月ぐらいから、ここのテストを終わらせるために、会社も持ち出しを決断して、別の現場にいるプロパーを定時後に呼び寄せてテストをしているんです。今日も六時半くらいから十人くらい来ますよ。そういう状況なもので。」
 そういえば、着任して数日、定時過ぎあたりに、人がわらわらとやってきていて、空席にパソコンを持ち込んで作業していたのを見ていたが、そういうことだったのか。

「今日は、3Aの全容に面食らって、ずいぶん疲れました。すみませんが、今日は早く帰ってリフレッシュしたく。ここは不夜城ということもわかったので、明日からは終電くらいまでやりますので。」
「そうですか、わかりました。今日はゆっくりしてください。今日のプロパーの作業進捗で内部のスケジュールも変わってきますんで。」
「ありがとうございます。…ちなみに、書類が表向きだったんで見えちゃったんですけど、常駐組でテストしていない人もいますよね。」
 浅見さんは少し言葉を詰まらせ、
「そうですね。プロジェクトにとって最適な作業をやってもらっています。」

 なるほど。そういう言い方をする人か。
「でも、今、プロジェクトに最適な作業というのはメンバー全員でテストを終わらせることなんじゃないんですかね。」
 という吾輩の発言は、定時を伝えるチャイムの音にかき消された。浅見さんはもうすでに画面のほうを見ていたが、その横顔は、少し苦い表情であるように見えた。

 そういうことで今日はもう帰る。フリーランスになったばかりで、給与は報酬という呼び名に変わり、支払サイトというものと向き合わねばならない。今月は節約しなければならないのと、しばらくは残業が込みそうだから、今日は冷蔵庫にある期限が切れそうな卵と、冷凍してある豚肉で何か作り置きしようと思っていたのだ。帰りに白菜とか、もやしとか買っていこう。コメも六合炊きを目いっぱい炊いて、冷凍しておくことにしよう。吾輩は首から下げたIDカードをぐるぐる巻いて、鞄にしまいこんだ。

 帰りのエレベーターを一階で降りると、レインボーさんのプロパーと思しき7、8人の大群に遭う。若いのから、中堅ぐらいまでバラエティに富む。そこかしこから集めてるんだな。その人込みの中に、帰宅しようとしている山中さんの姿が紛れていた。そうか、別のエレベーターで降りてきたのか。駅までの数分、話しかけて真意を問うか、知らんぷりを決め込むべきか。

(4)表向きの書類は基本的に読んでよい

 吾輩はシステムエンジニアーである。どうやら仕様というものはありそうである。

 トランザクションにおいて、仕入先と取引先の関係がマスターで定義された関係にならないという、吾輩からの「素朴な疑問」について、桜木さんは、
「あれ、そうでしたっけ?」
 と問い返し、手に持っていた水筒をぐいっとあおった。水筒からはカラカラと氷の音がしていた。冷たい麦茶でも入っているのだろう。最近、日中は暑くなってきたしね。

 結局、彼からは、
「うーん。マスターがこうなっていますから、仕入データのほうに、取引先がないほうがいいですよね。ちょっと、影響範囲調べて、列をなくしましょうか。」
 という言葉が得られたのだが、いや、そんなことではなくって。

 吾輩が知りたかったのは、仕入先と取引先の実際の関係であって、なぜ別の取引先を入力できるようになっているのかということである。しかも、フェーズは結合テストだから、このあたりのことは充分に議論されているはずではないのか。もし、これを、前職で後輩が発したとするならば、強くそれを問うていただろうと、苦い顔をしかけたとき、隣で我々の会話を聞いていた安藤さんが、ノートパソコンの画面から目を逸らさず

「現行踏襲!」

 という強い言葉を浴びせてきた。桜木さんが一瞬固まる。
「いや、だから、基本的にはマスタと同じものが入るけど、運用は現行と同じにするから、仕入データに取引先があってもいいって、お客さんとそういう話になったじゃない!」
 さらに強い言葉が発せられる。桜木さんは、しばらく一点を見つめ
「すみません。そうでした。」
 という言葉を絞り出し、
「そういうわけですので、マスタと違うものが取引先に入ってもいいそうです。」
 とばつが悪そうに言いながら、巨大なER図を僕に手渡してきた。

 なるほど。吾輩の疑問はわからなかったが、こういうことは聞いてはいけないということはわかった。もうひとつわかったのは、社内的に桜木さんより安藤さんのほうが職位が上だということだ。桜木さんは、「さん」付けよりも「くん」付けのほうが似合う青年であるのに対し、安藤さんは、白髪も多く、歳を重ねたことによると思しき恰幅のよさがあるわけで、一目瞭然と言えばそれまでだが、いずれにせよ、桜木くんが安藤さんと適切なコミュニケーションが取れているのかと、吾輩が考えなくてもいいことを考えつつ、肩を落とし気味に自席に戻ったとき、ランサースタイルの島でひそひそ話がはじまった。

「またやってる。あれされると気分が悪いんだよね。」
「そうですよね。私もああいうのが嫌でフリーになったんですよ。」

 声の主は、吾輩の隣の座席が向かい合う男女。吾輩は入ったばっかりなので、名前はまだわからない。端末には、IPメッセンジャーが入っているのに、わざわざ口に出して言うってことはそうとう積もるものがあるのだろう。さらに聞こえないふりをして聞く。

「上下関係で仕事をされると、何が正しいのかわかんなくなりますよね。」
「結局困るのは彼らだから、全然いいんですけど。」

 ふむ。今のくだりで重要なのは、安藤さんが体制や上下関係を振りかざしたことよりも、先輩が後輩を納得させられなかったことじゃないだろうか。指示には、時には大義名分である場合もあるが、正当な理由が必要だ。さらにかんがみるに、「現行踏襲」というフィニッシュホールドを使わざるを得なかったということは、上位の体制、つまり、エンドユーザーに近いところで、新しいシステムへの議論がじゅうぶんに為されていないからだろう。ITの専門知識を活用して、お客さんと同じ立場でシステムの姿を考えるのが、広義のシステムエンジニアーの役割であるが、その立場にレインボーさんはいなかったように感じる。思い切って、口を開く。

「あ、お話し中、すいません。新しく入った山口といいます。私もなんか似たようなこと思いました。」
 男性のほうが怪訝な表情を見せるも、
「あ、聞いてらっしゃいましたか。山中と言います。私、この現場は結構、長いんですが、いろいろありましてね。ねえ、里見さん。」
「そうです。私はとりあえず山中さんに壁になってもらってるんで実害は少ないんですけど。」
 彼らはうまくいっているようである。よかったね。

 当たり障りのない会話を少ししたあと、レインボーさんの島に行ったもうひとつの理由を思い出した。スケジュール調整のお願いをしないといけないんだった。離席中の山中さんの席を通ったとき、彼のデスクに、書類が表向きで置いてあるのが見えた。表向きの書類は基本的に読んでよい。しかし、それが、明らかに新機能の設計書であるとわかったときに愕然とした。

 このプロジェクトは、火を噴いていて、今、みんなで動かないものを動かそうとしているんじゃないの?

(3)重要なことは実装を見通すことである

 吾輩はシステムエンジニアーである。仕様はまだ、把握していない。

 さて、3Aの画面は、子画面が「3Aの1」から「3Aの6」まで6つある。あわせて7画面。一つ一つ確かめて不足を埋めていくと、ほとんど書き終わったあとに、知らない仕様がわかって後戻りするということがありそうなので、まずは全体像を把握してみることにする。そもそも、WBSに引いてある5日というのが、実現可能なのかどうか。

 親画面だけでも入力項目は 30 くらいあるが、よくよく意識して見てみると、子画面それぞれにも、ほぼ同じ数の入力項目がある。そのうえ、ほとんどの項目で、何らかのチェック処理やデータベースへの参照処理が書いてある。書いてあるだけで、エラーで落ちたり、全く動かなかったりするわけなのだが。
 子画面のひとつには、検索条件を入力し、その結果一覧を表示するというものもあるのだが、その結果一覧の表がやたら横に長く、少し心が折れそうになる。横スクロールバーのつまみが豆つぶぐらいしかない。
 ざっと見渡した感覚でしかないが、半分くらいの処理は、書いてあるが動かないか、コメントが書いてあるだけで、中身が書いてない。これでは、1日を 1.5 人日にしても、5日では無理そうな気がする。たとえ、仕様が把握できたとしても、今度は、数に負けてしまいそうだ。ということで、しばらくは、何が正解で、何を書くべきかを考えることに時間を割くことにする。

 この現場、設計書と呼ばれるものは存在しているのだが、これは、お客さんから最低限のレビューを受けるために作ったと思われるパワーポイントで、画面遷移と処理概要が書かれているだけである。幸いにして、テーブルのI/Oらしきものは記載されているから、これを基本設計書と呼ぶことにする。
 詳細設計書は、本来、プログラムを書くために、基本設計書を掘り下げたものであるが、共通機能については、これは存在しているようである。しかしながら、業務機能の開発単位で記述されているものが見つからない。とはいえ、詳細設計の要否は、どの現場でも問われるわけであり、工数が潤沢に確保されておらず、設計者と実装者が同じであれば、実装のコメントから詳細設計を起こすという場合も多い。きっとこの現場もそうなのであろう。ともかく、詳細設計で重要なことは、機能を実現できるかどうかを、上流工程に基づき理論立てて、実装を見通すことである。一応、論理ER図とテーブル設計書はあるようなので、これを、基本設計書のI/Oと見比べながら、いわゆる「詳細設計」を吾輩の脳内でやってみることにする。物理ER図があれば少しは楽になりそうなのだが、探した限りでは見つからなかった。いずれにしても、スケジュール調整をせざるを得ないと思うので、ちょっと相談しにいくことにする。

「スケジュール調整ですか。うーん。相談するとすれば、レインボーの浅見さんですけど、どうかなあ。仕様のことは、安藤さん。いちおう、DBAは桜木さんなので、データベースのことは彼に聞いたらいいと思います。」
 吉沢さんに教えてもらい、腕まくりをして、ものすごい勢いで自分の世界に入っているあのひとは、浅見さんという名前だったのだと知り、彼をロックオンしたのだが、ビッグイベント中なのか、珍しく離席のようである。安藤さんと桜木さんは在席だが、DBAは桜木さんということなので、まず彼に物理ERの場所を聞きに行く。横に並ぶ二人に割って入り、桜木さんに話しかける。

「すみません。ランサースタイルの山口といいますが、はじめまして。桜木さん、ですよね。ちょっとデータベースのことで聞きたいことがあるんですが。」
「はい。はじめまして。お話しはお聞きしています。よろしくお願します。」
 セルかチタン全盛の今にしては珍しく、ツーポイントの縁なしフレームをかけた、小ざっぱりした青年。育ちの良さがにじみ出ているという印象だ。吾輩が続ける。

「あのう、物理ERってあるんですかね?」
「あっ、えーと、ツールで出すようになってるんです。あとでメッセンジャーでセットアップの場所をお送りしますんで、インストールしておいてください。とりあえず今は印刷してお渡ししますね。」
 オフィスの窓側にあるプリンターから戻ってきた彼は、A3、3枚の巨大なER図を持って、僕に手渡してきた。うっ、でかいうえに字が小さい。面喰らいながら、一応お礼をするも、気になったことを思い出したので、A3の2枚目に目を凝らし、それがそうなっていることを確認して、彼に問う。

「ええと、3Aの画面、仕入データに仕入先と取引先を入れるんですけど、画面からは、両方マスタを参照して入力できるできるようになっています。なのに、仕入先マスタにも、取引先があって、マスタで登録されている取引先以外を仕入データに登録できるんですが、これはいいんですか?」

(2)受け身というニュアンス

 吾輩はシステムエンジニアーである。仕様があるのかどうかはまだわからない。

 川沿いの立派なビルの高層階。フロアの隅の、ガラス張りで仕切られた一角が、この現場の喫煙所である。ヤニがこびりついた大きな窓に向かいメビウスを吹かす。眼下は遊覧船が川を漂い、初夏が河川敷を深い緑にしようとしている。右耳からは仕事の話、左耳からは先週末の家族サービスの話。ふと、喫煙所の外に目をやると、カップベンダーの前で、吉沢さんが両手でカップを持って、コーヒーを飲んでいるのが見えた。彼女も少し休憩のようである。さっきは気づかなかったが、濃紺のワンピースという姿に驚き、目鼻立ちもよく整っているのを再認識する。素直さのようなものが残る話し方からも、まだ二十代中盤くらいだろう。その年齢で、よくフリーランスという立場を選んだものだと感心しつつ、火を点けたばかりの、二本目を灰皿に押し付け、喫煙所を出た。カップベンダーの前を通る。

「吉沢さん。」
「あ、はい。お疲れ様です。」
「なんか、大変な仕事ですね。私、単月ですので、さっさと自分の分、片付けて終わろうと思います。短い間ですけど、よろしくお願いします。」

「ところで、フレームワークが変わったときに、全機能の実装見直しは、別スケジュールにすべきだったと思うんですが。いや、吉沢さんに言っても仕方のないこともしれませんが。」
「いえ、私もそう思ってました。でも、スケジュールが遅れているとのことで、そう決まったんです。こうなることは、なんとなくわかってましたが。」
「意見しました?」
「いえ、しませんでした。」
「なぜです?」
「私は、下っ端のプログラマーですから。」

 プログラマーという言葉に受け身のニュアンスはもう無い。リナックスが普通になるあたりまで続いていた、職業プログラマーが書いたフラグだらけのコードは、もうあまり生まれなくなっている。今日は、業務エンジニアリングにおいてでも、古き良き美しいコードに励んできたアマチュアプログラマーの文化が浸透していっているわけである。新人のころは、そういったコードを書いて、お前しか読めないものを書くなとよく怒られたものだが、今はそういったことは少ない。そして、汎用機の時代にあった、コーダーを単純作業として雇うことは現代のシステム開発ではありえない。テクノロジーが多様化しており、プログラムを単純作業にすることができないからである。そもそも、二十一世紀のプロジェクトには、そんな時間もカネもない!
 むしろ、オペレーティングシステムに用意されたAPIを呼び出して、興奮していた学生時代とは異なり、その先にある、顧客の要件を満たすプログラムを我々は書いている。仕様理解の深度や、顧客との距離はあろうが、プログラマーとして、WBSに組み込まれていたとしても、我々はシステムエンジニアーという言い方のほうが、ふさわしいのではないか。だからといって、プロジェクト全体を見渡して、最適な振る舞いをすることが、システムエンジニアーの仕事なのか、ということには議論の余地がありそうだが。

「うーん。じゃあ、吉沢さんは、この高いビルの上から、飛び降りろって言われたら、飛び降ります?」
「え?飛び降りるわけないじゃないですか。」
「それと一緒だと思うんですけどねえ。飛び降りなくてもいいように知恵を絞る。」
「確かにそれはそうですが、スケジュールや、プロジェクト運営のことは、私が考えることじゃないでしょう。今、私は、ここの現場で使っている、Mという言語を修得するのに必死なんです。」
「なるほど。プログラマーに徹していると。」
「ええ。出会って間もないのに、こんな話するのは、漱石の坊っちゃんの冒頭みたいで変ですけど、私は、もともと歯科技工士だったんです。そのまま続けてもよかったんですけど、あるきっかけで、派遣で事務をやるようになって。そこで、エクセルのマクロを作らされたんです。」
「作らされた。」
「はい。そこで作ったものが非常によくできていたみたいで、あれよあれよと、いろんなひとの紹介で、ランサースタイルにいるのがいちばんいいということになったんです。今、私は振り落とされないように必死なんですよ。」

「わかりました。もう、こういう話はしないことにします。最後にひとつだけ教えてください。」
「なんでしょう?」
「プログラムは好きですか?」
 目を見開き、真一文字に結んだ彼女の唇は、笑みのようにも見えたが、
「わかりません。でも、楽しいです。」
「そうですか。失礼しました。じゃあ、先に戻りますね。」
 坊っちゃんの冒頭を思い出しながら、自席へ歩みを進めた。いろんな人生がある。
 
 

(1)プロローグ

 吾輩はシステムエンジニアーである。仕様はまだ無い。

 前の現場の同僚に勧められて、フリーランスというものになってはみたものの、どこの現場も状況はそんなに変わらないようである。会社に属さないエンジニアーを、フリーランスという立場で、仕事を紹介してくれる、ランサースタイルというところを訪ねたのは、まだ、前の会社に在籍していたころの、風の強い、春の週末だった。

「新年度が始まったばかりなんでね、新しい案件が動き出すとか、交代要員の募集の時期ではないんですが…。比較的大きめの、終わっていないプロジェクトっていうのが、いくつかあって、そういうところから、一時的な要員ってことで声がかかっていたりするんです。」
 吾輩を迎えてくれた、営業の出水さんが、それまで、左手だけで持っていた経歴書を、両手で握りしめるように持ち替え、吾輩の目を見て話し始める。それを察し、少し言葉を選ぼうとしたのだが、
「うーん、それは、いわゆる『火消し』ってやつですかね。」
と吾輩は発してしまっていた。出水さんも同じように、少し時間をおいてから、
「まあ、そういうことになりますね。」
と口を結ぶ。

 吾輩としても、四半期の切れ目でないときに、仕事がないことも、また、こういった時期に募集がかかる案件に、何らかの問題があることもわかっている。要員にしても然りだ。サラリーマン時代も、火消しに投入され、うまく役目を終えて抜け出せたところもあれば、しばらく抜けられなくなったところもある。出水さんが続ける。
「月末に、今の会社を退職されて、即稼動をご希望ということなので、ちょっと、そういった案件ですが、山口さんは、10 年のベテランでいらっしゃいますんで、しばらく、こちらで頑張っていただいて、いま、営業をかけている長期の案件をご紹介できるように進めて行きますんで。」

 『火消し』だからなのかどうかはわからないが、システムの概要や体制の説明などはなく、初日の朝に訪ねたプロジェクトリーダーとは、朝の挨拶を交わし、席はここ、やることは隣の人に聞いてくれ、この人も同じ所属の人だから、と言い残し、自席に座るや否や腕まくりをし直して、何やらすごい勢いで自分の世界に戻っていった。なるほど、やはり、スケジュールは大きく遅れているのだなと認識したが、プロジェクトリーダーとは、それっきりである。さて、ファイルサーバーとソースリポジトリーの場所、そして、プログラムのビルドと実行までの手順を教えてくれた、くだんの「同じ所属」の隣人にこのあとの段取りを問う。

「吉沢さん、実行できましたけど、WBSによると、僕の担当は3Aの画面ですかね。でも、この画面、全然動かないんですけど。」
 プロジェクトの雰囲気を探りつつ、事を荒げたくないような静かな口調を努めたが、それは、隣人が若い女性であるというせいもあっただろう。
「ああ、やっぱりそうですか。たぶん、共通関数の仕様が変わっていて、それが反映できていないんだと思うんですけど。ちょっと見てもらっていいですか。」
 今日で着任して三日経つが、この現場は火を噴いているわりには、比較的穏やかな空気が流れている。その不思議さを彼女の口調にも感じた。
「それは、お易い御用なんですけど、もう、ちょっとソース見ました。例えば、この、仕入先コードですけど、3Aの1で値をセットしている場所と、3Aの2で取得する場所が違いますね。どっちが正解なのかはわかりませんけど。」
「ああ、そういうのもあります。」
「まあ、しょうがないですね、これ動くようにすればいいんですよね。でも、ざっと見た感じ、こういうのが多そうですね。明らかに書いてないところもある。」
「ええ、作った時期によって、考え方が違ってて、うまく噛み合ってないんです。それを今、直しながら、テストしているところなんです。」
 吉沢さんの口調が、若干の焦りに変わる。とはいえ、ランサースタイルの島には、吾輩も合わせて、六人のメンバーがいるのだが、彼らからはそういった隠れた焦燥感は感じない。時折、談笑に花が咲くこともある。

「これは、私も悪いと思ってるんですけど。」
 吉沢さんが、か細い声を出して続ける。
「初めのうちは、安藤さんから渡される設計書を細かく見て、画面間のつながりとか設計書に書いてない例外処理とか、そういう疑問やつじつまがあわないところを確認しながら作っていたんです。で、途中で、三か月くらい前だと思うんですが、今使っているフレームワークだと帳票の印字方法がお客さんの要望に合わなかったり、生産性があまりよくない、とかいうことで別のフレームワークを使うことになったんです。」
「はあ、そんなことがあったんですか。」
「はい。結局、それまで作っていたプログラムを新しいフレームワークに置き換えていったんですが、それを、新規で開発する機能と並行で作業することになってしまって…。少し、体制が混乱した時期でもあったので、置き換え分も新規分もちゃんとテストすることができず、ごらんのありさまなんです。」
 ちなみに安藤さんというのは、我々の上位会社であるレインボーソリューションの設計担当の人だそうだ。向かいの島に座っている。プロジェクトリーダーは、その前の席で相変わらず自分の世界に入っている。

 吾輩はそれ以上、問うことはしなかった。このプロジェクトにはいろいろな問題はあろうが、そういったことは気にせず、今、ここにある動いていないプログラム達を、実装の美しさやあるべき形などは二の次で、とにかく、動くようにすればよいのだという、割り切りの感情を自身に浸透させようとしていた。ちょっと、煙草を吸ってくることにする。吾輩は愛煙家なのだ。