Drupal 8に.info.ymlファイルでモジュールを知らせる
主要テーマ:プロジェクトのメタデータ
.info.ymlファイル(別名「info yamlファイル」)は、プロジェクトに関するメタデータを保存するための、Drupal 8のモジュール、テーマ、またはインストールプロファイルの重要な部分です。
これらの.info.ymlファイルは次の目的で必要です:
- モジュール、テーマ、またはインストールプロファイルの存在をDrupalに知らせます。
- タイプによってテーマ、モジュールを区別します。
- Drupal Web UIの管理ページに情報を提供します。
- モジュールの有効化・無効化の管理とDrupalバージョンとの互換性の基準を指定します。
- その他のコンテキストでの一般的な管理目的。
詳細については、InfoParserInterface.phpに関する最新のAPIを参照してください。(「ソースの表示」をクリックしてください。)
Hello World
以下は、使用するhello_world.info.ymlファイルです。続けて進める場合は、モジュールのルートフォルダーに新しいhello_world.info.ymlファイルを作成し、このコードを貼り付けます。
name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom
type: module
core: 8.x
各行が何をするのか見てみましょう。
最初の3行は、主にユーザーがモジュールを有効または無効にできる管理UIで使用されます。name キーとdescriptionキーは、モジュール管理ページに表示されるテキストを提供し、package キーは類似したモジュールをグループ化できます。例えば、Coreは package: Coreを使用してDrupal 8に同梱されているすべてのモジュールをグループ化します。また、package: Customを使用して独自のプロジェクトモジュールをすべてグループ化し、検索と有効化を簡単にすることもできます。
Drupal 8で新しいtypeキーは、拡張機能のタイプ(モジュール、テーマ、プロファイルなど)を指定します。
drupal.orgでホストされているモジュールの場合、バージョン番号はパッケージングスクリプトによって入力されます。手動で指定するのではなく、version行を完全に除外する必要があります。
coreキーは、モジュールが互換性のあるDrupalコアバージョンを指定します。
name、 typeおよびcore は必須キーです。
core_version_requirementの指定
警告
現在、DrupalCIはcore_version_requirementを変更するテストパッチをサポートしていません。
core_version_requirementは必要ですか?
メジャーバージョンの制約を定義する際には、次の優先順位が使用されます。
- composer.jsonでコア要件が指定されている場合は、それが最優先されます。
- composer.jsonにコア要件がない場合、info.ymlのcore_version_requirementが次の項目より優先されます。
- info.ymlでcore_version_requirementが設定されていない場合、info.ymlの依存関係セクションのコアモジュールに指定された任意のバージョンが使用されます。
必要に応じたcore_version_requirementの指定
モジュール、テーマ、プロファイルの*.info.ymlファイルの新しいcore_version_requirementキーは、Composerプロジェクトで実装されているセマンティックバージョニングをサポートするようになりました。これにより、モジュール、テーマ、プロファイルは、複数のDrupalコアのメジャーバージョンと互換性があることを指定できるようになります。
例えば、Drupal 8とDrupal 9の両方と互換性のあるモジュールは、次のようなinfo.ymlファイルを持つことができます:
name: My Module
type: module
core: 8.x
core_version_requirement: ^8 || ^9
これは、モジュールがDrupal 8と9のすべてのバージョンと互換性があることを示します。ここでcore:が必要なのは、Drupal Core 8.7.7より前のバージョンがcore_version_requirement:キーを認識しないためです。
ただし、ほとんどのモジュールはDrupal 9と互換性を持たせるために非推奨コードを削除する必要があります。そのため、Drupal 8のすべてのバージョンと互換性を持つことはできません。
例えば、Drupal 8.8.0以降のDrupal 8バージョンとDrupal 9の両方と互換性のあるモジュールには、次のようなinfo.ymlファイルが必要です:
name: My Module
type: module
core_version_requirement: ^8.8 || ^9
Drupal 8.7.7より前のバージョンがモジュールをインストールしないようにするには、core:キーをここで使用しないでください。core_version_requirement: ^ 8 || ^ 9以外のものとともにcoreとcore_version_requirementの両方を追加すると、例外が発生します。
core_version_requirementを使用して8.7.7より前のコアバージョンを制限することはできません。例えば、core_version_requirement: ^ 8.7 || ^ 9は解析時に例外を発生させます:core_version_requirement: keyを認識しない8.7.0のようなバージョンが^ 8.7に含まれるため、これは無効です。
新しいcore_version_requirementキーをcore_version_requirement: ^ 8 || ^ 9以外のものと一緒に使用する場合、このモジュールはDrupal 8.7.7以降でテストする必要があることに注意してください。
完全な例
前の例で示した主要なプロパティに加えて、いくつかの追加プロパティもあります。これは完全な例です。
name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom
type: module
core: 8.x
dependencies:
- drupal:link
- drupal:views
- paragraphs:paragraphs
- webform:webform (>=8.x-5.x)
test_dependencies:
- drupal:image
configure: hello_world.settings
php: 5.6
hidden: true
required: true
# Note: do not add the 'version' or 'project' properties yourself.
# They will be added automatically by the packager on drupal.org.
# version: 1.0
# project: 'hello_world'
- dependencies:モジュールが依存する他のモジュールのリスト。Drupalコアまたはcontribモジュールへの依存関係は、{project}:{module}形式で名前空間化する必要があります。{project}はDrupal.orgのURLに表示されるプロジェクト名(例:drupal.org/project/views)、{module}はモジュールのマシン名です。依存関係にはバージョン制約を含めることもできます(例:webform:webform (> = 8.x-5.x))。モジュールが他の提供モジュールやライブラリに依存する場合は、モジュールのcomposer.jsonファイルで宣言する必要があることに注意してください。相互に依存するローカルカスタムモジュールがある場合は、{module}:{module}(サブモジュールの場合は{module}:{submodule})を使用できます。
- test_dependencies:Drupalの自動テストランナー(「DrupalCI」)でモジュールの特定の自動テストを実行するために必要だが、モジュール全体の依存関係としては不要な(またはモジュール依存関係として開発中だがまだ完了していない)他のモジュールのリスト(dependenciesと同じ形式)。test_dependenciesの変更は、それに依存するテストを実行しようとする前に、Gitリポジトリにコミットする必要があることに注意してください。新しいテストと同じパッチにinfo.ymlの変更を入れることはできません。別の方法として、Composerを使用してテストの依存関係を管理することもできます。詳細については関連ドキュメントを参照してください。
- configure:モジュールが設定フォームを提供する場合、ここでそのフォームへのルートを指定できます。ユーザーが詳細を展開すると、「拡張機能」ページ(URL /admin/modules)にリンクとして表示されます。
- php: 5.6:モジュールに必要な最小PHPバージョンを定義します。古いPHPバージョンを使用しているユーザーはモジュールを有効にできません。モジュールが以前のPHPバージョンに存在しない新しい機能を使用する場合、これを使用してエラーを回避できます。
- hidden: true:これにより、モジュールが「拡張機能」ページのモジュールリストから非表示になります。テストのみを含むモジュールや、コアモジュールのAPIを実装する必要がある開発者向けの例として使用することを目的としたモジュールを非表示にする場合に便利です。settings.phpファイルに$ settings ['extension_discovery_scan_tests'] = TRUEを追加すると、これらのモジュールを表示できます。
- required: true:これはモジュールを有効にする必要があり、削除できないことを意味します。
- 制限付きプロパティは、Drupalのパッケージングシステムによって追加されます。リポジトリのinfo.ymlに手動で追加しないでください:
versionおよび project
.info.ymlファイルのデバッグ
モジュールがadmin/modulesページに一覧表示されない
- 情報ファイルが{machine_name}.info.ymlという名前で、モジュールディレクトリのルートにあることを確認します。
- ファイルの形式が正しいことを確認します。例えば、コロン(:)の前にスペースは不要ですが、コロンの後にはスペースが必要です。形式は次の例のようになります。
- ファイルに次の行があることを確認します:
type: module
- モジュール名が文字またはアンダースコアで始まることを確認します。以下は、有効な関数名に関するPHPドキュメントからの抜粋です。
関数名は、PHPの他のラベルと同じ規則に従います。有効な関数名は文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。正規表現では、[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *のように表現されます。
モジュールはadmin/modulesに一覧表示されているが、チェックボックスが無効になっている
- コア互換性が8.xに設定されていることを確認します
core: 8.x
- モジュールのすべての依存関係が利用可能であることを確認します。モジュール情報を展開して、不足している要件を確認できます。

一部のモジュールはDrupal 8コアから移動され、他の追加モジュールはコアに移動されたり、新しいコアモジュールに置き換えられたりしたことに注意してください。
モジュールの説明が空
descriptionの値が説明に使用されることを覚えておいてください。
description: Example Module description.
composer.jsonファイルの追加
.info.ymlファイルで他のモジュールへの依存関係を宣言することに加えて、モジュールがDrupal.orgの提供モジュールであり、開発の一部としてDrupalCIを使用してモジュールの依存関係の変更をテストしたい場合は、これらのDrupalモジュールの依存関係を表すcomposer.jsonが必要です(DrupalCIは、composer.json内のパッチの依存関係の変更のみを検出でき、.infoファイルや.info.ymlファイル内の変更は検出できません。)