こんにちは、スタジオ・ウミのエンジニアの新田です。

ウミでは1月にデザイナーさんとエンジニアさんがそれぞれ1人ずつ加わり、さらに活気が出てきました。最近会社の方針などについてみんなで話し合う機会が多いですが、それぞれ人生経験も違うので様々な意見が出てきて面白いです。

さて今回は、新人さんによく聞かれる「コンテンツと構成の見分け方」について、自分なりの考え方を紹介したいと思います。

「コンテンツも構成も何かのデータということはわかるけど、管理画面を見てもどれがコンテンツで、どれが構成かわからない」というのは、Drupal初心者あるあるかと思います。そのような方のヒントになれば幸いです。

なぜ見分ける必要があるのか

後述しますが、

  • 構成はGit管理する必要があるため(変更した後、コミットしないといけない)
  • コンテンツはバックアップがないと復旧できない

など扱い方に違いがあるため、サイトビルディングに関わる人は誰でも知っておくと便利です。

管理画面から見分ける方法

いきなりですが表にするとこんな感じです。

コンテンツ 構成
ノード、ターム、ユーザー コンテンツタイプの設定、Viewsの設定、権限設定
用途 サイトのコンテンツ(実データ、サイトの命!)を保存するのに使う サイト構築で必要な設定を保存するのに使う
触る人 CMS利用者の場合が多い 開発者の場合が多い
サイトリリース後は 増え続けることが多い 変わらないことが多い
フォームの特徴 ノードの編集画面のように、決められたフィールドに入力することで、同じ形式のデータを何個でも作ることができる Viewsの設定画面のように、大項目の中に小項目が何重にもネストされている

以下、ジャンル別にまとめてみました。初心者さんから見ると、意外?それとも想像通りでしょうか?

ノード

  • コンテンツタイプ: 構成
  • 一個一個のノード: コンテンツ

タクソノミー

  • ボキャブラリー: 構成
  • 一個一個のターム: コンテンツ

ブロック

  • ブロックレイアウト: 構成
  • ブロックタイプ: 構成
  • 一個一個のブロック(コアやコントリビュートモジュールで定義されているもの): 構成
  • 一個一個のカスタムブロック(管理画面から作成するもの): コンテンツ

ユーザー

  • 役割: 構成
  • 権限: 構成
  • 一人ひとりのユーザー: コンテンツ

Views

  • 設定画面に表示されるもの: 構成
  • 作成したビューで表示できるもの: コンテンツ

言語・翻訳周り

  • サイトの言語: 構成
  • インターフェースの翻訳
    •   更新周期などの設定: 構成
    • 一個一個の翻訳: コンテンツと構成の両方にあてはまるような、あてはまらないような独自の存在(エンティティを埋め込んでいないが、テーブル状に保存され、ファイルに出力することができる)
  • コンテンツの翻訳
    • どのフィールドを翻訳するか等の設定: 構成
    • 一個一個の翻訳されたコンテンツ: コンテンツ

環境設定(/admin/config)に表示されているもの

ほぼ全部構成です。ただし例外もあります↓

  • ショートカット
    • ショートカットセット: 構成
    • 一個一個のショートカット: コンテンツ
  • URLエイリアス
    • 一個一個のエイリアス: コンテンツ

扱い方の違い

管理画面上では似てるようなそうでもないようなコンテンツと構成ですが、扱い方には以下のような違いがあります。

コンテンツ 構成
drush cexすると ファイルに出力できない ファイルに出力できる
Git管理 できない できる
復旧方法 DBのバックアップをインポートする Gitでファイルを元に戻し、DBにインポートし直す

Drush cex / Git管理

コンテンツも構成も最初はデータベースに保存されますが、ファイルに出力できるかどうかが違います。drush cexは、データベースから構成をエクスポートするコマンドです。コンテンツはdrush cexしてもファイルに出力できないので、Git管理はできませんが、構成はdrush cexするとファイルに出力できるため、通常はGit上で管理します。なので、構成を変更した後はコミットするのを忘れずに

データの復旧方法

DBバックアップの無い状態で、DBがおかしくなるようなアクシデントがあった場合(間違って管理画面から変更してしまう、DBのスキーマのアップデートに失敗する等)、致命的なのはコンテンツです。コンテンツは元のDBが無いと復旧できません。構成の場合は、Git管理していてファイルが存在していればdrush cimいつでも元に戻すことができます。というわけで作業前は必ずバックアップを取りましょう & コンテンツを間違って変更しないように気をつけましょう

データの形の違い(おまけ)

バックエンドよもやま話なので、興味の無い方はスルーしてください。コンテンツの値は、フィールドをカラムとして、テーブルのような形で表現することができます。

タイトル  本文 投稿日
 記事1のタイトル 記事1の本文 記事1の投稿日
 記事2のタイトル 記事2の本文 記事2の投稿日
... ... ...

それに対して、構成はツリー状です。Viewsの設定を以下にコピペしました。例えば、displayの下にdefaultがあり、その下にはiddisplay_title、などの小項目があり、さらにその下にも小項目があり...というように構成は無限にネストすることができます。

...
id: archive
label: アーカイブ
display:
  default:
    id: default
    display_title: マスター
    display_plugin: default
    position: 0
    display_options:
      title: マンスリーアーカイブ
      fields: {  }
      pager:
        type: mini
        options:
          offset: 0
          items_per_page: 10
          total_pages: 0
          id: 0
          tags:
            next: ››
            previous: ‹‹
          expose:
            items_per_page: false
            items_per_page_label: ページ毎の件数
            items_per_page_options: '5, 10, 25, 50'
            items_per_page_options_all: false
            items_per_page_options_all_label: '- 全て -'
            offset: false
            offset_label: オフセット
            ...

個人的には、この形の違いがコンテンツと構成の決定的な違いなのかな〜と思っています。

ちなみにDrupalでコンテンツ、構成に次いでよく使われる「ステート」はkey value pairと呼ばれる通り1:1の形をしています。

my_process_last_execution_time: 2024-01-01

この三種の神器があれば、だいたいどんなものでも保存できますね。

まとめ

というわけで、コンテンツと構成の違いの紹介でした。管理画面を見ていて、「これはコンテンツか構成か?」と迷った場合は

  • ユーザーが作成し、開発終了後も増えていくもの
  • 「一個一個の〇〇」で表せるもの
  • フォームがノードのフォームみたいな形をしてる

→コンテンツ!

  • 開発者が設定し、開発終了後はあまり触らなそうなもの
  • 環境設定にあるもの
  • フォームが何重にもネストされている

→構成!

という風に考えてみるといいかもしれません。

そして、

  • 構成は変更したらGitにコミットする!
  • コンテンツは間違って変更しないように注意する!作業前にバックアップを取る!

ことを忘れないでくださいね。

ところで今回のアイキャッチ画像はITとは全然関係ない風景画像ですが、なぜこのような画像にしたかわかりますか?ここまで読んだ鋭い方は気づかれたかもしれませんね....

画像の中に「テーブル」と「ツリー」があるってことにね...!(ズコー)

それでは楽しいDrupalライフを!


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。