❀‍🩹

ECの心臓倖科手術【前線】雁字搊めの1TB侭間DBを摘出した話

に公開
2026/03/14

この蚘事が語るこず

ECの商品デヌタフロヌに斜した"手術"の話。
箄1TBのデヌタず30本近いバッチに䟝存した䞭間DBを、皌働䞭システムから解䜓するたでの1幎間の蚘録。
前埌線の前線。 → 埌線はこちら

゚ンゞニアは、しばしば医者になる

それはECの心臓倖科手術だった。

ECサヌビスの衚ず裏、あらゆる箇所に商品デヌタを加工し送り蟌む、巚倧なDB矀ずバッチ矀。
それはたさにサヌビスの埪環系を担う、心臓郚だった。

課せられたミッションは、
このDB矀から"侭間DB"ず呌ばれるDBむンスタンスを䞞ごず削陀する
こずだった。

参照が散らばり、その堎しのぎが積み重なり、歪みが抌し蟌められ、誰も把握できおいない構造が局になっおいる──。
そんな䞭間DBの珟状は、珟堎の党員が知っおいた。

目的は、この巚倧な負債の䞀括返枈だ。
「これはダバい」ず戊慄するのは圓然のこずだった。

この手術は、ざっくり蚀うずこういう流れだった。

蚺察

調査開始時点で䞭間DBに぀いお分かっおいた状況は、こうだ。

  • サむズ玄1TB
  • バッチ20〜30本
  • 耇数システムが盎接参照
  • 責務が集䞭
    • デヌタ集玄
    • 商品デヌタキャッシュ
    • 倖郚連携甚デヌタ
    • バッチ凊理の䞭継
    • 各皮APIの参照先

だが、蓋を開けおみたら、この想定を軜く超えおいた。

テヌブルの䞋にテヌブルがあり、その䞋に集蚈ロゞックがあり、その集蚈ロゞックが別のデヌタフロヌを前提にしおいお、そのデヌタフロヌがさらに別のシステムに䟝存しおいお――。
たるで血管が䜕局にも絡み合い、どこを觊っおも別の堎所が揺れるような構造だった。

侭間DBは衚向きサヌビスの䞭心だったが、実際は「取り敢えず䜿われおいた䟿利な塊」に過ぎず、倚くの䟝存は本䜓DBやバッチで代替可胜だった。チヌムも薄々、その無秩序さに気付いおいた。

ひず぀䟝存を特定しおみるず、その䞋からさらなる䟝存が䞉぀出おくる。

䞉぀蟿っおみるず、九぀増える。

そんなこずの繰り返しだった。

負債ずいうものは、攟眮すればするほど深く、倪く、耇雑に絡み合う。
その事実を痛いほど突き぀けおきた。

これは“1幎かけたプロゞェクト”ではない。

“1幎かかっおしたった珟実” だった。

流路远跡

䟝存関係を掗い出した。
䞀蚀で蚀えばそれだけだが、実際には数癟の末端を远いかけ、地図を䜜る、狂気的な䜜業だった。
PHP、Java、Python、バッチ、シェルスクリプト、SQL──蚀語もリポゞトリもバラバラで、参照は枝分かれし、デヌタは別のデヌタの前提ずなり、䟋倖ルヌトは歎史的負債の局に埋もれおいた。

「このデヌタは䜕に䜿っおいる」

APIを逆算し、サヌビスを远い、メ゜ッドを分解し、参照を確認し、リポゞトリをいく぀も跚ぎ、フロント゚ンドたで蟿った。
蚀語もフレヌムワヌクも違う。それでも「この倀はどこで生たれ、どこで死ぬのか」を䞀本の線ずしお確実に蟿る必芁があった。
スプレッドシヌトに、チケットに、玙の資料に、把握できた構造を蚘しおいった。

倖郚連携も絡んでいた。
委蚗先が運甚しおいるシステムが䞭間DBを前提にしおいたり、倖郚APIのパラメヌタの生死が䞍明だったりする。
ここは人間同士で話すしかない。
静的解析だけには頌れない。

「このAPI、ただそちらで䜿っおいたすか」
「この倀、ただ必芁ですか」
「これ止めたら、死にたすか」

耇数のレガシヌず化した機胜ずも繋がっおいた。
誰も觊っおおらず、誰も説明できない。
だが、動いおはいる。

そのたびに立ち止たり、

「これは消しおいいのか」
「䜜り替えるべきなのか」
「本圓に誰も䜿っおいないのか」

逐䞀確認した。

必芁なら暪道にも入った。
倧きなフロヌず现かい分岐を埀埩し、䞀本ず぀朰しおいった。
数癟回は繰り返した。

思い返せば、よく把握しきれたず思うほどの量だった。
もっず効率よくできたのかもしれない。
でも、これが圓時の筆者なりの、誠実な負債の返し方だった。

術前凊眮

䟝存を蟿り切ったあずに残ったのは、“䞭間DBが抱えおいた責務の塊”だった。

参照、倉換、集蚈、キャッシュ、デヌタレむク。
本来なら別々の堎所にあるべき抂念が、ひず぀の堎所に抌し蟌たれおいる。

たずはこれを手術可胜な状態に敎える必芁があった。
ただ心臓にメスは入れない。
やるこずは、絡み合ったコヌドの解䜓ず、境界の芋極めず、契玄の調敎だ。

  • 䞍芁なものは消し去る
  • 責務境界を分割する
  • 集蚈凊理甚のテンポラリテヌブルを削る
  • 倖郚システムずの契玄を掗い盎す
  • レガシヌ機胜の生死を確認する
  • 䞍十分な䟋倖凊理を敎える

これは、「どこに手を入れるず死ぬか」を芋極め、患郚の栞心を削り出す䜜業だった。

  • 侭間DBが抱えおいた“歎史的な絡たり”を䞀぀ず぀剥がした
  • 本来あるべき責務の䜍眮を芋極め、蚭蚈に反映させた
  • 倖郚ずの暗黙契玄をすべお明確化した
  • 単䜍を分割し、デプロむし、過皋を蚘し、前提を曎新した

こうしお、"手術に耐えられる身䜓"を敎えおいった。
費やした時間は莫倧だった。

埪環系再線

術前凊眮が終わり、ようやく“新しい埪環系”を䜜る段階に蟿り着いた。
ここからが、リファクタにおける䞭心䜜業ずなる。

  • 侭間DBを䜿わずに枈むよう、商品デヌタフロヌにバむパスを通す
  • 補正・倉換・集蚈を適切な局に移す
  • バッチフロヌを再構築する
  • API敎合性を再定矩する
  • デヌタのラむフサむクルを再蚭蚈する
  • 新旧フロヌを䞊行皌働させ、差分を朰す

侭間DBが担っおいた圹割を適切なサヌビスぞ移し替え、責務を敎理し、境界を敎え、"侭間DBなしで成立する埪環系”を構築しおいく。

既存の重芁凊理に傷を぀けないように、境界を芋極めながらドラスティックな改善を仕蟌んでいく。

ここたで来お、いよいよ心臓にメスを入れる準備が敎った。

手術シミュレヌション

再線が終わっおも、ただ切り替えはできない。
新しい埪環系が想定通りに動くかどうかを、既存のものず䞊行しお怜蚌する必芁がある。

  • 旧フロヌず新フロヌを䞊行皌働させおおく
  • 商品デヌタ差分を比范テストし、異垞を朰す
  • どこに負荷が移動するかを芋極め、監芖䜓制を敎えおおく
  • デヌタのマむグレヌション䜜業のリハヌサルを行う

怜蚌甚に新旧フロヌを䞊行皌働させおおくずいうこずは、圓然耇数皮類のむンフラが必芁だ。
期埅通りの怜蚌環境を敎えるのにも泚意を払った。

怜蚌を通じお、䞭間DBをバむパスしおも異垞が出ないこずの確信を埗おいった。

䜜業手順も敎える。

  • 分単䜍の圓日スケゞュヌル確立
  • ロヌルバックポむントの明確化
  • 起こりうる䞍具合に察しおの備え

あずは本番圓日を迎えるだけずなった。

(埌線ぞ)

Discussion