自らを単純なコピー操作——古い行を読み込み、新しい行を書き込む——として扱うレガシーデータ移行は、実際には完了していないのに完了したように見えてしまいます。長年稼働してきたレガシーのPerfex CRM環境からのOmnitech CRMの移行は、これとは異なる前提のもとに設計されました。すなわち、レガシーデータの移行とは照合(リコンサイル)の問題であり、移行の役割は何を移したかだけでなく、何を解決できなかったかを明確に示すことにある、という前提です。
01実績の読み方
移行スクリプトが行を単純にコピーするだけでは済まない理由
レガシーシステムの識別子、関連関係、アクセスルールは、異なる前提のもとに構築された新しいスキーマにきれいに対応することはほとんどありません。行をそのままコピーすると、新しいスキーマが旧システムの不整合を引き継ぐか、当てはまらないレコードが黙って欠落するかのいずれかになります。CRM移行における黙った欠落は、顧客レコードの消失や、担当者不在のサポートチケットを意味しかねません。照合とは、移行処理がレガシーの識別子を新しいスキーマに対して能動的に突き合わせ、その一致を自動的に行っても安全かどうかをレコードごとに判断することを意味します。
02実績の読み方
意図的にトランザクション的かつ冪等(べきとう)に
Omnitech CRMの移行処理はトランザクション的かつ冪等です。途中で失敗しても移行先データベースが中途半端な状態のまま残ることはなく、同じ移行ステップをすでに移行済みのレコードを重複させることなく安全に再実行できます。これは、信頼性の高いAPI設計全般で用いられているのと同じ冪等性の規律を反映したものです——Laravelのデータベーストランザクション処理が、複数ステップからなる移行ステップをアトミックにするための具体的な仕組みとして用いられています(下記に引用)。
03実績の読み方
人間の判断が必要な事項を報告する
この移行処理は、確信を持って照合できないレコードを推測で処理して先に進むのではなく、明示的に報告します。この報告こそが、照合を最優先する移行の本当の成果物です——不明な数の見えないデータ問題を、既知でレビュー可能なリストに変えるのです。移行元のPerfex CRM環境にあった8つのレガシーロールすべてを保持したことも、同じ原則に従っています。ロール定義は破棄して作り直すのではなく、新しい権限システムに対して照合され、その結果、既存スタッフのアクセスルールは黙ってリセットされることなく引き継がれました。
04実績の読み方
この教訓が一般化できること
レガシー移行が完了したと言えるのは、行数が一致したときではなく、何を移行し、何を自動的には解決できず、何について人間の判断が必要かを正確に示せたときです。この基準は、レガシーシステムがCRMであれ、ECプラットフォームであれ、十年分のスプレッドシートであれ変わりません。静かなデータ損失を実際に防ぐのは、より大がかりなインポートスクリプトではなく、照合結果の報告なのです。