Drupalのカスタムモジュールを用いて、コンテンツタイプとフィールドを追加する方法の備忘録です。
以下の2つの記事が参考になりました。
https://www.drupal.org/docs/drupal-apis/entity-api/creating-a-custom-content-type-in-drupal-8
https://www.digitalnadeem.com/drupal/how-to-create-content-type-fields-and-view-while-installing-custom-module-in-drupal-9-using-configuration-manager/
Car Brandの例#
先に紹介した一つ目の記事の通り進めると、コンテンツタイプ「Car Brand」、フィールド「body」を追加することができました。

なお、上記の記事ではカスタムモジュールの作成の部分がスキップされています。まずはじめに以下のようなフォルダ、およびファイルを作成します。
独自のフィールドの追加#
上記を参考に、コンテンツタイプを追加することができましたが、独自のフィールドを追加するには、Fieldに加えて、Field storageというものも追加する必要がありました。
このField storageのymlの記述方法がわからなかった際に、冒頭で紹介した2つ目のリンクである、以下の記事が参考になりました。
https://www.digitalnadeem.com/drupal/how-to-create-content-type-fields-and-view-while-installing-custom-module-in-drupal-9-using-configuration-manager/
モジュール「Configuration Manager」を使うことで、すでに登録済みのFieldやField storageの定義内容を確認することができました。
上記を踏まえて、IIIF Mediaというコンテンツタイプを作成して、iiif_image_urlという文字列を格納するフィールドと、iiif_image_widthとiiif_image_heightという数値を格納するフィールドを作成してみます。以下のようなファイルが必要です。
コンテンツタイプ#
modules/custom/foobar/config/install/node.type.iiif_media.yml
フィールド:iiif_image_url(string)#
Field storage#
modules/custom/foobar/config/install/field.storage.node.field_iiif_image_url.yml
なお、注意点として、dependencies > enforced > module > {モジュール名} を設定することで、アンイストール時に、当該storageも削除してくれるようです。これがないと、storageの情報だけ残ってしまいました。
以下の記事を参考にしました。
https://www.drupal.org/project/drupal/issues/3231028
!
一方、モジュールをアンイストールする際に、関連するコンテンツタイプやフィールドが削除されてしまうのは問題となる場合もあるため、これらの設定には注意が必要そうです。
Field#
modules/custom/foobar/config/install/field.field.node.iiif_media.field_iiif_image_url.yml
フィールド:iiif_image_width(integer)#
Field storage#
modules/custom/foobar/config/install/field.storage.node.field_iiif_image_width.yml
Field#
modules/custom/foobar/config/install/field.field.node.iiif_media.field_iiif_image_width.yml
まとめ#
結果、カスタムモジュール「foobar」をインストールすることにより、以下のように、IIIF Mediaというコンテンツタイプを作成し、Field typeが文字列と数字のフィールドを追加することができました。

カスタムモジュールを用いたコンテンツタイプとフィールドの追加に関して、参考になりましたら幸いです。