APIの移行:カスタムのDrupalからDrupalへの移行

遅かれ早かれ、すべての開発者は「移行」と呼ばれるこの恐ろしい(実際にはそうではない)プロセスに直面します。あなたがその1人である場合、Drupal 7の最も優れた堅実なモジュールの1つであるMigrateについて聞いたことがあるはずです。実際、これはモジュールではなく、さまざまなソースからDrupalにデータを移行するためのすばらしいAPIとさまざまな強力なツールを提供する移行フレームワークです。私の見解では、このようなモジュールの存在は、DrupalコミュニティとDrupalエコシステムにとって非常に重要です。これは、プロジェクトを別のCMSまたは他のフレームワークからDrupalに移動する簡単な方法を提供するためです。したがって、Drupalを優先してシステムを変更する比較的安価な方法をクライアントに提供できます。この記事では、Drupal8で Migrate API を使用する方法を読み、Drupal7から Drupal 8 への移行を実行するための簡単なモジュールを構築します。

ちょっとした理論

移行プロセスをこの図に示します。

これは移行に対する一般的なアプローチの一種であり、Drupalの特定の側面はありません。ソースデータベースがあり(データベースである必要はありません。CSV、XMLなどでもかまいません)、もちろんDrupal 8 データベースである宛先データベースがあります。これら2つのデータベース(ソースと宛先)の間の図でわかるように、順序付けられた操作のリストがあります。

1つ目はデータの取得です。これは、ソースデータベースからデータを取得できるクエリシステムです。次に、マッピングを行います。ここで、ソースデータベースのどのフィールドを宛先データベースのどのソースに入れるかを設定できます。次のステップは処理です。この操作では、ソースデータベースから取得したデータを変更できます。たとえば、取得したデータの形式をDrupal 8の新しい構造に合わせて変更する必要があります。最後の設定は設定であり、宛先データベース(Drupal 8データベース)の構造にデータを設定する宛先オブジェクトの一部です。構造)。

Drupal8の移行API

Drupal8と移行モジュールでの状況を見てみましょう。 Drupal.orgにMigrateプロジェクトのDrupal8リリースはありません。これは、その機能のほとんどがDrupalコアに移植されたためです。メインの移行モジュール「migrate」とD6およびD7移行用のモジュール「migrate_drupal」です。 Migrateモジュールのすべての機能がコアに移植されたわけではないと言いましたが、Drupal 7バージョンと比較して、この状況に縛られているわけではありません。これらの使い慣れた機能はすべて、contribプロジェクトに存在します。 Drupal7モジュールが持つDrupal8の機能を提供するモジュールのリストは次のとおりです。

Drupal 7では、論理的に移行APIの構造に大きな違いはありません。たとえば、ソースがあり、これらのソースから取得したデータを処理した後、すべてのデータが宛先に送られます。第8バージョンでは、プラグインシステムを介して実装される、ソース、プロセス、宛先の3つの主要部分があります。

デフォルトでは、Drupal 8には3つの移行モジュール(migrate、migrate_drupal、migrate_drupal_ui)が含まれており、6番目または7番目のバージョンから簡単にアップグレードできます。また、クリーン&が必要です。 Drupal 8の空のインストール。コアのアップグレードは、単純なサイトでは非常に適切に機能することを認めなければなりません。しかし、これは私たちの場合ではありません。

Drupal7の「ブログ」のあるコンテンツタイプからDrupal8の別のコンテンツタイプ(これも「ブログ」)へのコンテンツの既存のサイトへの移行を行う必要があると想像してみましょう。最初の移行は単純なものであるため、複雑なアクションは発生しないため、データはそのまま移行されます。

Drupal7からDrupal8への移行用の移行モジュールを開発する方法

最初の移行モジュールの作成を始めましょう。最初に、D7データベースへのデータベース接続を確立する必要があります。これはsettings.phpの例です:

古いサイトへのデータベース接続が確立されたら、必要なcontribモジュールを有効にして開始できます。

drush dlmigrate_plus、migrate_tools

drush enmigrate_plus、migrate_tools

他のDrupal8モジュールと同様に、yml.infoファイルを追加する必要があります。特別なことは何もありません。

次のステップとして、マッピングを定義する必要があります。 D7とは異なり、D8では、マッピングは.yml構成ファイルで定義された構成エンティティです。 D7と比較して、建設クラスの優れた代替品です。 2つの構成ファイルを作成します。移行グループの構成と移行自体です。モジュールのインストールと同時に構成エンティティが作成されるように、すべての構成ファイルを次のディレクトリ「config / install」に配置する必要があります。

移行グループの定義

移行グループの構成ファイルの名前は、「migrate_plus.migration_group.mymig.yml」になります。 D8の移行グループはcontribモジュール「migrate_plus」によって提供されるため、すべての構成名は「migrate_plus」で始まります。 「migrate_plus」はそれがグループ構成であり、「mymig」はそれがIDであることを示しています。コメント付きのファイルの内容は次のとおりです。

この構成がインストールされてデータベースにインポートされると、このページ「admin / structure / migrate」に新しい移行グループが表示されます。

移行とマッピングの定義

前述したように、移行も構成ファイルです。これは、yml「migrate_plus.migration.blog_mymig.yml」ファイルの最初の部分であり、id、移行グループなどの基本設定が定義されています。

次のパートでは、ソースと宛先を設定します。ソース移行用のプラグインは、Drupalコアによって提供されるd7_nodeです。また、D7から移行する必要のあるコンテンツタイプを設定します。この場合は「ブログ」です。宛先プラグインは「entity:node」になります:

ソースや宛先などのすべての基本設定が設定されたら、マッピングを実行できます(プロセスを定義します)。これは、ベースノードプロパティの移行のための単純なマッピングです。お気づきのように、読んで理解するのは非常に簡単です。 (もちろん、「ブログ」コンテンツタイプはD8で作成する必要があります):

これでコーディング部分は終わりです。これで、モジュールをインストールして、ブログ投稿をD8サイトに移行できます。移行のステータスは、admin / structure / mgrate / manage / mymig / migrationsで確認できます。私は通常、移行プロセスを実行するためにDrushコマンドを使用します:

または

トラブルシューティング

移行プロセスの完了後に、次のメッセージが表示される場合があります:0処理済み(0作成済みなど)。このメッセージはあなたを混乱させる可能性がありますが、簡単な説明と解決策があります。これは、移行が1回実行され、それを見逃したために発生するため、次のコマンドを使用して移行をロールバックする必要があります。

結論

これで、Drupal8でMigrationAPIがどのように機能するかがわかりました。Drupal8にMigrateモジュールのリリースがないことはそれほど大きな問題ではないことがわかりました。まず、一部のモジュールの機能はDrupalコアに組み込まれ、他の機能はcontribプロジェクトで利用できます。

また、移行モジュールを構築する方法の例もあります。今後の記事では、さらに詳しく見て、複雑なカスタム移行を構築する方法を学びます。

元々は ADCIソリューションのウェブサイト に投稿されました。

作成者は Denis Usov 、ADCISolutionsのチームリーダー

クライアントのビジネスプロセスに深く関与することで、デニスはプロジェクトのアーキテクチャを構築するスキルを習得できます。その上、彼はボクシング、ベースギターとハーモニカの演奏、本の読書など、いくつかの趣味を持つ非常に多様な性格です。

ソーシャルネットワークでフォローしてください: Twitter | Facebook | LinkedIn