Migrate Plus
設定エンティティ、追加プラグイン、サンプルを通じて、Drupal コアのマイグレーションフレームワーク機能を拡張します。
migrate_plus
インストール
composer require 'drupal/migrate_plus:^6.0'
概要
Migrate Plus は、Drupal コアの Migrate フレームワークを包括的に拡張するモジュールです。マイグレーション設定を設定エンティティとして保存する機能を提供し、Drupal の設定管理システムを通じて柔軟に読み込み、変更、エクスポートできるようにします。
このモジュールは、関連するマイグレーションを整理し共通設定を共有するためのマイグレーショングループを導入します。3つの新しいプラグインタイプを提供します:HTTP リクエストを保護するための認証プラグイン、様々なソースからコンテンツを取得するためのデータフェッチャープラグイン、JSON、XML、SOAP データ形式を処理するためのデータパーサープラグインです。
さらに、Migrate Plus はマイグレーション中のデータ変換用に20以上のプロセスプラグイン、URL ベースおよび SQL テーブルデータソース用のソースプラグイン、データベーステーブルに直接書き込むためのデスティネーションプラグインを含みます。また、処理前にソースデータをオブジェクト指向で操作するためのイベントシステムも提供します。
Features
- マイグレーション用の設定エンティティストレージにより、Drupal の設定システムを通じてエクスポート/インポート可能な YAML ベースのマイグレーション定義が可能
- マイグレーションを整理し、複数のマイグレーション間で共通設定を共有するためのマイグレーショングループ
- プラガブルなフェッチャーとパーサーによるファイルおよび HTTP ベースのデータ取得をサポートする URL ソースプラグイン
- リモートソースから様々なデータ形式を解析するための JSON、XML、SOAP データパーサープラグイン
- Basic、Digest、NTLM、OAuth2 認証方式を含む HTTP 認証プラグイン
- マイグレーション中にエンティティのマッチングと作成を行う entity_lookup および entity_generate プロセスプラグイン
- 文字列置換、DOM 操作、配列操作、条件付き処理を含む20以上のプロセスプラグイン
- 任意のデータベーステーブルとの間でデータをマイグレーションするための table ソースおよびデスティネーションプラグイン
- 処理開始前にソースデータをオブジェクト指向で操作するための PREPARE_ROW イベント
- 複数のページャータイプ(urls、cursor、page、paginator)による JSON ソースのページネーションサポート
Use Cases
JSON API からのコンテンツインポート
'url' ソースプラグインを 'http' データフェッチャーと 'json' データパーサーとともに使用して、REST API からコンテンツをインポートします。必要に応じて認証を設定し、JSON 構造内のデータを特定するための item_selector を指定し、プロセスパイプラインを使用してフィールドをマッピングします。カーソルベースおよびページ番号ベースのページネーションを含む様々なページャータイプによるページネーションをサポートします。
外部 XML フィードからのデータマイグレーション
'url' ソースを 'xml' または 'simple_xml' パーサーとともに使用します。'xml' パーサーは大きなファイルのメモリ効率の良いストリーミングのために XMLReader を使用し、'simple_xml' は小さなファイル用に完全な XPath サポートを提供します。XPath 風の構文を使用して item_selector を設定し、インポートする要素を識別します。
マイグレーション中のタクソノミーターム検索と作成
'entity_lookup' プロセスプラグインを使用して名前で既存のタームを検索するか、'entity_generate' を使用して存在しないタームを作成します。ボキャブラリーのマッチング用に bundle_key と bundle を設定します。これはノードマイグレーション中にエンティティ参照フィールドを設定するのに最適です。
データベーステーブル間のデータマイグレーション
'table' ソースプラグインを使用して任意の SQL テーブルから読み取り、'table' デスティネーションプラグインを使用して Drupal の Schema API に登録されていないテーブルに書き込みます。トラッキング用の id_fields とカラムマッピング用の fields を設定します。パフォーマンスのためのバッチ挿入をサポートします。
マイグレーション中の HTML コンテンツ処理
'dom' プロセスプラグインを使用して HTML 文字列を DOMDocument オブジェクトに変換し、dom_remove、dom_select、dom_str_replace、dom_apply_styles プラグインを使用して変換を適用します。export メソッドで 'dom' を使用して文字列に戻します。
複数のマイグレーション間での設定共有
ソースデータベース接続、認証資格情報、デフォルトのフィールドマッピングなどの共通設定を含む shared_configuration を持つ migration_group 設定エンティティを作成します。グループ内のすべてのマイグレーションがこの設定を継承します。
blob データからのファイルマイグレーション
ソースデータにバイナリファイルコンテンツ(base64 エンコードされた画像など)が含まれている場合、'file_blob' プロセスプラグインを使用します。まず callback プラグインで base64_decode を使用してデータをデコードし、次に file_blob を使用して指定された URI にファイルを作成します。
条件付きフィールドマイグレーション
'skip_on_value' を使用してソース値に基づいて行またはフィールドをスキップします。別のフィールドが現在の値を通過させるかどうかを制御するより複雑な条件ロジックには 'gate' を使用します。
再利用可能なプロセスパイプライン
module/migrations/process/ に共通のプロセスプラグインチェーンを含む YAML ファイルを作成します。module と path 設定で 'snippet' プロセスプラグインを使用してそれらを参照します。これによりコードの再利用性と保守性が向上します。
Tips
- マイグレーショングループを使用して関連するマイグレーションを整理し、データベース接続やソース URL などの共通設定を共有します
- 'entity_generate' プラグインは 'entity_lookup' を拡張します - 既存のエンティティを見つけるだけでよい場合は、パフォーマンスを向上させるために 'entity_lookup' を使用してください
- 大きな XML ファイルの場合、メモリの問題を避けるために 'simple_xml' の代わりに 'xml' パーサー(XMLReader)を使用してください
- カスタムプロセスプラグインを書く代わりに、複雑な行操作には MigrateEvents::PREPARE_ROW イベントを購読してください
- マイグレーションをデバッグする際は、'drush migrate:import --idlist' を使用して特定の行をテストしてください
- 'snippet' プラグインは、マイグレーション間でプロセスパイプラインの再利用を可能にすることで DRY 原則の維持に役立ちます
- 信頼されたユーザーとしてマイグレーションする際に権限関連のルックアップ失敗を避けるために、entity_lookup で 'access_check: false' を使用してください
- 大規模なデータセットをインポートする際のパフォーマンス向上のために、table デスティネーションで batch_size を設定してください
- ソースデータに関連する配列がある場合、sub_process の前に transpose プラグインを使用して並列配列を結合してください
Technical Details
Hooks 2
hook_migration_plugins_alter
migrate_plus によって実装され、共有グループ設定をマイグレーションに統合し、デフォルトのマイグレーションクラスを設定し、null の idMap を空の配列に変換し、設定エンティティベースのマイグレーションのデリバープレフィックスを除去します。
hook_migrate_prepare_row
migrate_plus によって実装され、PREPARE_ROW イベントをディスパッチし、行の準備に対するオブジェクト指向の応答を可能にします。