このサイトは非公式の日本語訳です。Cloudflare・EmDashプロジェクトが運営するサイトではありません。

このページで分かること

  • コレクション・フィールド・エントリーの関係と、どのエントリーにもEmDashが持たせる標準の情報、エントリーをゴミ箱に移す操作とフィールド・コレクションの削除の違い
  • 管理画面の「コンテンツタイプ」とシードファイルという、同じモデルを管理する2つの方法
  • 既存のコンテンツがあるモデルを変更するときの注意点と、モデルから生成されるTypeScriptの型
難易度
基礎
読む時間
4分
前提知識
CMSとは
このページの目次

コンテンツモデルは、サイトが保存する情報を表します。EmDashでは、モデルはコレクションフィールドで構成されます。データベースがそのモデルを保存し、管理画面はそれをもとに、編集者が使うフォームを組み立てます。

コレクション、フィールド、エントリー

コレクション(collection)は、Posts、Products、Authorsのようなコンテンツの種類です。フィールド(field)は、タイトル、本文、価格、執筆者への参照のような、そのコンテンツが持つ1つ1つの情報です。エントリー(entry)は、コレクションに保存された1件の項目です。

たとえば、Postsコレクションは次のフィールドを持てます。

Posts
├── Title          short text, required
├── Excerpt        long text, optional
├── Content        rich text, optional
└── Featured image image, optional

EmDashは、どのエントリーにも必要な情報も管理します。ID、公開用のスラッグ、公開の状態、執筆者、作成日時と更新日時、ロケール、リビジョンへの参照などです。取得結果では、この標準の情報が、コレクションに定義したフィールドと一緒に返されます。

エントリーを削除すると、削除日時が設定され、エントリーはゴミ箱に移ります。誰かがゴミ箱から完全に削除するまで、管理者はそのエントリーを復元できます。このエントリーの操作は、フィールドやコレクションの削除とは別物です。フィールドやコレクションの削除はスキーマを変更し、保存されたデータを消します。

本サイトの補足 やさしい解説

WordPressの「投稿タイプ」にあたるのがコレクション、「投稿メタ」にあたるのがフィールドです。1本のブログ記事のように、コレクションに保存された1件のコンテンツをエントリーと呼びます。WordPressの投稿と同じく、エントリーを削除するとまずゴミ箱に移り、完全に削除するまでは復元できます。ただし、フィールドやコレクションそのものを削除すると、保存されていた値は消えてしまいます。

1つのモデルと、それを管理する2つの方法

管理者は、管理画面の「コンテンツタイプ」でコレクションを作成・編集できます。EmDashはデータベースのスキーマを更新し、コンテンツの編集画面は、次にそのコレクションを読み込むときから変更を反映します。

シードファイルは、初期のモデルをJSONで記述します。テンプレートは、セットアップ中にシードを使ってコレクションやそのほかのサイトのデータを作成します。チームでシードをバージョン管理しておき、別の環境を作るときに適用することもできます。管理画面とシードは、別々のモデルを作るのではありません。どちらも、対象のデータベースに保存されたモデルを変更します。

次のシードの一部は、Postsの例の4つの独自のフィールドを定義しています。

seed/seed.json
{
	"version": "1",
	"collections": [
		{
			"slug": "posts",
			"label": "Posts",
			"labelSingular": "Post",
			"fields": [
				{
					"slug": "title",
					"label": "Title",
					"type": "string",
					"required": true
				},
				{ "slug": "excerpt", "label": "Excerpt", "type": "text" },
				{ "slug": "content", "label": "Content", "type": "portableText" },
				{ "slug": "featured_image", "label": "Featured Image", "type": "image" }
			]
		}
	]
}

競合したときの扱いと、シードに含められるそのほかのオブジェクト(設定、タクソノミー、メニュー、ウィジェットエリア、リダイレクト、サンプルコンテンツなど)については、シードファイル形式を参照してください。

本サイトの補足 やさしい解説

WordPressでは、投稿タイプやカスタムフィールドをテーマやプラグインのコードで登録します。EmDashでは、コレクションとフィールドを管理画面の「コンテンツタイプ」で作るか、シードファイル(JSON)に書いてセットアップ時に適用します。どちらの方法でも、変更されるのはデータベースに保存された1つのモデルです。シードファイルをGitで管理しておくと、別の環境にも同じモデルを作れます。

既存のコンテンツがあるモデルの変更

コレクションを追加すると、新しいエントリーを入れる空の場所ができます。任意のフィールドを追加すると、すべてのエントリーにそのフィールドが加わりますが、既存のエントリーには、編集者か移行処理が値を入れるまで値がありません。フィールドを追加するときに、デフォルト値で最初の値を入れておくこともできます。

ラベル、説明、バリデーションのルール、検索の設定、フィールドの順序は、フィールドを作り直さずに更新できます。コレクションとフィールドのスラッグは、変わらない識別子です。管理画面は作成時にスラッグを設定し、あとから名前を変える手段は用意していません。

本番で使っているモデルを変更する前に、デプロイ済みサイトのスキーマの変更を読んでください。

TypeScriptの型宣言

EmDashは、データベースにあるモデルからTypeScriptの型宣言を生成できます。型宣言は、公開されている取得関数にコレクション名とフィールドの形を加えます。そのため、posts を取得すると、返されるエントリーの data.titledata.content などのフィールドをTypeScriptが把握できます。

ローカルでの開発中は、Astroのインテグレーションが emdash-env.d.ts を書き出し、スキーマの変更後に更新します。このファイルは生成される出力なので、型宣言ではなくコンテンツモデルのほうを編集します。リモートでの作業の流れでは、emdash types を実行して、選択したEmDashのサイトから .emdash/types.ts を書き出せます。そのファイルが表すモデルを変更したら、ファイルを生成し直します。

生成された型はコードを現在のスキーマに合わせるのに役立ちますが、保存されたコンテンツを移行するものではありません。モデルの変更と、必要なコンテンツの移行は、引き続き別々の操作です。

コレクションの機能とフィールドの選び方は、コレクションとフィールドを読んでください。編集画面と権限の仕組みは、管理画面を読んでください。