人形つかい(18) 夜の始まり
1月31日、月曜日。19:00。
東海林さんとぼくは、自社の自分の席に座っていた。といっても、開発作業を行っていたわけではない。
すでに「承認くん」の最新バージョンはK自動車内のサーバにデプロイされ、テスト系データベースで動作確認も完了している。まだいくつか小さな修正も残っていたものの、高杉さんは本番稼働後の対応で可と判断し、本日の12時を基準に、きりがついたメンバーから順番に実装作業をストップし、自社に戻るように告げた。ただし、帰宅していいというわけではなく、イニシャルデータ作成バッチ完了まで、即応体制で待機しているように命じた。
「あくまでも念のためですが」高杉さんは自信ありげだった。
イニシャルデータ作成バッチのスケジュールは、次のようになっていた。
20:00 承認伝票最終受付
20:00~21:00 1月31日分の承認伝票のデータ化(パンチ)
21:00~22:00 データの最終チェック
22:00~23:00 イニシャルデータ作成バッチ プロセス1
23:00~24:00 プロセス2
24:00~25:00 プロセス3
25:00~26:00 プロセス4
26:00~27:00 プロセス5
27:00~28:00 プロセス6
28:00~29:00 プロセス7
29:00~30:00 プロセス8
30:00~31:00 プロセス9
31:00~31:30 承認履歴データチェック
31:30、つまり2月1日の7時30分で「承認くん」の本番運用が準備完了となり、その時点で問題がなければ、橋本さんから連絡があり、ぼくたちはめでたく解散となる。
東海林さんとぼくは、13時に実装にきりをつけ、エースシステムを出た。東海林さんは自社に戻ろうとするぼくを止めた。
「一度帰って寝てこい。今夜は朝までかかるから。19時に会社集合な」
「でも、会社で待機しているだけですよね? 電話が鳴るまで寝てればいいんじゃないですか?」
東海林さんは哀れみをこめてぼくを見た。
「お前、何もないと思ってるのか?」
「……」
「首を賭けてもいいけど、絶対トラブルが起こって呼び出されるに決まってる。何も起きなかったら、ランドマークタワーの展望台からバンジージャンプしてやるよ。いいから、帰って寝てこい。ライズさんのメンバーにもそう言ってあるから」
「はあ」
ぼくは半信半疑だったが、急ぎの仕事があるわけでもなかったので、言われたとおりに帰宅してベッドに潜り込んだ。こんなに明るいうちから眠れるかな、と思ったが、数分後には眠りに落ちていたらしい。
18時過ぎにアラームに叩き起こされたぼくは、比較的すっきりした頭で会社へと向かった。東海林さんは一足先に来ていて、好みの濃いコーヒーを淹れていた。チョコレートやナッツも、しっかり用意されている。東海林さんは意外に甘党なのだ。
「なんか正月を思い出しますね」
「あのときぐらい静かならいいんだけどな」
しばらくは何も起こらなかった。年度末が近く、社内には他の業務で残業している社員が何人もいて、おしゃべりをしたり、TVを見るのははばかられた。東海林さんとぼくは、それぞれの席でぼんやりと座って、ときどきネットをうろつきながら時間をつぶした。
20時を少し回ったとき電話が鳴った。ぼくは心臓が跳ね上がるのを感じたが、東海林さんは落ち着いて電話に出て、二言三言話しただけで受話器を置いた。
「橋本さんからだ。承認伝票の受付を締め切ってパンチに入ったそうだ。まずは予定通りだな」
21時にも、データの最終チェックに入った旨の連絡が入った。その後、東海林さんの提案で、少し腹ごしらえをしておくことになり、ぼくは近くのコンビニに弁当を買いに走った。
21時50分。弁当を食べ終えコーヒーを飲んでいるときに電話が鳴った。ぼくが出てみると、やはり橋本さんからで、最終チェックが早めに終わったので、今からバッチを実行するとのことだった。
「うまくいくといいですね」ぼくは願望をこめて言った。
『そうですね。では、またご連絡します』
次の電話は、10分後に鳴り響いた。
『すみません』橋本さんの声が少し慌てているようだった。『東海林さんに変わってもらえますか?』
電話を変わると、東海林さんは電話をカンファレンスモードに切り替え、ぼくにも聞いているように合図した。
『実はプロセス1の途中で例外が出まして』
「どんな例外ですか?」
『NullPointerです。今、メールで送りました』
メールはうちとライズのメンバー全員に送られていた。東海林さんはあらかじめ起動してあったEclipseで、該当のソースを呼び出し、一目見るなり答えた。
「テンポラリ業務コードマスタのコンバート部分ですね。変換Mapを定義したXMLファイルがないか、テスト用になってませんか?」
『ちょっと待ってください。WEB-INF/etc の下ですね……』電話越しにマウスのクリック音が聞こえてきた。『……仰るとおりでした。テスト用のファイルでした』
「念のため、他のXMLファイルも確認してください」
『ありがとうございます。再実行できそうです』
電話を切った東海林さんは、ぼくの方を見てにやりと笑った。
「ほらな。いきなり何か起こっただろう」
「これで最後かもしれないじゃないですか」
「賭けるか?」
「……やめておきます」
5分後、またもや電話が鳴り響いた。東海林さんが受け、ぼくも自分の電話で聞き耳を立てた。
『今度は別の場所で例外が出てしまいました。今、送りました』
「ちょっと待ってください……」東海林さんは片手でメールを開いて、数秒間眺めた。「原価コードマスタへのinsertで落ちてますね。主キーの重複ですね。さっきやり直す前に、原価コードマスタのシーケンスを初期化しませんでしたか?」
『自動でされているはずです』
「処理が進んだ分だけ、シーケンスを進めてください」
『……忘れてました』
「他のシーケンスも忘れないようにしてくださいね」
『ありがとうございました』
慌ただしく電話は切れた。
「なかなか前途多難ですね」
「これぐらいは想定の範囲内だよ」東海林さんはタバコとコートをつかんだ。「ちょっと一服してくるから、電話があったら呼べ」
次の電話は、ちょうど東海林さんが戻ってきた瞬間に鳴った。
『プロセス1は順調なんですが』泣きそうな声だった。『プロセス3で問題が発生しました』
「どんなエラーですか?」プロセス3の実行はまだ先のはずだ。
『エラーというか……実はコンパイルが通らないんです』
さすがの東海林さんも絶句した。
「コンパイルが? プロセス3のですか?」
『そうです』
「そっちでテストしていなかったんですか?」
『していましたが……ちょっと事情がありまして……』
東海林さんはうんざりしたような声で訊いた。
「それで、どうしろと?」
『こっちへ来ていただけないでしょうか』
「わかりました。すぐ行きます」
『タクシーで来てください。とにかく急いでください』
電話を切った東海林さんは、脱いだばかりのコートをつかんだ。
「よし、行くぞ。昼間、寝ておいてよかったな」
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
ぼくたちは近くの県道まで走って、タクシーをつかまえた。うちの会社からK自動車港北工場までは、鉄道だと地下鉄とJRを乗り継ぐ必要があるが、タクシーなら15分もかからない距離だ。
タクシーの中で、東海林さんは携帯電話で橋本さんに詳しい事情を訊いた。それによると、バッチ処理の直前になって、K自動車のICTシステム部から、業務コードについての連絡が入ったそうだ。来年度、4月1日より業務コードのコード体系が若干、変更になる。すでに新しいコード体系に適合した業務コードが、86レコード存在している、と。
プロセス1は、K自動車の基幹システムのデータベースから、各種コードを「承認くん」の環境にコンバートする処理だった。これは本番環境で使用するためではなく、バッチ処理の間だけ使用する一時テーブルに格納される。コンバートは全レコード対象で実行されるから、プロセス1が完了した時点で、新しいコード体系の業務コードが一時テーブルに作成されていることになる。
高杉さんがイニシャルデータ作成バッチの担当部門に調査させたところ、影響についての調査は時間がかかるが、新しいコード体系に対応するロジックを、2~3追加することは簡単にできる、という回答を得た。それを聞いた高杉さんは、ロジックの追加を命じた。この直後に、プロセス1が実行された。
ところが簡単に済むはずのロジック追加が、意外に難航してしまった。バッチ担当部門のエンジニアが考えていたより影響範囲がずっと広く、バッチ部分だけではなく「承認くん」本体のロジックにまで修正が及んでしまったらしい。
その時点で修正をやめて元に戻していればよかったのだが、高杉さんに失点を付けられるのが怖かったのか、エンジニアとしての面子を大事にしたのか、さらにいくつかのロジックに修正が広がった。その間、エンジニアは「もうすぐです」を言い続け、高杉さんはそれをうのみにしていた。
さすがにしびれをきらした高杉さんが、直接様子を見に行ったときには、半狂乱になったバッチ担当エンジニアが、モニタの前で途方に暮れていたという。K自動車港北工場には、最小限の開発環境しか用意されておらず、バージョン管理システムもないので、元の状態に復元することもできないらしい。
「Eclipseのローカルヒストリには残ってないんですか?」東海林さんは聞いたが、否定的な答えが返ってきたらしい。
「そうですか……」東海林さんは窓の外を見た。「……とりあえず、そろそろ着くので一度切ります」
その言葉通り、タクシーは港北工場の正門前に滑り込んだ。ぼくはタクシーを降り、時計を見た。22時40分。
長い夜の始まりだった。
(続く)
この物語はフィクションです。実在する団体名、個人とは一切関係ありません。似たような行動や言動があったとすれば偶然の一致でしかありません。また、特定の技術・製品の優位性などを主張するものではありません。
コメント
name
長い夜の始まり><
elseorand
この事例でちゃんと事前確認していた上でのことなら、高杉なら逃げ切ってしまいそうに感じます。
しかし、東海林さんは流石に状況を読み切ってましたね。どういう布石をうっておいたか、次回を楽しみにしています。
tempom
祭りだ! 祭りが始まった!
元に戻せないなんて素晴らしい!
GOGOチアガール
案の定ですね。
しかし、今回の高杉さんにはちとリアリティが感じられないのですが、
SIerでホントにこんな上級SEが居るんでしょうか?
実務経験なしだけどMBA持ちでイキナリ月300万で開発案件のプロマネを
やらされる可愛そうなコンサル会社の若手ならいかにもなんですが。
今回の関係者には災難ですけど、主人公と橋本さんの成長に期待したい
ところです。
localtrain
まさか、コンパイルが通らないとは!
高杉さんどれだけ...
ハムレット
さて、システムに侵入した使徒を無事に駆逐出来るのであろうか。
ヤミ
どこまで東海林さんが予測済みか気になりますね・・
どんな展開になるやら次回が楽しみです!
tohosaku
話とは関係ないですが、タイトルはやはり「夜来たる」では(^ ^;
elseorand
そういえば違和感なく読んでしまっていましたが、
東海林さん達の担当って「WEBアプリ」側ですよね。
ロジック共有はありえるにしても、
バッチの仕様は橋本さんから聞いているだけくらいなのでしょうか??
とするとこれから、「ほぼ初見の壊れたソースをロジックを追いながら、再構築する、しかも数時間で。」という奇跡を起こすしかないと・・・
ほまらら
バージョン管理システムもないって、
それはもう開発環境がないのと同じでは・・・
と思ったけど、
確かに最初に入った会社はそれやってたな。
あれは地獄だった。
最初の最初がそれだったせいで、
『ソースコードに修正を加えるときは、元に戻せるように、修正前のコードをコメントアウトしておき、
いつ誰が何の目的でどこからどこまで修正したかをソースコード内にコメントとして残しておく』
のがエンジニアの常識であるという失笑ものの認識をインプットされてしまっていた・・・。
その頃に書いたアホな備忘録がネット上に残っちゃってるし。悶絶しそう。