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

罪と罰(28) 神のサイコロ

»

 トリノオリンピックの金メダリスト、荒川静香さんが以前、TVでこんなことを言っていた。選手たちは失敗したくないので日々がんばっているが、それでも失敗した場合に、その後どう立て直すかということが大事なのです、と。

 その言葉を聞いて、私は社会人一年目のとき、メンター役だった先輩のことを思い出した。その先輩も同じ意味のことを言っていたからだ。曰く、バグや仕様漏れをなくそうと努力することは重要だが、それ以上に重要なことは、トラブルが発生したときにいかに適切な対応を取るか、ということだ、と。

 適切な対応とは何か、という質問をした私に、その先輩は少し考えた後、笑いながら答えてくれた。

 「たとえばバグというのは噛み終わったガムみたいなものだ。道端に吐き捨てて、誰かの靴の裏にくっついたりしたら、取り除くのに多大な手間がかかる。でも、紙に包んでゴミ箱に捨てれば、その数十分の一の労力で始末することができるし、誰の迷惑にもならない」

 このことを武田さんに話したことはないが、仮に話したとしても、たぶん理解はしてもらえないだろう。武田さんは「完璧なドキュメントを作ればバグや仕様洩れなどは発生しない」という、この業界の先人たちがかなり昔に切り捨てた思想を、今でも信奉しているらしいのだから。Webシステム開発部のメンバーは、仕事中や飲み会の席で、武田さんがそう口にするのを何度も聞かされている。

 もっとも、以前、足立が「完璧なドキュメントってどうやれば作れるんですか」と、半ばからかうように訊いたら、それは日々研究中だが、いつかは方法がわかる、という意味の答えが返ってきた。それを負け惜しみで言っているのではなく、本気でそう信じているらしいのだから、もはや一種の宗教のようなものだ。もし武田さんが物理学者だったら、今でも「神はサイコロ遊びなどなさらない」と量子論を否定し続けたに違いない。

 火曜日の10:00ちょうどに、池田さんと北条さんに引率されて、KSR電機からの実装要員が来社した。私たちは――特に武田さんと久保さんは――緊張した面持ちで彼らを迎え入れた。

 3人のプログラマさんたちは、いずれも20代前半ぐらいの男性で、マサルと同世代と思われた。外見の印象は、それぞれ、長身でひょろながい手足、中肉中背でやや太り気味、小柄で小顔のジャニーズ系。共通点は全員がメガネをかけていることぐらいだ。

 「じゃ、自己紹介して」池田さんが時計を見ながら促した。

 「斑目ショウヘイです。ラメと呼ばれています」

 「迫田カズシゲです。カズと呼んでください」

 「鳩村タイチです。社内ではサブレと呼ばれています」

 彼らの顔からは、これから約一ヶ月弱、よその会社で働くことに対する気後れなどは全く読み取れず、それが顧客という立場だからなのか、性格によるものなのかはわからない。

 紹介の儀式を短い時間で済ませると、次の予定があるという池田さんは急いで帰り支度をしながら、武田さんに言っていた。

 「自分の部下だと思って、ビシビシこき使ってやってください」

 その言葉を真に受けたわけではなかっただろうが、武田さんはKSRチームに対しても、自分のやり方を貫くことに決めたようだった。KSRチームの3人はすぐにでも実装に突入したくてウズウズしていたようだが、武田さんがまず行うことにしたのは、仕様書の説明だった。会議室から借りてきたホワイトボードに書かれたスケジュールによれば、今日と明日の午前中までは、仕様書の説明となっていた。

 「あの人、残り期間が1ヵ月切ってることわかってるんですかね」その様子を見ながら、呆れたように守屋がつぶやいた。

 「きっとわかってるからこそ、仕様書を理解してもらってるんだろう」木下がやはり小声で答えた。

 「どうせすぐイヤになるよ」と、足立も冷めた口調で予想した。

 言葉には出さなかったが、私も足立と同意見だった。

 用意された席に座り、スケジュールを説明されたKSRチームの3人は、戸惑ったように顔を見合わせたが、最初は何も言おうとしなかった。だが、目の前に18画面分の仕様書のプリントアウトが置かれると、さすがにげんなりした顔をした。

 「あのお」ラメさんが言った。「これ、全部、説明されるんですか?」

 「そうですよ」武田さんはにこやかに答えた。「何か問題でもありますか?」

 「ああ、いえ、そういうわけじゃないんですが。っていうか、それぞれ担当する画面は違うんで、自分の担当分だけ読めばよくないっすか」

 残りの2人も同意するようにうなずいたが、武田さんの表情は変わらなかった。

 「別の画面であっても、共通する機能もありますしね。自分の担当分だけっていうのは、ちょっとね」

 「えー、マジすか」カズさんが、勘弁してくれと言いたげに笑った。「あんまり時間ないと思うんすけどね」

 「ボクら、池田さんからとにかく絶対に期限に間に合わせろって釘刺されてるんですよ」サブレくんも言った。「このスケジュールで間に合うんですか?」

 武田さんの顔が少し曇った。

 「私のやり方を信じてくださいよ。うちでは、このやり方でずっとやって来たんですから。みなさんは開発部門に所属しているのかもしれませんが、私はプロなんでね。プロにはプロのやり方があるんですよ」

 その言葉でKSRチームが感銘を受けることを期待していたとしたら、武田さんは失望したに違いない。3人とも退屈そうな顔をしているか、そうでなければ不信感を露わにしていたからだ。

 「まあ、ともかく」それまで黙ってスマートフォンを見ていた北条さんが口を開いた。「普段のうちのやり方と違っているかもしれんが、別の会社のやり方を知ることも勉強になるだろう。まずは、武田さんの指示に従ってやってくれよ」

 その顔が、いかにもうんざりしつつ、どこか諦観の境地を漂わせていたので、常日頃から、3バカトリオに悩まされている私は、思わず北条さんに同情してしまった。時間があれば、ぜひ部下をしつける方法などを情報交換したいものだ。

 言われた3人は顔を見合わると、仕方なさそうに答えた。

 「「「はーい」」」

 返事をハモるところも、3バカトリオとそっくりだ。

 「すいません、武田さん」ため息をつきながら北条さんが言った。「こいつらに気にせず、続けて下さい」

 「では」武田さんは仕様書を手に取った。「最初のページを開いてください」

 詳細仕様書を作成するのと、それを細かく説明されるのと、どちらが苦痛なのだろう。少なくともプログラマにとって嬉しくないという点では共通している。

 午前中を何とか乗り切ったKSRチーム3人だったが、午後の部に突入し、北条さんがいなくなった後では、眠気をこらえるのに苦労しているようだった。ひょっとするとKSR電機では、手を焼く若手プログラマに何かのペナルティを与えるつもりで、こんな提案をしたのだろうか。

 「あの人たち眠そうだけど」14:00頃、カスミさんが囁いた。「コーヒーでも淹れてあげた方がいいかしらね」

 「そうですね」私は賛成した。

 給湯室に姿を消したカスミさんは、しばらくしてトレイに載せた来客用のコーヒーカップとともに戻ってきた。

 「武田さん」カスミさんは優しく呼びかけた。「コーヒーを淹れましたので、少し休憩なさっては?」

 説明を邪魔されて、武田さんの顔にムッとしたような表情が浮かんだものの、すぐに思い直したらしくうなずいた。

 「ありがとう。じゃ、ここで5分ほど休憩にします」

 睡魔との戦いから解放されたKSRチーム3人は、嬉々としてコーヒーを受け取り、口々に礼を言った。よほど嬉しかったのか、コンビニで買ったインスタントコーヒーを、挽き立てのキリマンジャロブレンドででもあるかのように絶賛している。毎日こんなサービスがあるのだと誤解しなければいいのだが。

 カフェインは、眠気だけではなく、わずかに残っていたかもしれない遠慮も吹き飛ばしてしまったらしく、5分後に戻ってきた武田さんに対して、ラメさんがこう切り出した。

 「あー、すいません、武田さん。ちょっといいすか」

 「はい、なんでしょう」

 「やっぱりどう考えても、こういうのは時間のムダだと思うんすよね」ラメさんは仕様書を持ち上げて指で弾いた。「それよりさっさと自分の担当分のコーディングに入った方がよくないすかね」

 武田さんはうんざりしたような顔になった。

 「またその話ですか。とりあえずうちのやり方でやってもらうと、さっき北条さんも言っていたでしょう」

 口には出さなかったが、忍耐力のない奴らだ、と思っていることは、武田さんと付き合いの長い私にはよくわかった。

 「はあ。でも......」

 「とにかくですね」議論は終わり、とばかりに武田さんはきっぱりした口調で告げた。「だまされたと思って、これでやってみてください。ムダな時間に思えても、最後には、ああ、仕様書をしっかり理解することで、こんなにシステム構築が簡単になるんだ、とわかりますから」

 サブレくんが、だまされるのは嫌いなんだよなあ、とか小声でつぶやいていたが、武田さんはそれを無視して、仕様書の説明を再開した。

 これで――表面上だけでも――平穏に進むか、と思っていたら、10分もしないうちに、武田さんの説明は中断された。

 「すみません。ちょっと質問が」カズさんが手を挙げた。「このスペックページをポップアップするところなんですけどね」

 「なんでしょう?」

 「これ、違うサーバのURLをiframeArea01に表示、とありますけど、その前のログインはどうするんですか?」

 「ログイン?」武田さんは仕様書を見た。「そんなのありましたか?」

 「もちろんありますよ。スペック一覧システムは、URL直打ちしても、ログイン画面通りますけど」

 武田さんは顔をしかめて別のキングジムファイルを取り上げると、慌ただしくページを繰り始めた。途中で手を止めて、じっと中身に目を通し始める。隣に座っていた久保さんも、心配そうな顔で横から覗き込んでいた。

 私はその様子を横目で見ながら、自分の仕事を進めていたが、不意に武田さんが声を上げたのでびっくりして顔を上げた。

 「木下、ちょっと来い!」

 守屋、足立と何か小声で話していた木下は、弾かれたように立ち上がると、武田さんの方へ駆け寄っていった。私も気になって仕事の手を止めた。

 「お前、この資料見て、この仕様書作ったんだよな」武田さんは木下を叱責していた。「なんでログインのことが一言も書いてないんだよ!」

 「......」

 木下は黙って武田さんが差し出した資料を見ていたが、すぐに肩をすくめてそれを返した。

 「すみません。見逃してしまったみたいです」

 「すみませんで済むか!すぐ追記、いや、書き直せ!」

 「わかりました。すぐやります」木下はあっさり了承した。「それで、どうやってやりますか?」

 「なに?どういう意味だ?」

 「いや、だから、具体的な方法ですよ。どうやってログイン画面を通すんですか?」

 「そうそう」カズさんが口を挟んだ。「ぼくもそれが訊きたかったんですよ。あ、これ自動ログインじゃないと困りますよ」

 武田さんの顔に困惑が広がった。慌てて資料に目を戻し、再び中身を読み始める。

 「守屋」私は小声で守屋を呼んだ。「あれ、どの画面のこと?」

 「たぶん、KSR01G002 です」守屋も小声で答えた。「あ、ちょっと待ってください。共有フォルダのパスを送ります」

 すぐにメッセンジャーで、共有フォルダにある仕様書ファイルの絶対パスが送られてきた。私はそれを開いてみた。木下が見落としたというポップアップ画面はすぐに見つかった。

Popup1_2

Popup2

 その部分を読んでいると、守屋が寄ってきた。

 「見られました?」

 「うん。これでしょ」私は画面を指した。「要するに、このonclickイベントに書いてあるURLを、iframeのlocation.href にセットするだけだと思ったら、実はログイン画面を経由する必要があったってことか。このURLは別サーバなわけね」

 「はい。そのサーバはKSRさんの営業部門が参照するために立ててあるみたいです。社内LANじゃなくて外に」

 「で、ログインがあるわけね」

 「BASIC認証でしょうかね」

 「開いてみようか」

 私は「例」に書かれているURLをコピーすると、ブラウザに貼り付けてみた。KSR電機のロゴの下にユーザIDとパスワードを入力する画面が表示される。

 「BASIC認証じゃないね」

 「このIDとパスワードがわかってるなら、別にiframeを追加して、そっちでログインだけさせたらダメですか」

 「ダメね。iframeは別セッションになるから、2番目のiframeで認証突破しても、その情報――たぶんCookieだろうけど――がこのiframeArea01には引き継がれないでしょ」

 「あ、そっか」守屋は頭をかいた。「そうすると......」

 「箕輪さん」武田さんが私を呼んだ。「ちょっと来てくれんか」

 五十嵐さんは部長と外出中だった。もし席にいたら制止されたかもしれない。そんなことを思いながらKSR案件チームの島に行くと、武田さんが困った顔で仕様書を差し出してきた。たった今、自席で開いていたページだ。

 「これ」ぶっきらぼうな声だった。「ログインがいるんだ。どうやったらいい?」

 「ちょっとそっちの資料、見せてもらえますか?」

 武田さんはKSR電機からの資料を渡してきた。別にそれが見たかったわけではない。考える時間を稼ぐためだったのだが、深層意識のどこかで実装方法を試行錯誤していたらしく、受け取ったときにはだいたいの考えがまとまっていた。

 「えっと、JavaScriptだけでこれをやるのは難しいと思います。だから、Ajax 使ってURLをサーバ側に送って、サーバ側でHttpClientか何かでログイン処理をします。ログインが成功したら、ターゲットのURLにリクエストして、レスポンスのHTMLをブラウザに返す。ブラウザ側では、document.write で iframe に書き出す......って感じでしょうか」

 武田さんが反応する前に、カズさんが身を乗り出した。

 「スペックページの中の画像なんかは、相対パスで書いてあるのがあるはずなんですが......」

 「そうですか。だったら、ブラウザに返す前に、絶対パスに置換すればどうでしょう?」

 「ああ、なるほど。それで行けそうですね」カズさんは納得したようにうなずいた。「ありがとうございました」

 黙ってやり取りを聞いていた武田さんが咳払いした。

 「箕輪さん、ありがとう。木下、今の、わかったか?」

 「......はい」

 「じゃ、すぐ仕様書直してこい」

 木下の顔に一瞬、怒りの色が走ったが、すぐにそれは消えた。

 「わかりました。すみません。武田さんがチェックしてくれたから、てっきり漏れはないと思ってたもんで」

 最後の言葉は明らかに皮肉だった。KSRチームの3人にもそれはわかったらしく、クスクスと笑い声が上がった。私は木下の視線を捉えると、「余計なことを言わないでさっさとやれ」という意思をこめて睨んだ。

 自席に戻ると、まだ残っていた守屋がニヤニヤ笑っていた。

 「いいんですか?五十嵐さんから、KSR案件にはリソースを割くなって言われてるんでしょ?」

 「たかだか2、3分でしょ」私は冷たく応じた。「これが最後だから」

 「実装に入ったら、もっと出そうですけどね」守屋はそう言うと戻っていった。

 残念ながら守屋の言った通りだった。

(続く)

 この物語はフィクションです。実在する団体名、個人とは一切関係ありません。また、特定の技術・製品の優位性などを主張するものではありません。

Comment(23)

コメント

yamada

本当に武田さんは内部の人間に否定され五十嵐さんみたいな半外部の人間にも否定され、今度は客からもそっぽ向かれるパターンが続くな…

武田さんみたいな人は宗教家にでもなるのが一番かも。

とりすがり

誰からも賛同を得られない宗教家はもはや宗教家ではなく
狂信者というべきでは?;)

a

先週と話し繋がってます?

とりすがり

時系列でちゃんと進んでますよ?

CES

新人さんが来るのはこの翌日のことですかね。

n

今回が火曜日なので新人さんがくるのは翌日の水曜ですね。
前回の引きから水曜の話が来ると思っていたので、少し肩透かしをくらった気分です。

wwJww

新人がきて、KSR のメンバ + 新人が武田氏をボロクソに叩く展開でしょうか。

lav

これ、しばらくしたら、五十嵐さん、スーパー激おこインフェルノになるパターンしゃん

第二開発課のリソースを、奪おうとした上に、進捗があがらないんだから
進捗が進まないなら、KSRの池田さんも激おこだし

川田

来週の水曜日じゃないのかな

BEL

KSRレビューの金曜に"翌週火曜からKSRのメンバーが加わる"で、
その金曜の翌月曜の採用面接で"新メンバーが翌週の水曜から"だから、
今回の翌週水曜でしょうね。

時間は意外と進んでない

別セッション?

Cookieを使っているならログイン情報は別のiframeにも引き継がれると思うのですが、違ってますかね?

3月末まで引き延ばそうってつもりなのかも知れんけど、
読んでる方からすると、脈絡がなくて、冗長で、つまんない。
あと、タイトルを有名作品から取ってくるのも、無理がありすぎる。
作者にしてみればしゃれてるでしょ、って感じかもしれんけど、
この連載に関しては、空回りがすぎる。

あああ

引き延ばしたって、作者に何の得もないだろ。

ジョブ=インフェルノ

>別セッション?

別サーバなら別セッションですね。

あああああ

掲載話数で単価払いとか、電子書籍にした時の売りやすさとか
下世話な方向で得があるんじゃないですかね。

あああ

>掲載話数で単価払いとか、電子書籍にした時の売りやすさとか
>下世話な方向で得があるんじゃないですかね。

■コラムニスト募集
http://el.jibun.atmarkit.co.jp/info/subscription.html

Q.投稿したコラムが公開された場合、原稿料は発生しますか。
A.「@IT自分戦略研究所 エンジニアライフ」(以下、エンジニアライフ)では、投稿コラムの買い取り、原稿料のお支払はいたしません。「エンジニアライフ」を、コラムニストのみなさまのオピニオンの発信基地として、あるいは人的ネットワークの構築場所として位置付けていただければ幸いです。

どっちが下世話なんだか。

名無し

下種の勘繰りが好きな読者は見てて痛々しいです…

本人は「人が気づかないことを指摘できる俺アタマいい」なのかもしれないけど

BEL

>Cookieを使っているならログイン情報は別のiframeにも引き継がれると思うのですが、違ってますかね?
私も「ん?」って思いましたが使用前提条件IE9以上とのことなのでみてみたら、
サードパーティーCookieはデフォルトで"ブロック"なんですね。

ただ、どうせサーバー間でログインさせるなら(できちゃうのかよとは思うが)
ajaxなど使わずに、"レスポンスのHTMLをブラウザに返す"ページを用意して、
targetをiframeに指定したリンクをはるだけでいいとは思う。

匿名

この場の応答では、別サーバのレスポンスはサーバ間でごにょごにょするというアイディアさえ伝われば十分な気も。
具体的な実装はコーディング段階で詰めれば良い話。


ただ詳細設計書にいちいち起こす場合、それが出来ないわけだけど。

とりすがり

冗長かどうかは完結しないと分からないのでは?
その章が無駄かどうかは、物語全体との対比においてのみ
判断できるんじゃないでしょうか。

また、各チャプター同士に意味的な連続性が無いことを
「脈絡がない」なんて切り捨てちゃったら、伏線なんて張れません。
ビジネス文書じゃないんだから、必要不可欠な要素のみで
構成する必要は全くないわけで。

>BELさん
それなんてフィッシn

BEL

シリーズ最長確実となりましたね。
私は間が空いちゃうよりは、長い話でも毎週読める方がいいな。
短い話を間髪いれずにでもいいけど難しいだろうし。

あくまでも物語なので細部で事実と違ってたりしても、
私は問題ないと思ってますけどね、描写がリアルなもんで逆にきになる。

相対パス書き換えとかやりたくないなw
こういう管理サイトだとなんとかなっちゃうのかもしれないけど
cssに画像の相対パス書いてあったり、JavaScriptから相対で書いてあったりしたらカオスだし。

まさか別ドメインなのでajaxが全滅でしたとかじゃないよね。

>とりすがり さん

>それなんてフィッシn
他サイトのコンテンツをあたかも自サイトのものであるかのように出力。
(ajaxでもそうだけど)まさにフィッシンg

J

なんだか武田氏が高慢と偏見の三浦技術担当マネージャになってきた
感じがするなあ。

リーベルGさんの話がリアルなのは細部もさることながらきっと実在する
モデルがいるんだろうなと思ったりしますが、回によりますかね。

貴方の前に道ありき、あなたは右、左どちらに進みますか?私は今来た道を振り返り、そして考えることでしょう。

コメントを投稿する