EC-CUBE2.4、2.11、2.13からEC-CUBE3.0.1xへのデータ移行ツール公開

EC-CUBE Advent Calendar 2017 15日目の記事です。

15日目はEC-CUBE2系からEC-CUBE3.0.1x系へ移行するためのツールを公開します。このツールはエンジニアの方を対象にしています。

元々は、1つのツールで2.4、2.11、2.13の対応をしようと思っていましたが、意外とめんどくさいことが判明しましたのでそれぞれのバージョンにあったものをお使いください。

プログラムの説明

既存DBから情報を読み取り、3系のデータ構造に合わせてinsert文を作成するというものです。
移行対象テーブルは商品、受注、会員に関連するもののみとなりますのでそれ以外のテーブルは別途作成してみてください。 読み出し元DBはMySQLPostgreSQL両方対応していますが、作成されるinsert文はMySQL専用となっていますので、PostgreSQLが必要な方はカスタマイズしてお使いください。 PHP5.3から動きます。

また、移行先がレンタルサーバ等の場合、一度に大量のデータを流すとエラーになるレンタルサーバもあります。そのため、受注データ関連のみのinsert文のみですがファイルを分割して作成するようにしています。商品データ等も同じように修正すれば対応可能です。

忘れてはいけないこと

2系から3系に移行した後、必ずAUTH_MAGICは2系で使用されていたものをお使いください。これがないと会員、管理者ともにログインできなくなります。

  • AUTH_MAGICのそれぞれの場所

これらを3系の

app/config/eccube/config.yml

にあるauth_magicに設定してください。

以下、利用する前に以下の注意点を必ずお読みください。

※注意点

  • カスタマイズされているデータベースには対応していません。ソースを見ればわかるように簡単なコードですので、適宜カスタマイズしてお使いください。
  • こちらは必ず動作保証されているものではありません。また、データ構成によっては全て移行されない時がありますので、必ず検証をお願いします。
  • こちらの移行ツールを使ったあとは必ずテストをしてください。
  • マスタ系(mtb_xxx)は移行していませんが、必要であれば同じように作成すれば対応可能です。
  • 3系から新たに用意されたカラムに対しての考慮まではしていません。
  • プラグインとして提供されるようになったテーブルは対象外としています。
    →2.11からの移行としてdtb_makerの移行だけサンプルとして用意しています。

なお、使用するEC-CUBE3ですが、本日時点のソースをcloneしたものを使います。 https://github.com/EC-CUBE/ec-cube

EC-CUBE2.4系からの移行

EC-CUBE2.4は3系とデータ構造は似ていますが、足りていない項目などがありますがそこは無視しています。
商品タグについては作成されたsql文に対して一部手動で変更する必要があります。

github.com

EC-CUBE2.11系からの移行

EC-CUBE2.11は商品規格のデータ構造が異なります。3系に変換時はそれぞれのテーブルを結合して対応していますが、もしかしたら漏れがあるかもしれません。
それ以外は2.4からの移行とほぼ同じです。商品タグについては作成されたsql文に対して一部手動で変更する必要があります。

github.com

EC-CUBE2.13系からの移行

3系はEC-CUBE2.13のデータ構造をベースとして作成されていますので、ほぼ同じです。ただし、複数配送時などの配送データが一部手直しする必要があります。
メルマガプラグインを利用している方も多いと思いますので、メルマガプラグインへの移行データも一応入っています。不要な方はその箇所を削除してください。

github.com

実行方法

それぞれのリポジトリconfig.phpが入っていますので、環境に合わせてお使いください。
実行方法は、

./migration.sh

とターミナルから実行すれば使えます。

insert.shファイルは、データをインポートするときにファイル数が多ければお使いください。seq 10の箇所を作成されたファイル数と合わせるだけです。

以上がツールの注意点となります。基本的には他のテーブルも同じように作成すれば問題ありません。
データによっては潜在的なバグが含まれている可能性がありますので、十分気をつけてください。
本当はPostgreSQL版も用意したかったのですが、私がMySQLを利用することが多いため作成する時間がありませんでした。
不具合があったり、PostgreSQL版を用意したという方がいればpull requestを随時お待ちしております。