Slide 1

Slide 1 text

Drupal8 Migrate API コンテンツ移行

Slide 2

Slide 2 text

自己紹介 村田和子 @kazuno_ko85 ● Drupal歴4年くらい。設計・プロジェクト管理がメイン。 ● 月1でDrupal Meetup Tokyo にいます。https://drupal-tokyo.connpass.com/ ● フリーランス。2020年からエンジニアとは少し違う分野に挑戦したい。

Slide 3

Slide 3 text

コンテンツ移行と言うと・・・ Drupal8サイト Drupal9サイト Drupal7サイト 他のCMS etc... HTML群

Slide 4

Slide 4 text

今日の観点 Drupal8サイト Drupal9サイト Drupal7サイト 他のCMS etc... HTML群

Slide 5

Slide 5 text

Migrate API ● Drupalにはコンテンツ移行専用の APIがある。Migrate API! ● 見るべし : https://www.drupal.org/docs/8/api/migrate-api/migrate-api-overview ● 対象 ○ Content Entity すべて。ノード、タクソノミー、ユーザー、カスタムエンティティも可能。 ○ 翻訳も登録可能。一緒にターム参照も登録可能。 ● なにがいいのか ○ 移行元と移行先のマッピング用テーブルあるので、新規・更新・削除が簡単 ○ 移行元と移行先のマッピングを config(yaml)で定義していく作業がメイン。 ○ カスタマイズは、プラグインとして作成できる。

Slide 6

Slide 6 text

コンテンツ移行の手順 超簡易版 ● 移行元のCSV用意 ● config(yaml)作成 ○ source : CSVの列定義を設定 ○ process: CSVの列とフィールドをマッピング設定 ○ destination: 移行先のコンテンツやタクソノミータイプを設定 ● config(yaml)をインポート (コマンドか管理画面) ○ 例 drush config:import --partial --source=/app/web/modules/custom/p_demo_migrate/config/install ● 実行(コマンド) ○ 例 drush migrate:import p_demo_migrate_article --update

Slide 7

Slide 7 text

Migrate APIの仕様にそって カスタマイズを減らそう 簡単!とはいえ、Migrate APIのレールに乗らないと辛くなる。要件を調整しよう。 ● config(yaml) 1つに対して、DBにマッピング用テーブルが 1つ出来る。 ● 異なるエンティティは一緒に登録できない (ノードとユーザをコマンド1発で登録は無理) ● 翻訳は、config(yaml) は別々に作成する必要あり ● 例 : 記事コンテンツをカテゴリつきで、メイン :日本語, 翻訳:英語で移行したい。 ○ カテゴリ(日本語)をタクソノミーで言語=日本語として移行 ○ カテゴリ(英語)を日本語ノードと紐付けつつ英語翻訳として移行 ○ 記事コンテンツ(日本語)をノードで言語=日本語として移行 ○ 記事コンテンツ(英語)を日本語ノードを紐付けつつ英語翻訳として移行 ● 4回に移行の実行を分けることで、コードなしで移行が可能 (かも)

Slide 8

Slide 8 text

ファイルは・・・? ● よくあるファイルフィールドであれば、コントリビュートモジュールで可能 ○ migrate_fileモジュール ● メディアにしたい場合は、config(yaml) でコンテンツとは別に移行する必要あり ● 本文中の画像やファイルリンク先のファイルはどうする・・・ ?奥の手↓ ○ 素直にやるとファイルフィールドやメディアにアップし、本文内の imgタグやaタグのパス 書き換える必要が・・・。 ○ 1. 対象ファイルだけ一式抜いてドキュメントルートに置いちゃう (ただしちょっと気持ち悪 い) ○ 2.対象ファイルだけ一式抜いて publicフォルダ配下に配置 ■ NginxやApachのリライトでしのぐ or 本文内のパスをpublicフォルダ配下の画像 を見るように置くのが・・・いいかも。

Slide 9

Slide 9 text

カスタマイズ例 いままで見た・作成したカスタマイズです。 ● source ○ 別CMSのDBからデータを引っこ抜く ● process ○ 指定パスをもとにhtmlファイルを読み込む(そのあと本文フィールドに指定 ) ○ パラグラフ化する ○ 投稿者が想定のユーザと異なる場合、登録更新スキップ ● destination ○ なし

Slide 10

Slide 10 text

よく使うコントリビューションモジュール ● migrate_plus ○ processプラグインの提供多し。これがないとマジでつらい。 ● migrate_tools ○ drush実行するなら必須 ● migrate_file ○ ファイル登録 ● migrate_source_csv ○ CSVから移行するなら必須

Slide 11

Slide 11 text

実装時に参考になる資料 ● 翻訳コンテンツの設定方法 ○ core/modules/migrate/tests/modules/migrate_external_translated_test/migrations ○ オリジナル言語と翻訳言語の configがある ● process プラグイン ○ https://www.drupal.org/docs/8/api/migrate-api/migrate-process-plugins/list-of-core-migrate-proce ss-plugins ○ https://www.drupal.org/docs/8/api/migrate-api/migrate-process-plugins/list-of-process-plugins-pr ovided-by-migrate-plus ● 日本語の説明記事 ○ https://qiita.com/masam10/items/5b0d14d2af0115307d27