データベースの移行は一苦労!リリース時の失敗談【プロジェクトの失敗談】

2021年12月3日

みなさんこんにちは。Webアプリケーションのディレクターをしております「やき」と申します。
今回はデータベース移行の私の失敗談をもとに、移行作業の注意点を見ていきましょう。

甘く見てはいけないデータベースの移行

ECサイトの商品情報や顧客管理ツールの顧客情報など、多くのITシステムは情報をデータベースに蓄積しています。
あまりITシステムに詳しくないと、データベースのイメージがつきにくいかもしれませんが、Microsoft社のExcelをイメージすればよいでしょう。
Excelではセルと呼ばれる格子の中にテキストや数値を入れて情報を管理することができますが、データベースも、同じような形で商品情報や顧客情報を管理しています。
ITシステムはこのデータベースからデータを取得し、画面に表示しています。

ITシステムをリニューアルする際は、このデータベースを新しいシステムに移行することが最大の山場になることがよくあります。
ではデータベースの移行では、どのようなことを気を付けていけばよいのでしょうか。

プロジェクトの概要

このプロジェクトはとある人材会社の会員情報システムのリニューアル案件でした。
人材会社に登録した人の情報を蓄積し、会員ページから編集できるようにするシステムです。
このシステムのリニューアル自体は、色々とありながらも何とかクライアントからリリースの許可を得られるまで進みました。

発生した問題

しかし、問題はリリース直前に起こりました。旧システムのデータベースをクライアントから受け取り、リリース直前に移行しようとしたところ上手くいかなかったのです。
データを新システムのデータベースに入れるだけでも時間がかかるのに、名前欄に生年月日が表示されたり、名前欄に何も表示されない会員がいたりと、「これではリリースできない」とプロジェクト・チームは大騒ぎになりました。
結局システムのリリースは遅れ、プログラマーが徹夜しながら対応し、クライアントに激怒されながら約1週間後にリリースに至りました。

得られた教訓

右も左も分からない新人時代のプロジェクトだったとはいえ、今思い返してももっと事前に考えられなかったのかと恥ずかしく思うトラブルです。
このプロジェクトから得られた教訓は以下の通りです。

  • 設計の時からデータベースの構造を気にしなければならない
  • データベースの移行には十分な時間が必要である
  • 事前にリリースの手順をクライアントとともに考える

ここからはこれらの教訓をもう少し詳しくお話ししていきます。

設計の時からデータベースの構造を気にしなければならない

このプロジェクトの最大の問題は、ディレクターである私がデータベースのことを全く考慮せず、システムの設計を行ったことです。
先ほどもお話ししたように、システムはExcelのような場所で保存されているデータをとりだし、画面に表示します。
たとえば、新システムでは「データベースのB列に書かれている名前の情報をとりだす」という仕組みだったのに、B列に生年月日が書かれているデータを入れたらどうなるでしょうか?
システムというのは良くも悪くも命令に忠実であるため、名前欄に生年月日を表示してしまいます。
そのため、できるだけデータベースの構造はリニューアルの前後で変わらないことがのぞましく、手を加えるにしても、新しく列を増やすというような対応がよいでしょう。
少なくとも、新旧のデータベースの違いをしっかりと把握しておくことが大切です。

データベースの移行には十分な時間が必要である

データベースの移行は往々にして時間がかかるということも忘れてはいけません。これもExcelをイメージすると分かりやすいのですが、たとえば数千行のExcelのデータをコピーし、他のExcelのファイルに貼り付けたらどうなるでしょうか?
時間がかかるだけでなく、性能のよくないパソコンであれば、処理が途中でストップしてしまうこともあるでしょう。
これは開発したITシステムも同様で、旧システムのデータを一気に新システムのデータベースに取り込もうとすると、時間がかかるだけでなく、処理が止まる可能性があります。
そのため、「百行ずつデータを取り込む」「1列ずつデータを入れていく」というように、できるだけ移行の処理の負荷を下げて対応することが望まれます。
以上のように、全くデータベースの構造が同じという場合であっても、作業に時間がかかるということは多いため、リリース直前にバタバタとデータベースの移行を行うのは止めましょう。

事前にリリースの手順をクライアントとともに考える

データベース移行のトラブルがリリース直前に発生しやすいのは、リリース直前に最新のデータベースが渡されることが多いからです。旧システムが新システムのリリース直前まで稼働していると、新システムに切り替わるまで、旧システムのデータは増えていきます。
今回のプロジェクトのような会員情報システムであれば、新システムのリリース日の前日まで会員情報が蓄積されます。
愚直に最新情報を移行しようとすると、上述のようにリリース直前にバタバタしてしまうことになります。そのため、たとえば「リリース日の3日前に一度データベースを新システム用に加工し、2日間で増えたデータは会員情報システムから直接入力する」「土日は旧システムを停止させ、その間に新システムに移行する」など、円滑にリリース作業を進めるために、データベースの移行をどのように進めるかという移行計画を、クライアントを交えて話しておくことが大切です。