第22話:泥沼
12月に入り、街が輝かしいクリスマスムードに包まれ始めた頃。
俺たち「会計営業システム刷新プロジェクト」は、地獄の釜の蓋をこじ開けようとしていた。
通称、「データ移行リハーサル」。
それは、創業以来30年にわたって蓄積された旧システム(平成の遺産)から、クラウド上に構築した新システム(令和の最新構成)へ、約2億件もの顧客データを移し替える大実験だ。
これが成功しなければ、2月14日のカットオーバー(本番稼働)はあり得ない。
プロジェクトの命運を握る、最大の山場だった。
「――時刻9時00分。移行バッチ、実行します」
休日返上で大会議室に設けられた「移行対策本部」。
佐藤優の凛とした、しかし少し硬質な声が響いた。
彼女がエンターキーを強く叩くと、壁一面の巨大プロジェクターに映し出された進捗バーが、ゆっくりと動き出す。
『Processing... 0.1%... 0.5%...』
室内には、親会社の役員たちや、ベンダーのSEたち、総勢50名ほどが詰めかけている。
長机が幾重にも並べられ、床には無数のLANケーブルと電源コードが這い回り、さながらスパゲッティの海だ。
空気は澱んでいる。徹夜組のSEが放つエナジードリンクの甘ったるい匂いと、冷めたコンビニ弁当の匂い、そして焦燥感を含んだ熱気。
まるでNASAの管制室と、野戦病院の悪いところを足して二で割ったような光景だった。
空調の音だけが、やけに大きく聞こえる。
誰も言葉を発しない。ただ、プロジェクターの数字だけを見つめている。
だが、俺は知っていた。
このリハーサルが、すんなり終わるはずがないことを。
2億件という膨大なデータ量。
そして何より、移行元の旧システムが、継ぎ接ぎだらけでカビの生えたようなレガシーシステムであるという、絶望的な事実。
開始から2時間後。
進捗が『48%』に達したところで、恐れていた事態は起きた。
『ERROR: Unhandled Exception』
『System Halted』
赤い警告灯が回転し、耳をつんざくような警告音が鳴り響く。
会議室が、一瞬にして蜂の巣をつついたような騒ぎになる。
「なっ……!?」
優が目を見開いて立ち上がった。
彼女はすぐさまキーボードを叩き、ログを解析する。
その指先は、いつになく速い。だが、その背中から、余裕が急速に失われていくのが分かった。
「……ありえない。保全系データのドライランではうまくいっていたのに、なんで……」
「どうした、佐藤!」
俺が駆け寄ると、彼女は青ざめた顔でモニターを指差した。
その額には、大粒の脂汗が滲んでいる。
「論理矛盾よ。私のクレンジングプログラムは完璧なはず。数値型には数値以外入らないように正規表現でフィルタリングしているし、桁あふれも完璧に制御している。なのに……『数値型フィールドに不正な文字があります』って止まったの」
「不正な文字?」
「ええ。これを見て」
彼女が表示したのは、バイナリエディタで開かれた16進数のダンプリストだった。
そこには、目には見えない「制御コード」や、文字コード表にも載っていない「謎の記号」が、虫食いのように埋め込まれていた。
「旧システムが古すぎて、入力画面の検証がザルだったのね。……ユーザーが備考欄に『外字』を使ったり、Excelから制御コードごとコピペで貼り付けたりしているわ。ひどいのは、数量欄に『3つ』とか全角文字が入ってる」
「うわぁ……泥臭いな」
「これほどまでに『正しくないデータ』ばかりだなんて……! こんなの、データじゃないわ。ただのゴミよ!」
優の手が震え、止まった。
彼女の「完璧主義」が、逆に足枷になっていた。
未知のエラーが出るたびに、彼女はプログラムを修正し、再実行しようとする。
だが、2億件のデータには、過去30年分の、どんなゴミが混ざっているか分からない。
一つ直しても、また次で止まる。終わりのないモグラ叩きだ。
『おい、どうなってるんだ! 予定より30分遅れてるぞ!』
『再開見込みはいつだ! テスト用サーバのレンタル時間は決まってるんだぞ!』
後ろで、腕を組んで座っていた偉い人たちが騒ぎ始めた。
怒号が飛び交う。現場のリーダーが頭を下げているが、解決策なんて誰も持っていない。
優の肩が小さく跳ねる。
彼女は天才だ。正解がある問題なら、誰よりも速く解ける。
だが、この世には「正解のない泥沼」があることを、彼女はまだ知らない。
綺麗で論理的な世界で生きてきた彼女にとって、この「理不尽で汚れた現実」は、処理不能なバグなのだ。
「……無理よ。全レコードを目視確認しないと、パターンが特定できない。でも、そんなことしたら一週間かかる……」
優がガクリと膝をつきそうになる。
「――佐藤、ログ貸せ」
俺は彼女の横からキーボードに手を伸ばした。
「え……?」
「ちょっと待って。今、例外処理の修正コードを書いているから……これをコンパイルして、テストして……」
「やめろ。間に合わねえよ」
「でも、直さないと進まないわ!」
「直すな。『捨てる』んだよ」
俺は設定ファイル(config)を直接開き、迷わず書き換えた。
エラー発生時の動作設定。
『On Error: Stop』から『On Error: Skip & Log』へ。
「は? 何してるの!? エラーが出たらデータが欠損するじゃない!」
「いいか佐藤。目的を見失うな。俺たちのゴールは『完璧に美しい移行プログラムを作ること』か? 違うだろ。『時間内にシステムを動かすこと』だ」
俺は偉い人たちの方をチラリと見て、彼女の耳元で囁いた。
「2億件のうち、ゴミデータなんてせいぜい数千件だ。0.01%以下だよ。そんなもんのために、残りの99.99%を人質に取るな」
「しかし、データの整合性が……会計システムよ!? 1円でも合わなかったら……」
「弾いたデータは全部ログに吐き出させる。で、そのリストを後で運用チームに渡すんだ。『これ、移行できなかったんで、新画面から手入力で直してください』ってな」
「手入力……!? 数千件を!? そんな非効率な……エンジニアとしての敗北よ!」
「システムで直すのに3日かかるなら、人間が50人で1時間残業して直した方が、プロジェクト全体としては『全体最適』なんだよ! 泥を被るのは機械じゃなくて人間でいいんだ!」
優がハッとした顔をした。
全体最適。
彼女が常に追い求めてきた言葉。だが、それを「人力解決」という最も泥臭い手段で実現するなんて、彼女の論理回路にはなかったはずだ。
「……貴方は、泥沼を走る術を知っているのね」
「適当に生きてきたからな。……行くぞ、再実行だ!」
俺がエンターキーを叩いた。
進捗バーが再び動き出す。
時折、エラーログが高速で赤い文字を吐き出すが、システムは止まらない。
ゴミを振り落とし、本質的なデータだけを吸い上げて、プログレスバーは右へ右へと、力強く伸びていく。
まるで、泥道を走破するオフロードカーのように。
優の作った「高速エンジン」が唸りを上げ、俺が切る「適当なハンドル」が障害物を避けていく。
『Processing... 98%... 99%...』
『Completion: 100%』
画面に完了の文字が出た瞬間、会議室から拍手と歓声が沸き起こった。
あの怒鳴っていた役員たちも、「よくやった!」と手を叩いている。
もちろん、ログファイルには2530件の「移行失敗リスト」が残っている。
だが、そんなことは些細な問題だ。
プロジェクトは首の皮一枚で繋がったのだから。
◇
その夜、23時。
俺たちはオフィスの近くのコンビニで買ったカップラーメンをすすっていた。
深夜のオフィスビル。対策本部の熱気が嘘のように静まり返っている。フロアの暖房は切られ、しんとした冷気が足元から這い上がってくる。
俺の手元にはシーフードヌードル。優の手元には、カロリー控えめの春雨スープ。
街のクリスマスムードと比べると、随分と侘しいディナーだ。
「……0.0013%」
「ん?」
「今日のエラー率よ。……悔しいけど、貴方の判断が正しかったわ」
優は春雨をちゅるりとすすりながら、不服そうに言った。
その横顔には、疲労の色が濃い。メイクも少し落ちかけ、完璧な「佐藤チーフ」の仮面が剥がれ落ちている。
だが、瞳の奥の光は失われていなかった。泥の中から這い上がってきた者だけが持つ、強い光だ。
「私は『完全性』に固執しすぎて、リソースを浪費した。貴方の言う通り、許容範囲を設定して、人的リソースでカバーするのが、この状況における『最適解』だった」
「まあ、結果オーライだろ。……それに、お前のプログラムが速かったおかげで、再実行しても間に合ったんだ。俺一人じゃ、ただのデータ欠損でプロジェクトごと爆発してたさ」
「……ふふ。慰めは不要よ」
彼女はプラスチックのフォークを置き、少しだけ笑った。
その顔には、疲労と、そして確かな信頼の色が見えた。
「やっぱり、私たちはいいユニットね。……最強のエンジンと、最低のハンドルみたいで」
「誰が最低だよ。せめて『最高のサスペンション』と言え」
「衝撃を吸収して誤魔化すだけでしょう?」
「それが大事なんだよ、世の中は」
俺は苦笑し、残ったスープを飲み干した。
温かい液体が、冷え切った内臓に染み渡る。
窓の外では、街路樹のイルミネーションが点灯していた。
青と白の光が、ガラスに反射して優の顔を照らしている。
クリスマスまで、あと少し。
そして、運命のカットオーバーまで、あと2ヶ月。
この泥沼のようなプロジェクトも、そろそろ終わりが見えてきた。
ふと、優が窓の外を見たまま、ポツリと言った。
「……ねえ。カットオーバー、2月14日になりそうね」
「ああ。バレンタインデーだな。世間が浮かれてる中、俺たちはサーバールームに缶詰めってわけだ」
「……チョコレート、いる?」
唐突な問いに、俺は動きを止めた。
「は?」
「栄養補給としてのカカオ摂取よ。徹夜作業には糖分が必要不可欠だから」
「それなら、別に飴ちゃんでもいいじゃねーか」
「……本命には、チョコレートを渡すのが定石でしょう?」
彼女は顔を背けて早口で言った。
だが、ガラスに映った彼女の顔は、イルミネーションのせいだけではなく、ほんのりと赤らんでいるように見えた。
俺はニヤリと笑った。
「そうか、ありがとな。楽しみにしてるよ」
「……ええ」
優は小さく呟き、残りの春雨をすすった。
その声は震えていて、でもどこか甘い響きを含んでいた。
俺たちはそこで会話を切り、ただ静かに夜景を眺めた。
今年度のプロジェクトが終われば、彼女は本社に戻る。
この「共犯関係」も、あと数ヶ月で終わる。
終わらせたくない、と俺は思った。
この泥臭くて、騒がしくて、でも心地よい隣の席を、失いたくないと。
夜空には、冷たい冬の月が、白く輝いていた。




