ふつーのプログラマです。主に企業内Webシステムの要件定義から保守まで何でもやってる、ふつーのプログラマです。

人形つかい(8)鳴り止まない電話

»

 数日後にぼくたちの手元に届いた設計書は、これまで「橋本」だった担当者名が「高杉」と変わっていた。このことは「承認くん」開発プロジェクトを陰で仕切っていた高杉さんが、前面に出てきたことを意味しているようだった。

  いろいろな情報や状況から推測すると、これまでは、

 高杉さん:要件定義書を作成

 橋本さん:要件定義書から設計書を作成

 高杉さん:設計書をチェック、承認

 橋本さん:協力会社に設計書を下ろす

 という流れだったようだ。ただ、これはエースシステムのシステム開発標準からは外れた行為だったらしい。本来であれば、高杉さんが概要設計書を作成した後、橋本さんが詳細設計書として完成させ、高杉さんが最終チェックを行うはずだった。ところが、高杉さんはしばらく海外に出張――東海林さんはバカンスだと決めつけていたが――していたため、橋本さんがいきなり詳細設計書を作成していたのだ。

 残念なことに、橋本さんは正しい”てにをは”を使ったり、誤字脱字を取り除いたり、正しく項目番号やページ番号を正しく振ったりする技術には習熟していたものの、要件定義から設計書を作成する技術については未熟であることを露呈してしまった。もっとも東海林さんに言わせると、

 「そんなのは上の人間の責任じゃないか」

 となり、ぼくも同意見だったが、エースシステムのルールでは非は橋本さんにあるようだった。自分が未熟だということを認識できない方が悪い、というわけだ。

 そんなわけで、高杉さんが詳細設計書の作成まで行うことになり、橋本さんは得意分野に専念することになった。つまり、高杉さんが作成した設計書の、”てにをは”や誤字脱字をチェックし、項目番号やページ番号などの体裁を整えるのだ。

 「要するに、操り人形になったってことだな」東海林さんは容赦なく評した。

 上級SE高杉さんの手による設計書は、「ローカルPCのファイルを開く」といった、非常識な技術的の穴こそ激減していたものの、効率が悪い仕様が平然と記述されている点は変わっていなかった。SQL文には相変わらずJOINがないし、数百万件のレコードを持つテーブルの、インデックスもないカラムがwhere句に指定されていたりする。ただのIntegerやDoubleをラップしただけの、Aフレ内蔵メソッドの使用を強制している部分があったかと思えば、「Integer.parseInt(String) を使用して数値に変換」という記述がある。

  東海林さんもぼくも、効率に関して橋本さんに訴えるのはやめてしまっていたが、明らかに矛盾しているいくつかの仕様については、橋本さんに確認を取った。これまでなら「プログラマが設計について口を出すな」という態度だった橋本さんは、おとなしく「確認しておきます」とだけ答えるようになった。決定権が自分の手から離れたことで、ほっとしているのか、悔しく思っているのか、その表情からうかがい知ることはできなかった。

 ただ、高額の年収を得ているだけあって、高杉さんが航空母艦のように強力な推進力を持っていることはすぐに分かった。これまで、何となくまとまりがなかったプロジェクト管理が、きちんと体系化されるようになったらしく、渡される設計書は、以前に実装をしたパッケージと関連している機能であることが多かった。これまでは、ぼくと東海林さんは、何度かこっそり設計書を交換したりしていたものだ。

 また、ぼくたちが自社でも実装およびテストを行えるように、持ち出し用に無害化されたテストデータが用意された。Aフレの開発環境についても、自社の環境では動作しなかったことを告げると、次の日には、開発環境一式がインストールされた2台のノートPCを貸与する手続きが魔法のように完了していた。

 こうして東海林さんとぼくは、実装の場所を自社に移すことができた。エースシステムには週に1日か2日出向き、設計書についての打ち合わせを行ったり、新しいテストデータやAフレの更新パッチを受け取ったりするだけだ。

 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

 ある日のこと、ぼくは担当分の設計書の実装を自社に持ち帰って続けていた。少し面倒な仕様がいくつかあり、予想より時間がかかってしまったため、その電話がかかってきたとき21時を過ぎていた。ぼくは舌打ちして受話器をつかんだ。

 「サードアイシステムです」

 そろそろ帰ろうかと思っていたので、ぼくの口調は少しぶっきらぼうだったかもしれない。

 『エースシステムの橋本です』

 「あ、お世話になっております。細川です」

 夜のこんな時間に会社にかかってくる電話なんて、いい話のはずがない。その予想は見事に的中した。

 『ああ、まだいてよかった』橋本さんは心からほっとした声を出した。『実はですね、明日、K自動車の方が打ち合わせにいらっしゃるんですが』

 「そうらしいですね」

 いつもならエースシステム側が出向くのだが、K自動車のICTシステム部の担当者が実際にいくつかの画面を見たいために、わざわざエースシステム横浜を訪問するらしいのは耳にしていた。

 『それで、今お願いしているA03F017を見せたいんですよ』

 「はあ」イヤな予感が強まった。

 『明日までにできますか?』

 ――やっぱり……

 それにしても夜の9時過ぎに電話してきて言うことか?

  少しムッときた腹いせに、しばらくぼくは黙ったままソースを眺めた。実装そのものはだいたい終わっている。明日の午前中にテストをしようと思っていたのだが、もう少しがんばればできないことはないだろう。

 「そうですねえ」ぼくはわざとゆっくり答えた。「たぶん大丈夫だと思いますが」

 『ありがとうございます!』橋本さんが叫び、ぼくは顔をしかめて受話器を耳から離した。『それでどれぐらいでできそうですか?』

 「とりあえず実装はもうすぐ終わるので、終わったら一度ソースを送ります。そっちでもテストをしてみてもらっていいですか?」

 『もちろんです。それで、どれぐらいですか?』

 わかるもんか、と思ったが口には出さず、

 「じゃあ30分後を目処に送ります」

 と答えた。

 『わかりました。お待ちしています。よろしくお願いします』

 電話を切った後、少し橋本さんが気の毒になった。高杉さんが仕切るようになって以来、橋本さんは雑用係のような立場に甘んじることとなっていたのだ。

 「さて」ぼくは指を鳴らした。「やるか」

 社内は誰もいない。年度末が近づくと、日付が変わっても何人も残っていたりするが、ここ最近はそれほど急ぎの案件がないためか、20時前には全員退社してしまった。東海林さんは、日中、エースシステムに行っていたが、何かの用事で直帰するとのことで、こっちには顔を見せていなかった。

 予想通り、実装自体はすぐに終えることができた。ざっと動作させてみて、例外などが発生しないことを確認する。詳細なテストは、エビデンス作成も含めてじっくり時間をかける必要があるが、とりあえず動かすだけであれば、これでいいだろう。

 パッケージごと圧縮し、メールでの送信時には義務づけられているパスワードを設定する。素早くメーラーを起動し「送ります」とだけ本文を書き、圧縮ファイルを添付して、橋本さん宛に送信した。

 橋本さんは、今か今かと待ち構えていたらしい。数分で返事が送信されてきた。本文は例によって

 「拝承」

 の一言だけだった。

 ほっとして時計を見ると21時20分だった。ぼくはEclipseを閉じると、ブラウザを開いて映画関係のサイトをぶらついた。うちの勤怠計算は15分単位なので、21時30分を過ぎてから出退勤カードを切ろうと、せこいことを考えたのだ。

 それが間違いの元だった。数分後、再びけたたましく電話が鳴ったのだ。

 ぼくは電話機を睨んだ。ディスプレイに表示されている電話番号は、間違いなく橋本さんのダイヤルイン番号だ。帰宅したことにして無視しようか、と一瞬考えたものの、あきらめて受話器を取った。

 『大変申しわけないんですが』橋本さんは焦燥感あふれる声で叫ぶように言った。『お渡ししてあった設計書に漏れがあったようです。今、最新の設計書を送ったので見てもらえますか』

 「……わかりました。ちょっと待ってください」

 再びメーラーを起動し、メールをチェックすると、確かに橋本さんから添付ファイル付きのメールが来ていた。添付ファイルを開いてみると、A03F017の設計書の一部だった。

 「はい開きました」

 『上から4つめの原価コード選択ですが、ここは1つではなく複数になるそうなんです』

 ぼくは設計書をスクロールさせた。画面の項目定義を見ると、確かにコンボボックス1個だったはずが、3個に増えている。ぼくは、わざとらしくため息をついた。

 「わかりました。3個に変更すればいいんですね?」それぐらいなら、Aフレの画面項目定義を変更すればいいだけのことだ。

 『すいません。実はそうじゃないんですよ』

 「どういうことですか?」

 『項目定義は確かに3個と書いてあるんですが、それは初期値なんですよ。最大10個になります』

 「……設計書に書いてないですよ?」

 『すいません。昨日の昼に新しい要件が降りてきたんですよ。ちょうど設計書を修正しているところだったんです』

 通常なら明日にでも修正した設計書をもらえばいいだけのことで、橋本さんもそのつもりだったのだろう。だが、明日のK自動車の担当者向けデモに、A03F017が含まれることになってしまい、大慌てで泣きついてきたというわけだ。

 「わかりました」ぼくはため息をついた。「とにかく仕様を教えてください。4つ以上になったとき、画面上はどうなればいいんですか?」

 橋本さんの説明によると、3つめの原価コードを選択したとき、4つめを表示させなければならないらしい。同様に4つめを選択したときは5つめを表示させる。ただしブランクを選択したときは表示させない。

 「じゃあ仮に原価コード3を選択して、原価コード4が表示されたとしますね」ぼくは裏紙に書いたメモを見ながら訊いた。「その状態で原価コード3をブランクに戻したら、どうなるんですか?」

 橋本さんが答えるまで少しばかりタイムラグがあった。

 『その場合は詰めてください』

 「は?」

 『原価コード4で選択していたコードを、原価コード3で選択状態にして、原価コード4は非表示にするということです』

 「……面倒ですね」

 ぼくは遠慮なく素直な感想を述べた。面倒なのは、この手の動作がAフレの定義では記述できないからだ。このような場合、JavaScriptで処理を記述し、そのfunction名をAフレに定義することになる。Aフレ――今でも毎日のようにバージョンアップされ続けている――は1つの項目に対する定義なら大抵のことはできるが、複数の項目に関連する定義となると、途端に記述が面倒になるか、そもそも記述が不可能だったりする。

 「まあ、それでも、JavaScriptの追加なので、それほど時間はかからないと思いますよ」

 『申しわけありませんが、よろしくお願いします』

 「あ、項目同士の重複チェックはしなくていいんですか?」

 橋本さんが息を呑む気配が電話線から伝わってきた。

 『すみません。重複チェック必要です』

 「でしょうね」ぼくはブラウザを閉じ、Eclipseのアイコンをダブルクリックした。「わかりました。やってみます」

 『どれぐらいでできますか?』

 ぼくは時計を見た。21時42分。

 「30分ぐらいですかね」

 『わかりました。お待ちしています。他の準備は全部終わっていて、これだけなんですよ』

 電話を切ったぼくは、給湯室に駆け込み、ポットに残っていたお湯でインスタントコーヒーを淹れた。それを手に自席に戻り、ポキポキと指を鳴らして準備をする。そうこうしているうちにEclipseが起動した。

 「よし、やるか」

 自分に宣言して、先ほど閉じたソースを開いた。生ぬるいコーヒーをすすりながら、コードを眺め、どういう方法でやるかをざっと考える。まず原価コード1から10を追加し、4から10までのstyleにdisplay:none を指定しておいて……

 ぼくの思考は、パンシーのように泣き叫ぶ電話の音で強制中断された。

 「はい!」

 『橋本です。すみません、ひとつ言い忘れたことがあって』

 「なんでしょう」口調がぶっきらぼうになっているのが、自分でもわかった。

 『原価コードのカテゴリなんですが、ユーザの職位コードによって使用制限がありますよね』

 「そうですね」ぼくはロジックのJavaソースを開いた。「確認ボタンを押したときにチェックしてますよ」

 『はい。それがですね、選択時にチェックしてほしいんですよ』

 「選択時ですか……」

 原価コードのカテゴリーチェックは、DBにアクセスする必要があるので、JavaScriptだけでは無理だ。Ajaxで呼び出せるようにチェック用のロジックを修正する必要があり、そうなるともう少し時間がかかることになる。

 「そこまでやるとなると今日中は難しいですね」ぼくは予防線を張った。「とりあえず明日はそのチェックはなしで見せたらどうですか?」

 『それが高杉に確認したところ、チェックも入れろということで……』

 「高杉さんは、まだいらっしゃるんですか?」ぼくは少し驚きながら訊いた。

 『いえ、定時で退社していますが、電話で確認しました』

 「そうですか……」直接交渉した方が早そうだと思ったのだが。「じゃあ、逆にですね、原価コード一覧を最初からログインユーザが使えるカテゴリだけに絞ってしまったらどうでしょう?」

 『そうですね』橋本さんの声が明るくなった。『ちょっとこっちで検討してみますので、少しお待ちいただけますか?』

 「わかりました。でも、急いでくださいね」

 『すぐにかけ直します』

 とにかく原価コードが10個になることだけは間違いないので、ぼくは橋本さんの電話を待つ間、そこからコーディングすることにした。

 橋本さんからの4回目の電話は、10分後にかかってきた。

 『実はですね、原価コードの一覧を取得する共通ロジックを調べてみたんですが、絞り込み機能としては、申請種類と職位コードがあるんですが、両方でというのがないんですよ』

 もともと、この画面では申請種類での絞り込みを行った結果の原価コード一覧を使っていたのだが、最初の設計時では職位コードでの絞り込みも必要になるとは考えられなかったのだろう。

 「じゃあ、メソッドを追加すれはいいんじゃないですか?」

 『共通ロジックの追加や変更は、私ではできないんですよ。稟議を上げて承認された後、Aフレのチームに依頼しないと』

 ――稟議ときたか。

 「でも、緊急事態なわけですよね?そんなこと言ってる場合じゃないでしょうに」

 『物理的に無理なんですよ』橋本さんは泣きそうな声で訴えた。『Aフレのコードにはアクセス権がないので』

 ぼくはまずいコーヒーをがぶりと飲み干した。

 「わかりました。じゃあ何とかやってみますが、時間はかかりますよ」

  『何時まででもお待ちしていますから。お手数かけます』

  電話を切ると、思わずため息がもれた。とにかくさっさと片付けるしかない。

 静まりかえったフロアに一人座って、ぼくは修正作業を続けた。必要なロジックなどは簡単に実装できたのだが、Aフレに定義として組み込む方に時間を取られた。これまでやったことのない手順なので、いちいちマニュアルを参照しなければならない。しかもマニュアル自体が正しいとは限らないときている。

 電話が鳴り響いた。コードに集中していたぼくは、飛び上がりそうになりながら受話器をつかんだ。

 「はい」

 『橋本です。どんな具合でしょうか?』

 ちらりと時計を見ると22時30分になっていた。心配で電話をしてきたらしい。

 「まだ途中ですよ」

 『そうですか。あとどれぐらいかかりそうですか?』

 ――知るか!

 「さあどうでしょうね」心中の声より少しトーンダウンさせた答えを返した。「だいたい実装は終わってるんですけどね」

 『わかりました。すみません。高杉が気にしているもので』

 「とにかく終わったら連絡しますから」

 そういうと返事も待たずに受話器を叩きつけるようにおいた。

 ようやくAフレの定義が終わったのは、15分ほど経過してからだった。定義ファイルをツールに通して、エラーが出ていないことを確認したとたん、またもや電話が鳴った。

 「はい!」

 『橋本です。どうでしょうか?』

 ――こいつの辞書には忍耐という言葉は載ってないのか

 今、実装が終わったところです。これからテストします」

 『そうですか。すみません。明日のデモはとっても重要なので、高杉がすごく心配してるものですから』

 ――だったらどうして作業の邪魔をしてるんだ。

 「終わったらお電話しますから」ぼくはそう言うと、返事も待たずに電話を切った。いい加減にしてほしい。

 画面を開いて動作させてみると、原価コードが10個表示された。これはまずい。ソースを開いてみると、原価コード4以降に指定したスタイルが消えている。どうもAフレが勝手にオーバーライドしているようだ。

 確か、オーバーライドを無効にする、ignoreなんとかというオプションがあったはず、とマニュアルファイルを開いた。このマニュアルは、目次も索引もないので探しにくいのだが、記憶を頼りにページをスクロールしていくと、何とか該当のページが見つかった。ぼくはページの先頭から読み始めた。

 電話の音!

 いっそ無視してやりたい誘惑に駆られたものの、電話の呼び出し音が鳴り響く中でマニュアルを読むのは得意ではない。

 「はい」

 『橋本です……』

 「わかってますよ」さすがに温厚なぼくもイライラしている。「さっきからまだ10分も経ってませんよ」

 『すみません。私も高杉からせっつかれていまして……』

 「せっつかれても時間は短縮できませんよ。いや、むしろ電話を取って、応答しているだけで何分かをムダにしてるわけですよね。そのあたり理解されてますか?」

 『すみません。明日のデモに間に合うのか、すごく心配してるんですよ』

 「間に合わせたいのなら、作業の邪魔をしないでもらえますか? それがお互いのためだと思うんですけどね」

 下請けが元請けに向かって言うセリフとして、適切だとはとても思えなかったが気にしなかった。橋本さんが何も言えないでいるうちに、ぼくは電話を切った。

 「ったく!」

 一言吐き捨てて、とりあえずの鬱憤を晴らすと、ぼくは再び読みづらいマニュアルに戻った。

 結局、マニュアルから該当箇所を見つけ出し、項目定義に反映させ、最終的に意図した処理が完成したのは、日付が変わる15分前だった。ぼくはソースをメールで送ると、1分待ってからエースシステムに電話した。

 ワンコールで電話に出た橋本さんは、数日ぶりに救助された漂流者のように、疲れ切った安堵の声で答えた。

 『お待ちしていましたよ』

 「遅くなりました。試してみてもらえますか?」

 『はい。すぐテストしますので、10分ほど待っていただけますか?』

 「わかりました」

 帰宅できる終電は0時31分だ。それを逃がすと途中の駅からタクシーで帰る羽目になるが、社長はタクシー帰宅にはうるさいので、あまり使いたくはなかった。

 10分があっという間に過ぎ、15分を経過しても、橋本さんからの電話はなかった。ぼくはじりじりしながら待った。ぼくの連絡を待っていたとき、橋本さんもこんな気分だったのかなあ、と思いながら。

 (続く)

 この物語はフィクションです。実在する団体名、個人とは一切関係ありません。似たような行動や言動があったとすれば偶然の一致でしかありません。また、特定の技術・製品の優位性などを主張するものではありません。

Comment(12)

コメント

BEL

橋本さんからの電話にもignoreなんとかのオプションがあればよかったのに。

くらにさん

>昨日の昼に新しい要件が降りてきたんですよ
な要件を明日のデモの範囲外に調整できないプロマネの力量不足。
よって、高杉さんのギャラが高杉…orz

ハムレット

意味深なタイトルですね。
非常に味のある話だと思います。

何故、大きな組織において人形が増えるのか、以下のブログに色々と参考になる意見が載っていました。暴言とかでなくても、ドキュメントレビューとかで、内容や考え方ではなく、細かな体裁や意味不明な習慣からの逸脱ばかり指摘され続ければ、往々にしてこうなりますよ。

http://blog.tatsuru.com/2011/07/05_1924.php

ちょっと気になる

高杉さん:要件定義書を作成

 橋本さん:要件定義書から設計書を作成

 高杉さん:設計書をチェック、承認

 橋本さん:協力会社に設計書を下ろす

これは、エースシステムの標準ではないですか?
この4つの中のどれかを省いた手順になっていたんではないでしょうか。

後、「送ります」とだけ書いて納品物送るのはどうかと思います。

かきえもん

とても面白く読ませていただいております。

細川くん、非常に忍耐強いです。
内心で文句を言いつつもリクエストに対してしっかり答えているところは、真面目なエンジニアの共通する一面ですよね。

高杉さんはゆっくりおフロにでもつかりながら指示を出しているのでしょうか?
K自動車には「現状ではここまでできています。原価コードのところはただいま実装中です」と説明してくれるのが高杉さんの役割のはずです。
ぜひ、高杉さんには鉄拳制裁をお願いします。

BEL

>よって、高杉さんのギャラが高杉…orz
なるほど、そういう、、w

新しい要件が降りてきたってことはK自動車は急なお願いをしたことを
自覚してるんだし、ダミー的に動くサンプルでもサクっと作って
実装後はここがこうなって、、って説明しながらデモすりゃいいんじゃ
ないですかね。エースシステム側もそれくらいは自社でできた方がいいし
その説得やなんかの調整もやるべき。発注先に迷惑をかける局面じゃない。

こういう会社って発注先が倒産でもしたらどうするつもりなんだろう。
いや、どこかでは実際に起きている話だよなきっと。

細川さんの会社にある程度のコミュスキルがあればk自動車から直接受注した方が
よっぽどいいものができそう。実際そうなった現場も経験したことがある。

alias

いつデモに追加することが決まったんだろう。
それによってはスケ管できてないってことになるんだけど。
しかし、高杉さん・・・時間が無いの分かってるならチェック処理とかしなくていいじゃん。
デモの時にイレギュラーな操作しなければいいだけなんだから。
中途半端にチェック処理が走ってどうにもこうにもなら無い状態になったら、印象最悪よ?

flatline

>これは、エースシステムの標準ではないですか?

たぶん、

>高杉さん:要件定義書を作成
>橋本さん:要件定義書から設計書を作成

の間に、高杉さんが基本設計書を作成するというフェーズがあるのではないでしょうか?

hoge

>>昨日の昼に新しい要件が降りてきたんですよ
>な要件を明日のデモの範囲外に調整できないプロマネの力量不足。
>よって、高杉さんのギャラが高杉…orz
見落としをしていたんだろうな。そりゃ人間だからそういうこともあるし仕方ないでしょ。
それより問題が見つかった時点で相談しない橋本さんが愚かすぎ。そして、それに振り回される細川くんがかわいそう。

Cl

誤字発見しました。
>『でも、緊急事態なわけですよね?そんなこと言ってる場合じゃないでしょうに」
括弧の組み合わせが不自然です

Clさん、ご指摘ありがとうございます。
今まで全く気付きませんでした(^^;
電子書籍の方、どうしよう……

コメントを投稿する