常駐先で、ORACLEデータベースの管理やってます。ORACLE Platinum10g、データベーススペシャリスト保有してます。データベースの話をメインにしたいです

【小説 エンジニアの事故記録】第十四話 ぜんぶ僕のせい

»

---------------------------------------------------------------------
「君のバッチが実行された後、私のバッチが実行されるんだから」
---------------------------------------------------------------------

 昨日の夜、食事会の後のドライブで助手席に座っていた渚沙はそう言っていた。
 だとするなら、幸一郎が作成したバッチの後続バッチということになる。

(僕のバッチのせいで渚沙が貰い事故を受けたのだろうか?)

 ふと、そう考えた。
 そう考えると、腹の底から不安が立ち上って来た。
 幸一郎は渚沙に言われるまで、自分のバッチの後に実行されるバッチの存在は知らなかった。
 もちろん、そのバッチの中身も知らない。
 幸一郎が削除して再作成した売上履歴データテーブル(URIAGE_RIREKI)を、後続のバッチが参照していたらと思うとゾッとした。

(大丈夫。ちゃんとテーブルもデータも移動出来ている。仮にそのテーブルを渚沙のバッチが参照していたとしても、影響は無いはず)

 そう自分で自分に言い聞かせては見たが、そんな自分を納得させることも安心させることも出来ずにいた。
 それは、本来やってはいけないことを秘密裏に行った後ろめたさと、自分では動作保証が出来るほどデータベースに精通していなかったからだった。

 渚沙が作成したバッチが、幸一郎の作成した売上履歴データテーブル(URIAGE_RIREKI)を参照する仕様だったとする。
 そのテーブルが存在しない時間帯に動作していたらどうなるか。
 幸一郎の「売上データ蓄積バッチ」は、昨日の23時に動き出し23時15分に完了した。
 その後、幸一郎は小山に見つからないように、売上履歴データテーブル(URIAGE_RIREKI)をUSERS表領域から削除し、GYOMU_DATA表領域に再作成している。
 その作業はだいたい10分くらいで終わっていたと記憶している。

(僕はテーブルを削除した。その時に渚沙のバッチが動いていたとしたら......)

 一瞬、そんな仮説が幸一郎の頭を掠めて行った。

 幸一郎が気になったのは、売上履歴データテーブル(URIAGE_RIREKI)がデータベースに存在しない時間帯--
 つまり、が23時15分から23時25分の間に、渚沙のバッチがそのテーブルを参照しようとした、としたら--

 と言うことだった。

「まずい......」

 リアルな仮説を自分で立ち上げ、それが余りに衝撃的だったため、幸一郎は背筋がゾッとし脇からじっとりと汗をかいた。
 口の中か緊張で乾き出している。

「どうした?」
「いや......なんでもない」

 小山に自身の戸惑いを見られたくなかった幸一郎は、努めて平静さを装ったが、胸のドキドキは止まらないし汗も止まらなかった。
 幸一郎は仮説をよりリアルにはしたく無かった。
 だがまだどこかに、自分の思い過ごしかもしれないという期待もあった。
 だから、小山に確認しようと思いこう訊いた。

「水谷さんのバッチって、売上履歴データテーブル(URIAGE_RIREKI)を参照するか?」

 もしかしたら、売上履歴データテーブル(URIAGE_RIREKI)を見ていないかもしれない。
 そこに希望を託したが、

「見てるよ」

 その回答とともに、希望は完全に断たれた。
 もしも、ご丁寧に渚沙のバッチが動作ログを出力するように作ってあれば、当然その出力結果にはこういうエラーメッセージが出力されているのだろう。

「ORA-00942: 表またはビューが存在しません。」 

 もちろん、売上履歴データテーブル(URIAGE_RIREKI)が無いから出力されるエラーだ。

 幸一郎は足元がふらつきそうになるのを、懸命にこらえた。
 スマホの待ち受け画面に設定した大山先生の雄姿が、今の自分をじっと見ているような気がした。
 やはり、こそこそと間違いを隠蔽した自分への罰が、今降り掛かって来ていると思った。

「水谷に教えてやらないとな」

 小山が思い出したかのようにそう言った。

「あいつ、どこ行ったんだ? 知ってるか?」
「い......いや、知らない」

 幸一郎は、渚沙が小山に振られたショックで女子トイレで泣いているのを知っていたが、ことを表立てるのを避けたいがために、その場凌ぎの嘘をついた。
 プロジェクトのサブリーダーでありバッチの共同設計者でもある小山は、渚沙へバッチがこけた原因の調査を依頼するつもりなのだろう。

「そうだ、電話してみよう」

 小山はポケットから、スマホを取り出した。
 すると、女子トイレから当の渚沙が出て来た。
 仕事に向かう時の厳しい表情になっているが、泣いたせいだろうか、目の周りが赤く腫れている。

「あ、おはようございます」
「どいて!」

 挨拶する幸一郎を鬱陶しそうに手の平で脇に追いやると、エレベータも使わず階段を駆け上がって行った。
 その後姿を見て小山はこう言った。

「吉田課長がきっと電話で呼び出したんだ」


---------------------------------------------------------------------

「君は何をやってたんだ!」
「すいません......」

 フロア中の全員に聞こえるような大きい声で、吉田課長は渚沙を叱責した。
 普段は余り怒鳴ることのない吉田課長を、皆が驚いた様子で見ている。
 渚沙の後を追うように開発室のフロアに辿り着いた幸一郎と小山は、吉田課長の怒鳴り声に一瞬ビクついた。
 やはり自社の社員には教育と言う意味もあるのだろうか。
 外注との時とは違って、一段と厳しく接している。
 吉田課長の怒った顔が二人から見え、それに相対する形で渚沙の後姿が見える。
 彼女の肩が震えている。
 先程、付き合っていると思っていた男に振られ、今、上司から叱責されるという大変な目を連続で受けている。
 それを見た幸一郎は気の毒だと思ったが、自分にはどうすることも出来ないと思った。

「すぐに業務影響がどれくらいあるか調べるんだ。その後、対策案を作って提出してくれ。あ、忘れずにお客に出す報告書も書くんだぞ!」
「はい......」

 そのやり取りを見ていた小山が二人の間に割って入ってこう言った。

「ちょっと、水谷一人で一度にそんなに出来ないですよ。彼女にはバッチが失敗した原因を調べさせますから、課長はお客さんに出す第一報を作成してください」
「何?」
「こんなに事故が続く理由考えたことありますか?」

 小山は声を落として、改めて吉田課長に問い掛けた。

「ソースコードのレビューをして、ちゃんとリリースもしている。なのに初日からバッチがこけるなんて、課長のレビューのやり方が悪いんですよ。レビューが形骸化していて、ざっと目を通しただけで終わり。突込みを入れたとしても、フォントが違うとか、文字の大きさが違うとか、そんなレベル。コストの問題もあるし時間短縮も大事ですよ。だけど、そんなレビューで何かあったら各自で責任を取らせるって、そりゃないでしょ」

 吉田課長は眉をひそめた。
 自分のやり方を否定されたのが癪に障ったらしい。
 幸一郎は思った。
 バッチがコケたのはソースコードレビューの抜けが原因では無く、自分の行いに非があるのだと。
 自分のせいで小山と吉田課長の仲が更に悪くなっていく。
 毅然とした態度で抗議する小山を、横で渚沙がじっと見ている。
 頬が朱に染まり、目がウルウルしているのは気のせいか。

「データベースのことなら石川さん、業務のことなら田淵さん、JAVAなら大竹......いや、室井さんかな。それぞれの分野の有識者を入れてレビューをしないと意味無いですよ。それでも足りないなら、外部から有識者を呼ぶようにって言ったじゃないですか! それをコストが掛かるからって担当者だけでレビューするから......」

 幸一郎はいたたまれない気持ちに胸が張り裂けそうになった。
 この状態を生んだのは、幸一郎が原因なのは言うまでもない。

「水谷だって他の機能の開発を抱えてて忙しいの分かってたでしょ。本人に確認もせずに勝手に余裕の無いスケジュール引いて。ちゃんと工数を考えればテストもしっかりやる時間があって、今回のことも防げたかも......」

 何だか、ここぞとばかりに小山は吉田課長を攻撃しているようにも見える。
 二人の間には過去に何かあったのかと思わずにはいられない。

(もういい、小山よ、やめてくれ。今回は僕のせいだ。僕を叱ってくれ!
......って言うか、お前、どんだけ吉田課長を嫌いなんだよ......)

 そうは思っても、幸一郎は二人の間に割って入る勇気は無かった。
 他の開発メンバーは手を止めて二人のやり取りをじっと見ている。
 渚沙の頬はますます朱に染まり、憧れのまなざしで小山に見とれている。

「これからは各個人に責任を押し付けず、まずは事故を防げるような体制とやり方を考えてください。僕も協力します」

 そう言って小山は、吉田課長に背を向けると、渚沙に声を掛け開発室を出て行った。
 渚沙はパタパタと小山の後に付いて行った。
 吉田課長はそんな小山を憎々しげに睨んでいた。
 開発室を出た二人は恐らく、五階のサーバ室に行って調査を始めるのだろう。
 幸一郎は自分の身の振り方を考えた。
 調査が進めば自分の行ったことがバレる。
 
(何とかしなきゃ......)

 大山先生ならこんな時、「素直に全てを告白して謝罪しろ」と言うだろう。
 幸一郎にはそれが出来なかった。
 渚沙に嫌われたくない、叱責されたくない、仕事を失いたくない、自社に迷惑を掛けたくない。
 社会に出て色んなものを体に貼り付けて来た幸一郎は、今や自己保身の塊だった。


---------------------------------------------------------------------

 1時間後、調査を終えた小山と渚沙が開発室に戻って来た。
 小山はフロアの隅にある端末に、調査結果が入っているのであろうUSBメモリを突き刺し、Excelを起動した。
 渚沙に椅子を差し出した。そして、二人して共同で調査結果をまとめているようだ。
 30分後、今回の障害に関するお客向けの報告書が吉田課長宛て、そしてCCに全メンバー宛てで送付されて来た。
 その報告書を見た幸一郎は背筋が凍った。

「23時20分に動作した顧客売上分析バッチが停止した原因について」

 報告書のタイトルはそう記されていた。
 23時20分、恐らくその時間帯は幸一郎が売上履歴データテーブル(URIAGE_RIREKI)を削除し、再作成する前の時間である可能性が高い。

「くっ......」

 思わず幸一郎は呻いてしまった。
 そして次の一文を読んだ時、凍った背筋にひびが入りそうになった。

「売上分析バッチは[ORA-00942: 表またはビューが存在しません。]というエラーを出力して停止した」

 やはり渚沙のバッチは、売上履歴データテーブル(URIAGE_RIREKI)が存在していない時間に動いていた。
 そのテーブルが無いが故に、売上分析バッチはORA-エラーを出力し落ちたのだ。
 そして、その原因を作ったのは他でも無い、幸一郎が自分の保身のために売上履歴データテーブル(URIAGE_RIREKI)を再作成したからだった。

 幸一郎の視界が一瞬歪んだ。

 彼は眩暈がしてディスプレイの前で突っ伏しそうになった。

「現在、売上履歴データテーブル(URIAGE_RIREKI)は存在しているので、[ORA-00942: 表またはビューが存在しません。]が発生した原因は調査中」

(そりゃそうだ......)

 幸一郎はそう思った。
 売上履歴データテーブル(URIAGE_RIREKI)を削除した後、急いで再作成したのだから。

「業務サービスによる影響について、調査したところ、売上分析業務や顧客への販売促進メール送付処理などが停止中」

 顧客の顧客にまで影響が及んでいると推測され、かなりの影響だと思った。
 そして、自分がしたことがバレた時、渚沙に軽蔑されるのは必然だろう。

「どうすればいいんだ......」

 幸一郎は途方に暮れた。

つづく

Comment(0)

コメント

コメントを投稿する