Drupal 8.8.0以降で作成されたサイトについては、手動でインストールした場合でも、Composerが事前にインストールされ、必要な設定がすでにファイルに含まれているため、追加の変換作業を行う必要がなく、Composerを使用してサイトを管理することができるので大変便利です。

ゴールは、現在推奨されているディレクトリ構造をプロジェクトに持たせることです。

Composerの設定(composer.json、composer.lockなど)、drush、およびvendorディレクトリは、Webルートの外側に配置されます。ベースレベルのディレクトリ(modules、profiles、sites、themes)およびコアディレクトリは、webrootと呼ばれる親ディレクトリ内の「web /」に配置されます。

 手順に入る前に、サイトをComposerで管理されるビルドに変換する準備ができているか、正しいファイル構造に注意する必要があります。適切なファイル構造のガイドラインに従うためには、通常、構築するウェブサイトの構造に基づいて開始することが推奨されます。ベストプラクティスは以下のとおりです。

 Contributed modulesは、webroot/modules/contribに配置する必要があります。Custom modulesは、webroot/modules/customに配置する必要があります。すべてのサードパーティの外部ライブラリは、webroot/librariesに配置する必要があります。すべてのcontributed and custom installation profilesを /profile に配置します。通常通り、contributed themesについてはwebroot/themes/contribに、custom themesについてはwebroot/themes/customに配置してください。

 注意: 推奨ディレクトリにファイルがまだない場合は、すべてのファイルを指定された場所に移動することを検討してみてください。

 ファイル構造についての説明は以上です。次はサイトをComposerで管理されるビルドに移行する手順に進みましょう。

新しいDrupalサイトをインストールする

次のコマンドを実行して、「drupal/recommended-project」テンプレートから新しいDrupalプロジェクトを作成します。

composer create-project drupal/recommended-project new_project --stability dev --no-interaction

注:この例では、プロジェクト名としてnew_projectを使用しますが、必要に応じて変更できます。

これにより、vendorsディレクトリ、web(= webroot)ディレクトリ、およびcomposer.jsonファイルなどを含むディレクトリ「new_project/」が作成されます。

新しいComposerプロジェクトにファイルをコピーする

古いプロジェクトのモジュール、テーマ、およびライブラリを新しいプロジェクトのディレクトリにコピーします。古いフォルダの構造が異なる可能性があるため、新しいプロジェクトファイルを正しいディレクトリに配置するよう注意してください(上記ファイル構造をご参照ください)。

正しいパスは、composer.jsonの「installer-paths」セクションにも記載されています。

settings.phpを新しいプロジェクトに転送する

古いsettings.phpからデータベース接続情報を新しいプロジェクトにコピーします。2つのsettings.phpファイルを比較して、コピーする必要があるものを確認します。最も重要なのは、$databases ['default'] ['default']、$settings ['hash salt']、$settings ['trusted host patterns']の配列です。また、カスタム設定を含む場合があります。

もう一つ重要なことは、$config_directories ['sync']です。これは、おそらくcomposer.jsonがあるWebルートの外側にある存在するディレクトリを指す必要があります。または、これは「sites/default/files/」ディレクトリ内のファイルを指している可能性もあります。定義されたパスは存在し、Webサーバーのユーザーが書き込み可能である必要があります。最後に、development.settings.phpdevelopment.services.ymlの開発設定ファイルを新しいプロジェクトにもコピーしてください。

新しいComposerの設定にコントリビュートモジュールを追加する

requireセクションには、本番でウェブサイトを実行するために必要なすべてのモジュールのリストを含める必要があります。プロジェクトのすべてのコントリビュートモジュールを新しいWebルートのcomposer.jsonファイルに追加してください。モジュールを手動でcomposer.jsonに追加するか、各モジュールに対してcomposer requireコマンドを使用して、すべてのモジュールの最新バージョンをサイトに追加することができます。

すべてのモジュールを手動でcomposer.jsonファイルに追加するには、2つの方法があります。また、カスタムモジュールではなく、すべてのコントリビュートモジュールのリストを手動で収集することもできます。これは、古いサイトのmodules / contrib /またはmodules /ディレクトリ(セットアップに応じて)のディレクトリリストを取得することによって実行できます。

あるいは、以下のDrushコマンドを実行して、有効になっているすべてのコントリビュートモジュールのリストを生成することもできます:
drush pml --status=Enabled --no-core

これにより、有効になっているすべてのコントリビュートモジュールが表示されます。
composer.jsonでは、各モジュールのディレクトリ名の前にdrupal/を付けます。例えば、modules/contrib/devel/drupal/develとなります。
手動でアプローチする場合は、モジュールの適切な(最新)バージョンについて注意する必要があります。
手動でモジュールを追加すること以外にも、必要なすべてのモジュールに対してcomposer require drupal/<module name> を実行することもできます。一度にすべてのモジュールを追加するには、composer require drupal/module-name-1 drupal/module-name-2 drupal/module-name-iを実行します。composer.jsonファイルの「require-dev」セクションにモジュールを追加するには、require --dev drupal/<module name>を使用します。

drupal/devel drupal/kintのような開発パッケージを「require-dev」セクションに配置することも重要です。

Composerのインストールを終わらせる

composer.jsonに追加したすべてのモジュールをダウンロードするために、プロジェクトディレクトリからcomposer installコマンドを実行する必要があります。Composerのテンプレートに問題が発生する場合は、composer lockファイルとvendorディレクトリを削除してから再試行することで解決する場合があります。


これにより、composer.lockファイルが作成され、ファイルが存在しない場合はwebroot/autoload.phpが再作成され、composer.jsonファイルに必要なすべてのパッケージが適切なディレクトリにインストールされます。

データベースの更新とキャッシュのクリア

drush updbコマンドを実行して、利用可能なデータベースのアップデートをすべて適用してください。次に、drush crコマンドを実行してDrupalキャッシュをクリアします。

または、サイト「[domain]/update.php」にアクセスしてupdate.phpを実行することもできます。

Webサーバーの設定を更新する

古いプロジェクトが異なるディレクトリレイアウトを使用している場合、新しいweb/ディレクトリを指すようにWebサーバーの設定を更新する必要があります。この例では以下の通りです。
var/www/sites/new_project/web/

php-fpmセットアップを使用している場合、その設定を更新して新しいWebrootを指すようにする必要があります。例えば、以下のようなものがあります。
/etc/php/7.2/fpm/pool.d/yoursite.conf.

アップデート後は、キャッシュのクリアを忘れずに行ってください。

プロシージャがすべて終わったので、サイトのレポートをチェックして、警告やエラーメッセージが表示されていないことを確認する必要があります。

それでは、新しいComposerで管理されたビルドサイトを楽しんでください!