このエントリはMagento Advent Calendarの12日目です。

Magentoを使っているサイトの運営者、そして携わる開発者にとって今気になることといえばズバリ、

Magento1.xからMagento2.xへデータが移行できるのか?

ということでしょう。
長く運用すればするほど、資産とも言える顧客データや、注文履歴データ、そして商品データがデータベースには蓄積されています。
これらを失うことなく、新しいプラットフォームに移行したいと思うのはとても自然なことだと思います。

その願いに応えるべく、MagentoがMagento2.xの開発初期から公言していたことがあります。
それは「データ移行ツールの開発」です。
すでにGithubのリポジトリにはデータ移行ツールが公開されていて、誰でも試すことができます。

Magento Data Migration Tool CE

では早速試してみましょう。

事前準備

移行作業を試す前に、準備作業が必要です。
以下の2つの環境を用意しておきましょう。どちらもエクステンションを一切入れないようにします。
(ロケールは入れても構いません)

  • まっさらなMagento1.9.2.2の環境を用意する
  • まっさらなMagento2の環境を用意する

そして、Magento1.9.2.2のほうには適当に商品やカテゴリを登録しておきます。
(顧客や注文データを作っても構いません)

移行作業の流れ

準備ができたら、以下の手順で移行を行います。

  1. Magento2にData Migration Toolをインストールする
  2. 設定ファイルを用意する
  3. 移行ツールを実行する

Magento2にData Migration Toolをインストールする

まだMagento2に対応したMagento側のオフィシャルマーケットプレイスがオープンしていないので、Data Migration Toolのインストールは、composerを使って行います。
以下のようにサーバー上でコマンドを実行すると、Data Migration Toolをインストールすることができます。

composer config repositories.data-migration-tool git https://github.com/magento/data-migration-tool-ce
composer require magento/data-migration-tool:dev-master
composer install

環境によってはPHPのコマンド実行に対するメモリ割り当て量が不足することがあります。その場合は適当にメモリ割り当て量を増やして上げてください。

設定ファイルを用意する

Data Migration Toolがインストールできたら、設定ファイルを用意します。
設定ファイルは、

<Magento2インストールディレクトリ>/vendor/magento/data-migration-tool/etc/ce-to-ce/<移行元Magentoバージョン>/

にサンプルファイルが入っています。

  • config.xml.dist
  • map.xml.dist

をリネームし、

  • config.xml
  • map.xml

とします。

さらにconfig.xmlを開いて、以下のように修正します。

    
        
    
    
        
    
    
        etc/ce-to-ce/移行元Magentoバージョン/map.xml
        以下略
    

これで準備は完了です。
念のため、後でやり直せるように、ここでMagento1.xとMagento2のデータベースをバックアップしておきましょう。

移行ツールを実行する

準備ができたら、Magento2のドキュメントルートディレクトリに移動します。
次のコマンドを実行して、移行処理の状況を見守ります。

php bin/magento migrate:data  vendor/magento/data-migration-tool/etc/ce-to-ce/移行元Magentoバージョン/config.xml

エラーが発生すると、移行処理は途中で中断されます。
エラー内容を修正してやり直す必要があります。

結果の検証

上手くデータ移行処理ができたら、Magento2の管理画面にログインして、Magento1.xで作成しておいたデータが移行できているか検証します。
データがMagento2に作成されていれば成功です。

移行作業の注意点

さて、一応Magento2.0対応で開発されているData Migration Toolですが、いくつか現状では問題があります。

日本語を含むマルチバイト文字が文字化ける

たとえMagento1.xとMagento2が正しく利用できる環境であっても、Data Migration Toolを実行すると、Magento2に移行したデータにマルチバイト文字が含まれる場合は正しく移行できません。
全てのマルチバイト文字は「?」になってしまい、壊れてしまいます。
ですから今の段階では、日本語のデータを移行することはできません。

原因は調査中で、分かり次第Githubに修正パッチを提供したいと思います。

1回移行をすると、再度移行ができない

Data Migration Toolは、Magento1.xのデータベースにも改変を加えます。
実際には移行用のテーブルを幾つか作成するのですが、なぜか1回移行処理をしたデータベース同士を再度同期しようとするとエラーになります。

移行処理を何度もやり直す場合は、双方のデータベースを同期処理開始前時点でバックアップしておくと、検証作業がしやすくなると思います。

データベースの列定義は全てマッピングできている必要あり

データ移行を行うためには、移行対象のテーブル(あるいはエンティティ)の列定義が全てマッピングできている必要があります。
このマッピング定義は、map.xmlで定義されます。
Magento1.x側で独自に列定義を追加している場合は、移行作業を行う前に、map.xmlに定義を追加しておいてください。
(追加しないとエラーが起きるので移行処理ができません)

Magento1.xのサンプルデータに注意

Magentoのデータベースの定義を見たことがある方であれば、お気づきかもしれませんが、Magento1.xのサンプルデータ(特に1.9.x移行用のもの)には注意が必要です。
Community Edition用と書かれているのですが、実際のテーブル定義には一部Enterprise Edition用の列が含まれています。

そのため、サンプルデータを含んだ形でサイトの構築作業を行ってしまい、そのまま運用してしまった場合は、移行時に注意しなければなりません。
サンプルデータによってもたらされた余計なテーブルの列が邪魔をしてしまうので、あらかじめMagento2のデータベースに列を追加するか、あるいはmap.xmlで無視するように定義しておく必要があります。

いずれにしても、サンプルデータはあくまでサンプルデータなので、実際のサイト構築時に使用してはいけません。

データ移行ツールの今後

Magento2はまだリリースされて1ヶ月ほどしか経っていません。
Githubには今も活発なIssue登録・コミットが行われています。
Data Migration Toolももっと改善されていくことと思います。Magento1.xのサポート期限まではあと3年ほどありますから、焦って移行する必要はありません。データ移行ツールを含めた移行に関する方法が確立してからでも全く問題ありません。

さて、明日はTakuさんです。よろしくお願いします!