Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Drupal8 Migrate API
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kazukomurata
November 23, 2019
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal8 Migrate API
kazukomurata
November 23, 2019
More Decks by kazukomurata
See All by kazukomurata
Drupal SDC入門
kazukomurata
0
160
長期運用のためのDrupal開発入門
kazukomurata
0
87
Migrate Drupal7 to Drpual8
kazukomurata
0
310
Drupal8 Problem of multilingualization of contents
kazukomurata
0
160
Drupalのデモサイト作って明日までに!と言われたら
kazukomurata
0
890
Drupal8 CKEditor TIps
kazukomurata
0
460
Drupal7 & 8 翻訳コンテンツの罠
kazukomurata
0
290
Drupal7×Cloudfront×SSL
kazukomurata
0
290
Drupal8 State API と Configuration API
kazukomurata
0
300
Other Decks in Programming
See All in Programming
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
120
Webの地図
yosuke_furukawa
PRO
6
4.6k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
160
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
150
アクセシビリティから考える情報設計
high_g_engineer
0
380
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
710
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
250
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
730
Security issues being discussed on Web Platforms
petamoriken
0
990
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6.3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
990
RailsConf 2023
tenderlove
30
1.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Being A Developer After 40
akosma
91
590k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Prompt Engineering for Job Search
mfonobong
0
450
A Tale of Four Properties
chriscoyier
163
24k
Building Adaptive Systems
keathley
44
3.2k
Faster Mobile Websites
deanohume
310
32k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Transcript
Drupal8 Migrate API コンテンツ移行
自己紹介 村田和子 @kazuno_ko85 • Drupal歴4年くらい。設計・プロジェクト管理がメイン。 • 月1でDrupal Meetup Tokyo にいます。https://drupal-tokyo.connpass.com/
• フリーランス。2020年からエンジニアとは少し違う分野に挑戦したい。
コンテンツ移行と言うと・・・ Drupal8サイト Drupal9サイト Drupal7サイト 他のCMS etc... HTML群
今日の観点 Drupal8サイト Drupal9サイト Drupal7サイト 他のCMS etc... HTML群
Migrate API • Drupalにはコンテンツ移行専用の APIがある。Migrate API! • 見るべし : https://www.drupal.org/docs/8/api/migrate-api/migrate-api-overview
• 対象 ◦ Content Entity すべて。ノード、タクソノミー、ユーザー、カスタムエンティティも可能。 ◦ 翻訳も登録可能。一緒にターム参照も登録可能。 • なにがいいのか ◦ 移行元と移行先のマッピング用テーブルあるので、新規・更新・削除が簡単 ◦ 移行元と移行先のマッピングを config(yaml)で定義していく作業がメイン。 ◦ カスタマイズは、プラグインとして作成できる。
コンテンツ移行の手順 超簡易版 • 移行元の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
Migrate APIの仕様にそって カスタマイズを減らそう 簡単!とはいえ、Migrate APIのレールに乗らないと辛くなる。要件を調整しよう。 • config(yaml) 1つに対して、DBにマッピング用テーブルが 1つ出来る。 •
異なるエンティティは一緒に登録できない (ノードとユーザをコマンド1発で登録は無理) • 翻訳は、config(yaml) は別々に作成する必要あり • 例 : 記事コンテンツをカテゴリつきで、メイン :日本語, 翻訳:英語で移行したい。 ◦ カテゴリ(日本語)をタクソノミーで言語=日本語として移行 ◦ カテゴリ(英語)を日本語ノードと紐付けつつ英語翻訳として移行 ◦ 記事コンテンツ(日本語)をノードで言語=日本語として移行 ◦ 記事コンテンツ(英語)を日本語ノードを紐付けつつ英語翻訳として移行 • 4回に移行の実行を分けることで、コードなしで移行が可能 (かも)
ファイルは・・・? • よくあるファイルフィールドであれば、コントリビュートモジュールで可能 ◦ migrate_fileモジュール • メディアにしたい場合は、config(yaml) でコンテンツとは別に移行する必要あり • 本文中の画像やファイルリンク先のファイルはどうする・・・
?奥の手↓ ◦ 素直にやるとファイルフィールドやメディアにアップし、本文内の imgタグやaタグのパス 書き換える必要が・・・。 ◦ 1. 対象ファイルだけ一式抜いてドキュメントルートに置いちゃう (ただしちょっと気持ち悪 い) ◦ 2.対象ファイルだけ一式抜いて publicフォルダ配下に配置 ▪ NginxやApachのリライトでしのぐ or 本文内のパスをpublicフォルダ配下の画像 を見るように置くのが・・・いいかも。
カスタマイズ例 いままで見た・作成したカスタマイズです。 • source ◦ 別CMSのDBからデータを引っこ抜く • process ◦ 指定パスをもとにhtmlファイルを読み込む(そのあと本文フィールドに指定
) ◦ パラグラフ化する ◦ 投稿者が想定のユーザと異なる場合、登録更新スキップ • destination ◦ なし
よく使うコントリビューションモジュール • migrate_plus ◦ processプラグインの提供多し。これがないとマジでつらい。 • migrate_tools ◦ drush実行するなら必須 •
migrate_file ◦ ファイル登録 • migrate_source_csv ◦ CSVから移行するなら必須
実装時に参考になる資料 • 翻訳コンテンツの設定方法 ◦ 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