composer.jsonファイルを追加する
カスタムモジュールの開発では、開発者がモジュールにcomposer.jsonファイルを追加する必要があるシナリオがいくつかあります。これらのシナリオの一部は、カスタムモジュールがdrupal.orgのプロジェクトとしてコミュニティに提供されるかどうかによって異なります。
モジュール開発者がpackagist.orgでホストされているPHPライブラリを使用したい場合は、プロジェクトにcomposer.jsonファイルを追加する必要があります。
モジュールがdrupal.orgの提供モジュールであり、他のモジュールへの依存関係があり、開発の一部としてDrupalCIを使用してこれらの依存関係の変更をテストしたい場合は、これらのDrupalモジュールの依存関係を表すcomposer.jsonが必要です(DrupalCIは、composer.json内のパッチの依存関係の変更のみを検出でき、.infoファイルや.info.ymlファイル内の変更は検出できません。)
モジュール開発者が、挿入演算子やチルダなどのcomposer.jsonが提供するより表現力豊かな制約を使用したい場合、これらはcomposer.jsonでのみ可能です。(Drupal自体はこれらの制約に縛られませんが、エンドユーザーがComposerを使用してサイトを構築する場合、それらはビルド時のみに尊重されます。)
モジュールに依存関係がない場合、または依存関係が他のDrupalモジュールのみである場合、composer.jsonは不要です。ただし、composer.jsonを用意しても悪影響はありません。
開発者がcomposer.jsonファイルを持っているかどうかに関係なく、Drupalモジュールの依存関係は.info.ymlファイルにまだ表現されている必要があります。これにより、Drupalは正しいモジュールが有効にされることを保証できます。
モジュールをPHPパッケージとして定義する
より広いPHPコミュニティはパッケージ管理にComposerを使用しています。Drupalでも同様です。例えば、Drupalプロジェクトは「drupal/core」パッケージに依存しています。「drupal/core」のパッケージタイプは「drupal-core」として定義されているため、Composerはそれをどう扱うかを知っています。composer/installersライブラリはいくつかのDrupalタイプを定義しています。次のとおりです:
- drupal-module
- drupal-theme
- drupal-library
- drupal-profile
- drupal-drush
以下は、mobile_detectプロジェクトがcomposer.jsonを使用して外部プロジェクトのmobiledetect/mobiledetectlibに依存する方法の完全な例です:
{
"name": "drupal/mobile_detect",
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices.",
"type": "drupal-module",
"homepage": "https://drupal.org/project/mobile_detect",
"authors": [
{
"name": "Matthew Donadio (mpdonadio)",
"homepage": "https://www.drupal.org/u/mpdonadio",
"role": "Maintainer"
},
{
"name": "Darryl Norris (darol100)",
"email": "admin@darrylnorris.com",
"homepage": "https://www.drupal.org/u/darol100",
"role": "Co-maintainer"
}
],
"support": {
"issues": "https://drupal.org/project/issues/mobile_detect",
"irc": "irc://irc.freenode.org/drupal-contribute",
"source": "https://cgit.drupalcode.org/mobile_detect"
},
"license": "GPL-2.0-or-later",
"minimum-stability": "dev",
"require": {
"mobiledetect/mobiledetectlib": "~2.8"
}
}
パッケージの命名には、Drupal Composerの命名規則に従う必要があります。
composer.jsonでの依存関係の定義
必要に応じて、composer.jsonでモジュールの外部依存関係を定義できます。Drupalコアはこれらの依存関係を自動的に検出または管理しません。プロジェクトのcomposer.jsonファイルで定義された依存関係を使用するには、次のメンテナンス戦略のいずれかを使用する必要があります:
- composerを使用してDrupalコアとモジュールをインストールします。
- Drupalインストールのルートディレクトリにあるcomposer.jsonファイルを手動で変更します。
Drupalの依存関係マネージャーとしてのcomposerの詳細については、依存関係マネージャーとしてのComposerとDrush Makeの比較を参照してください。
他のDrupalモジュールへの依存関係の追加
デフォルトでは、Composerは依存関係を解決するときにPackagistに公開されたパッケージのみを検索します。ほとんどのDrupalモジュールは、Drupalに独自のリポジトリがあるため、そこで公開されていません。そのため、次のようなエラーメッセージが表示される場合があります:
要求されたパッケージdrupal/moduleはどのバージョンにも見つかりませんでした。パッケージ名にタイプミスがある可能性があります。
次のコマンドを実行して、Composerにpackages.drupal.orgリポジトリでDrupalモジュールを検索するように指示できます:
$ composer config repositories.drupal composer https://packages.drupal.org/8
このコマンドは、composer.jsonファイルに次のセクションを追加します:
"repositories": {
"drupal": {
"type": "composer",
"url": "https://packages.drupal.org/8"
}
}
Drupal 9との互換性
Drupal 9との互換性にはcomposer.jsonファイルは不要です。Drupal 9は info.ymlファイルと 互換性があります。プロジェクトにcomposer.jsonファイルがある場合、Drupal 9との互換性にdrupal/coreバージョンの互換性も必須ではありません。ただし、requireセクションにdrupal/coreバージョンの要件がある場合は、Drupal 9と互換性がある必要があります。