Drushを使用したアップグレード
Drushは、Drupalのコマンドラインシェルおよびスクリプトインターフェースです。Drushを使用したDrupal 8へのアップグレードは、ブラウザのユーザーインターフェースを使用する代替手段です。Drushを使用したDrupal 8へのアップグレードは、移行を1つずつ実行でき、ロールバックも可能なため、複雑なサイトの移行に非常に役立ちます。
Composerを使用したDrushのインストール
Drupal 8サイトはComposerで構築できます。コンポーザープロジェクトテンプレートとしてdrupal-composer/drupal-projectを使用する場合、プロジェクトのcomposer.jsonファイルに依存関係として指定されているため、Drushが既にあります。
ComposerプロジェクトでDrushが依存関係として指定されていない場合、次のようにコマンドラインからDrushをインストールできます:
composer require drush/drush
注:現時点ではDrush 9を使用してください
Drush 10の問題のため、現在はdrush/drush: ^9.0を要求するcomposerでDrush 9をインストールすることをお勧めします。これによりバージョン9.7.2になります。
これにより、最新のDrupalと互換性のある最新(安定版)のDrushが提供されます。詳細については、DrushとDrupalのバージョン互換性マトリックスを参照してください。
Drushのバージョンを確認するには、次を使用します
drush --version
必須のDrupalモジュール
Drushを使用して移行するには、次の追加モジュールをダウンロードして有効にする必要があります:
- Migrate Upgrade:Drupal 6または7からDrupal 8へのアップグレードのDrushサポートを提供します。
- Migrate Plus:移行エンジンの基本機能の拡張を提供します。
- Migrate Tools:このページで後で使用するDrushコマンドを提供します。
重要! 3つのモジュールそれぞれについて正しいバージョンを選択することに特に注意してください。Drupal 8コアバージョンと互換性のあるバージョンの選択については、プロジェクトページを参照してください。
さまざまなアップグレードモジュールの詳細については、アップグレードモジュールのリストを参照してください。
ソースデータベースを定義する
これは、Drupal 6/7ソースサイトのデータベース接続の詳細を定義する方法の例です。ソースサイトがデータベースプレフィックスを使用する場合は、必ずプレフィックスを指定してください。ローカル開発データベース(default)とソースデータベース(D6またはD7)の両方に接続する必要があります。以下は、Landoでこれを行う方法の例です。例には、完全を期すために設定されたデフォルトデータベースが含まれています。
注:問題を回避するには、移行データベースキーを「migrate」と名付けることが重要です。移行中の「Drupalバージョン7コアのフィールド失敗」セクションを参照してください。
settings.phpでのデータベース接続の例
$databases['default']['default'] = [
'database' => 'drupal8',
'username' => 'drupal8',
'password' => 'drupal8',
'prefix' => '',
'host' => 'database',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
];
$databases['migrate']['default'] = [
'database' => 'drupal7db',
'username' => 'drupal7db',
'password' => 'drupal7db',
'prefix' => '',
'host' => 'd7db',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
];
Example .lando.yml
name: mywebsite
recipe: drupal8
config:
webroot: web
# Create Drupal 7 database service, consider adding phpmyadmin
services:
d7db:
type: mariadb
creds:
user: drupal7db
password: drupal7db
database: drupal7db
portforward: true
データベースダンプファイルがmywebsite_db.sql.gzという名前で現在のフォルダーにあると仮定して、Drupal 7データベースをインポートします:
lando db-import --host=d7db --user=drupal7db mywebsite_db.sql.gz
インスピレーションはhttps://github.com/thinktandem/migration_boilerplate.から。
migrate-upgradeを使用した移行の生成
追加されたMigrate Toolsモジュールは、drush migrate-statusやdrush migrate-importなどのDrushコマンドを追加します。移行関連のDrushコマンドの完全なリストは、このページの下部にあります。
何もせずにdrush migrate-statusコマンドを実行しようとすると、実行可能な移行は表示されません。これは、個々の移行がソースデータベースに基づいて最初に作成される必要があるためです。Migrateはどのソースを使用するかを知らないため、移行はまだ作成されていません。
移行を生成するには、Migrate Upgradeアップグレードモジュールによって提供されるdrush migrate-upgradeコマンドが必要です。
おそらく、個々の移行だけを生成して、1つずつ実行したいでしょう。その場合は、--configure-onlyオプションを使用する必要があります
drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-root=http://example.com --configure-only
ここで
- 'user'はソースデータベースのユーザー名です。
- 「パスワード」はソースデータベースユーザーのパスワードです
- 'server'はソースデータベースサーバーです
- 'db'はソースデータベースです
- 「http://example.com」はソースサイトのルートです。レガシーサイトがローカルファイルシステムにある場合は、このオプションの値としてDrupalルートディレクトリへのパスを使用できます。ここで指定する値は、個々のファイルのパスに付加され、それらを見つけてインポートします。
--legacy-db-keyオプションを使用すると、settings.phpで定義された対応するキーを持つ$database配列を使用できます。
ソースサイトがデータベーステーブル名にテーブルプレフィックスを使用している場合は、次のように追加の引数として追加する必要があります。この例では、データベースプレフィックスは「drupal_」です
drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-db-prefix=drupal_ --legacy-root=http://example.com --configure-only
--configure-onlyオプションを使用しない場合、drush migrate-upgradeは最初にすべての移行を生成し、次に実行します。
--configure-onlyパラメーターでmigrate-upgradeを実行した後、migrate-statusを実行して可能な移行のリストを確認します:
drush migrate-status
次に、これらの移行を確認して選択的に実行できます。移行を個別に実行するには、次を実行します:
drush migrate-import <migration name>
リスト内のすべての移行を実行するには、次を実行します:
drush migrate-import --all
migrate-manifestを使用した特定の移行の実行
マニフェストファイルを使用して、特定の移行セットを設定することもできます。これにより、移行グループを再現可能な方法で実行できます。この方法には、Migrate Manifestモジュールも必要です。Migrate Manifestを使用すると、次のコマンドで利用可能な移行の完全なリストを取得できます:
drush migrate-template-list # Drush 8
または
drush migrate:template:list # Drush 9
注:現在、Migrate ManifestモジュールはDrush 10+と完全には互換性がありません。
必要な移行は、以下の例に示すようにYAMLファイルとして定義されます。必要な移行を列挙するだけで済みます。Migrate Manifestは、依存関係を解決するために必要な追加の移行の追加を求めます。移行は任意の順序でリストできます。依存関係に基づいて正しい順序で実行されます。
# user
- d6_user
- d6_user_profile_field
- d6_user_profile_field_instance
- d6_user_profile_entity_display
- d6_user_profile_entity_form_display
- d6_profile_values:user
- d6_filter_format
- d6_user_role
- d6_user_picture_entity_display
- d6_user_picture_entity_form_display
- d6_user_picture_file
- d6_user_picture_field
- d6_user_picture_field_instance
# taxonomy
- d6_taxonomy_vocabulary
- d6_taxonomy_settings
- d6_taxonomy_term
# nodes
- d6_node
- d6_node_revision
- d6_node_type
- d6_view_modes
- d6_filter_format
- d6_field_instance_per_form_display
- d6_field_instance_widget_settings
- d6_field_formatter_settings
- d6_field_instance
- d6_field
- d6_field_settings
- d6_node_settings
- d6_cck_field_values:*
- d6_cck_field_revision:*
# taxonomy fields
- d6_term_node_revision
- d6_term_node
- d6_vocabulary_entity_display
- d6_vocabulary_entity_form_display
- d6_vocabulary_field_instance
- d6_vocabulary_field
# blocks
- d6_block
- d6_menu
# custom blocks
- d6_custom_block
- d6_filter_format
# book
- d6_book
- d6_book_settings
# file migrations are configurable, see https://www.drupal.org/node/2257723
- d6_file:
source:
conf_path: sites/assets
destination:
source_base_path: destination/base/path
destination_path_property: uri
マニフェストファイルを、Drushの実行時にアクセスできる場所に置きます。移行の変更を追跡できるように、バージョン管理システムに保存することをお勧めします。
マニフェストファイルにリストされている移行で使用されるモジュールがソースサイトに存在し、有効になっていることを確認してください(例:d6_fieldのフィールドモジュール)。そうしないと、移行の実行中にエラーが発生します。
マニフェストファイルで定義された移行は、以下に示すようにコマンドラインから実行されます。データベースURLとマニフェストファイルのパスを適切な値に置き換えます(migrate-upgradeと同様に、migrate-manifestはMySQL URLまたはsettings.php配列キーを受け入れます):
drush migrate-manifest --legacy-db-url=mysql://d6user:d6pass@localhost/drupal_6 manifest.yml
Acquia Dev Desktopユーザー向けの注意事項
Acquia Dev Desktopを使用していて、Dev DesktopにDrupal 6サイトがある場合、デフォルトのデータベース資格情報は、空のパスワードのdrupaluser、IPアドレス127.0.0.1のデータベースのポート33067です。これらすべてから、--legacy-db-url=mysql://drupaluser:@127.0.0.1:33067/drupal_6コマンドはデータベース名がdrupal_6であると想定します。接続に問題がある場合は、drush statusを実行してこれらの値を確認してください。
Drush移行コマンドリファレンス
migrate-upgrade (no alias)
Migrate Upgradeプロジェクトによって提供されます。Drupal 6/7からDrupal 8へのアップグレードを実行するためにこれを使用します。このコマンドは、ソースサイトの設定とコンテンツに基づいて移行設定を生成します。
このドキュメントページの前半の例を参照してください。
基本例
drush migrate-upgrade --legacy-db-key=migrate
オプション
- legacy-db-url:ソースデータベースのデータベース接続情報。
- legacy-db-prefix:ソースデータベースのデータベーステーブルプレフィックス。
- legacy-root:ソースサイトへのパス。ファイルディレクトリからコンテンツを転送するために使用されます。ファイルがプライベートの場合は、ローカルファイルパスを指定する必要があります。パブリックファイルの場合はhttp(s)も機能します。
- configure-only:移行設定のみを作成するためにこれを使用します。このオプションが設定されている場合、移行は「drush migrate-import」で個別に実行できるように生成されます。
migrate-status (ms)
Migrate Toolsモジュールによって提供されます。すべての移行を現在のステータスとともにリストするために使用します。
基本例
drush migrate-status
migrate-import (mi)
Migrate Toolsモジュールによって提供されます。1つ以上の移行プロセスを実行するために使用します。これは通常、Drupal以外のソースからのカスタム移行で使用されます。たとえば、カスタム移行設定を作成してインポートした場合、このコマンドを使用して実行できます。
基本例
drush migrate-import migration_id
drush migrate-import --group=files
オプション
- all:設定されているすべての移行を実行します。
- group:特定のグループに属するすべての移行を実行します。
- limit:各移行で処理するアイテム数の制限。
- feedback:処理されたアイテムでの進行状況メッセージの頻度。
- idlist:インポートするソースIDのカンマ区切りリスト。
- update:新しいアイテムと、ソースで更新された以前に移行されたアイテムを移行します。
- force:すべての依存関係が満たされていなくても、強制的に操作を実行します。
一般的な使用例
- migrate-upgrade --configure-onlyを使用すると、設定オブジェクトが作成されます。Drupal 8のデフォルト動作では既存の設定オブジェクトの上書きが許可されないため、migrate-upgrade --configure-onlyの後に移行を実行するためにmigrate-upgradeを使用することはできません。代わりにmigrate-importを使用してください。
- カスタム移行が作成され、インポートされる場合(設定管理UIまたはdrush config-import経由)、移行を実行するにはmigrate-importを使用してください。
プロのヒント:カスタム移行設定をインポートし、更新して再インポートする必要がある場合は、設定アップデートマネージャーモジュールを使用してください。
migrate-rollback (mr)
Migrate Toolsモジュールによって提供されます。移行をロールバックするために使用します。これは通常、テスト用、または問題が発生して最初からやり直す必要がある場合に使用します。移行タスクのIDまたはグループで使用します。
基本例
drush migrate-rollback migration_id
drush migrate-rollback --group=files
migrate-stop (mst)
Migrate Toolsモジュールによって提供されます。アクティブな移行操作を停止するために使用します。
基本例
drush migrate-stop migration_id
migrate-reset-status (mrs)
Migrate Toolsモジュールによって提供されます。アクティブな移行のステータスをアイドル状態にリセットするために使用します。
基本例
drush migrate-reset-status migration_id
migrate-messages (mmsg)
Migrate Toolsモジュールによって提供されます。移行に関連するメッセージを表示するために使用します。これは、移行プロセス中に失敗が発生した場合に役立ちます。失敗した理由と原因が表示されます。
基本例
drush migrate-messages migration_id
migrate-fields-source (mfs)
Migrate Toolsモジュールによって提供されます。ソースでマッピングに利用できるフィールドを一覧表示するために使用します。
基本例
drush migrate-fields-source migration_id