このページで分かること

  • コレクションとフィールドの関係、コレクションの名前(ラベルとスラッグ)と、スラッグをあとから変えられないこと
  • コレクションの動作の設定(公開URL、下書き、リビジョン、プレビュー、検索、SEO、編集ロック、コメント、グループ)と、16種類のフィールドの型
  • フィールドの設定(必須、一意、検証、検索対象、インデックス、翻訳対象)と、あとから変更するとデータが消えたり移行が必要になったりする場合
難易度
基礎
読む時間
5分
前提知識
CMSとは
このページの目次

コレクション(collection)は、1種類のコンテンツと、編集者がそれを作成するときに使うフォームを定義します。コレクションのフィールド(field)は、各エントリーが持てる値を定義します。たとえば、Productsコレクションは、タイトル、価格、説明、商品画像、Brandのエントリーへの参照を持てます。

管理者は、コレクションを「コンテンツタイプ」で管理します。サイトや環境を設定からセットアップする場合は、シードファイルで同じコレクションの設定を定義できます。

コレクションの名前と識別子

どのコレクションにも、複数形のラベル、任意の単数形のラベル、スラッグがあります。ラベルは管理画面に表示されます。スラッグは、クエリ、APIのルート、シードファイル、データベースの中でコレクションを識別します。

たとえば、Blog Posts というラベルのコレクションでは、単数形のラベルに Blog Post、スラッグに posts を使えます。Astroのコードでは、そのスラッグを指定して取得します。

import { getEmDashCollection } from "emdash";

const { entries: posts } = await getEmDashCollection("posts");

スラッグは、コレクションを作成する前に決めます。既存のクエリや保存済みの列がスラッグに依存するため、管理画面ではあとからコレクションのスラッグもフィールドのスラッグも変更できません。スラッグは小文字の英字で始まり、使えるのは小文字の英字、数字、アンダースコアだけで、最大63文字です。EmDash自身のルートやエントリーのデータで使う予約語も、スラッグとしては受け付けません。

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

WordPressの「投稿タイプ」にあたるのが、EmDashのコレクションです。「投稿」「固定ページ」のように、コンテンツの種類ごとに1つ作ります。管理画面では「コンテンツタイプ」というメニューで作成します。コレクションには、画面に表示する名前(ラベル)と、プログラムが使う名前(スラッグ)があります。スラッグはあとから変更できないため、作成前に決めておきます。

コレクションの動作

コレクションの設定は、編集者や公開ページがエントリーをどう使うかを決めます。

  • 「個別ページを有効にする」(Routable):エントリーを公開する前に、公開用のスラッグが必要になります。URLのパターンでは、エントリーのスラッグまたはIDと公開日を組み合わせて、公開時のパスを作れます。
  • 「下書き」(Drafts):編集者が、公開する前に作業内容を保存できます。
  • 「変更履歴」(Revisions):コンテンツの履歴のスナップショットを保存します。
  • 「プレビュー」(Preview):未公開のコンテンツ用に、署名付きのプレビューURLを提供します。
  • 「検索」(Search):検索対象に指定したフィールドの全文検索を有効にします。
  • 「SEO」:タイトル、説明、画像のメタデータ用のフィールドを追加し、コレクションをサイトマップに含めます。
  • 「Edit locking」(編集ロック):1人の編集者が作業している間、エントリーをロックし、ロックが解除されるまでほかの人の書き込みを拒否します。
  • 「コメント」(Comments):コレクションごとに有効にでき、モデレーションと自動でコメントを締め切る設定があります。
  • 「Group」(グループ):コレクションを、サイドバーの折りたためるフォルダーに入れます。同じグループのコレクションは1つのフォルダーにまとめられ、そのフォルダーは、それらのうち最初のコレクションが表示される位置に置かれます。タクソノミーは、割り当てられているすべてのコレクションがそのフォルダーに表示される場合に、同じフォルダーに入ります。

サイトで実際に使う動作だけを有効にします。たとえば、「プレビュー」を有効にするとプレビューURLが提供されますが、エントリーとそのプレビューの状態を正しく描画するのは、引き続きAstroのページの役割です。一連の流れは、プレビューモードを参照してください。

フィールドの型

編集者が入力する値と、アプリケーションのコードがその値を受け取る形に合わせて、フィールドの型を選びます。EmDashは16種類のフィールドの型に対応しています。

必要なコンテンツ フィールドの型 編集者が扱うもの
短いまたは長いテキスト stringtextslugurl テキスト入力、テキストエリア、URLの値
数値 numberinteger 小数または整数の入力
状態と日時 booleandatetime スイッチ、または日付と時刻の選択
決まった選択肢 selectmultiSelect 設定した選択肢から1つまたは複数を選ぶ
リッチテキストや構造化データ portableTextjsonrepeater リッチテキスト、JSON、またはサブフィールドの繰り返しグループ
メディア imagefile メディアライブラリから選んだ項目
関連 reference 別のコレクションから選んだエントリー

型は、編集画面の入力部品を決めるだけではありません。EmDashが値をどう保存・検証するか、生成されるTypeScriptの型宣言が値をどう表すかも、型によって決まります。各型の値の形とオプションは、フィールド型リファレンスに一覧があります。

フィールドのルール

どの独自のフィールドにも、ラベルとスラッグがあります。次のオプションで、フィールドの動作をさらに指定します。

  • 「必須」(Required):値がないとエントリーを保存できないようにします。
  • 「一意」(Unique):コレクション内の2つのエントリーが同じ値を使えないようにします。
  • 「Default value」(デフォルト値):必要に応じて、最初の値を入れておきます。
  • 「バリデーション」(Validation):フィールドの型に応じて、テキストの長さ、数値の範囲、パターン、選択肢、ファイルの種類、リピーターの長さを制限できます。
  • 「検索可能」(Searchable):対応するテキストのフィールドを、コレクションの全文検索のインデックスに含めます。
  • 「インデックス済み」(Indexed):対応するフィールドで並べ替えや絞り込みをするために、データベースのインデックスを作成します。
  • 「翻訳可能」(Translatable):ロケールごとに別の値を持つかどうかを決めます。翻訳可能でない値は、同じエントリーの翻訳の間で共有されます。

クエリがその独自のフィールドで並べ替えや絞り込みをする場合は、「インデックス済み」を有効にします。インデックスは、データベースが条件に合うエントリーや並べ替えたエントリーを見つけるのに役立ちますが、追加の保存領域を使い、コンテンツを作成・更新するたびに処理が増えます。ページに表示するというだけの理由で、フィールドにインデックスを付けないでください。

インデックスを使えるのは、stringurlnumberintegerbooleandatetimeselectreferenceslug のフィールドです。リッチテキスト、JSON、リピーター、複数選択の値は、より複雑なデータを持つため、この種類のインデックスは使えません。

参照(reference)は、参照先のエントリーのIDを保存します。参照には参照先のコレクションを設定し、フィールドに複数のエントリーのIDを持たせる場合だけ、複数の値を有効にします。参照を使うと、コードから関連するコンテンツを読み込んだり特定したりできますが、参照先のエントリーを参照元のエントリーにコピーするわけではありません。

あとからのフィールドの変更

ラベル、バリデーション、検索の設定、インデックス、ウィジェットのオプション、表示順は、フィールドを作り直さずに変更できます。フィールドを追加しても既存のエントリーはすべて残りますが、サイトが新しいフィールドに値があることを前提にしている場合は、既存のエントリーにもその値が必要です。

移行では、既存の値を変換し、モデルを更新し、デプロイの間に古いアプリケーションのコードと新しいコードの両方が動くようにする必要があります。これらの変更をする前に、デプロイ済みサイトのスキーマの変更の手順に従います。

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

WordPressの投稿メタ(カスタムフィールド)にあたるのが、EmDashのフィールドです。EmDashでは、フィールドを削除すると、その値はすべてのエントリーから消えます。コレクションを削除した場合は、その中のエントリーもすべて消えます。フィールドのラベルや入力のルールは、あとから変更できます。一方で、削除、型の変更、「必須」や「一意」の変更は、データの消失や移行の作業につながるため、本番のデータをバックアップしてから進めます。

関連する作業

エントリーの作成と公開はコンテンツの作成と公開、絞り込みと並べ替えはコンテンツの取得を参照してください。生成される型とシードファイルについては、コンテンツモデルを読んでください。