フィールド型リファレンス
このページで分かること
- 16種類のフィールドの型と、それぞれが保存されるSQLiteの列の型
- 型ごとの検証の設定とウィジェットの設定(文字列、数値、日時、選択肢、Portable Text、画像・ファイル、参照、JSON、リピーター)
- すべてのフィールドに共通する設定、使えない予約済みのスラッグ、TypeScriptの型
このページの目次
EmDashは、コンテンツのスキーマを定義するために16種類のフィールドの型をサポートしています。それぞれの型はSQLiteの列の型に対応し、型に合った管理画面のUIを提供します。
概要
次の表は、すべてのフィールドの型と、そのSQLiteの列の型の一覧です。
| 型 | SQLiteの列 | 説明 |
|---|---|---|
string |
TEXT | 短いテキストの入力 |
text |
TEXT | 複数行のテキスト |
url |
TEXT | URLの値 |
number |
REAL | 小数 |
integer |
INTEGER | 整数 |
boolean |
INTEGER | 真偽値(true/false) |
datetime |
TEXT | 日付と時刻 |
select |
TEXT | 選択肢から1つを選ぶ |
multiSelect |
JSON | 選択肢から複数を選ぶ |
portableText |
JSON | リッチテキストのコンテンツ |
image |
TEXT | 画像への参照 |
file |
TEXT | ファイルへの参照 |
reference |
TEXT | 別のエントリーへの参照 |
json |
JSON | 任意のJSONデータ |
slug |
TEXT | URLに使える識別子 |
repeater |
JSON | フィールドのグループの繰り返し |
やさしい解説:やさしい解説
WordPressでは、投稿にカスタムフィールド(投稿メタ)を追加して情報を持たせます。EmDashでは、コレクションにフィールドを追加し、そのときにこの表の「型」を選びます。型によって、保存されるデータベースの列の形と、管理画面に表示される入力欄が決まります。たとえば、string は1行の入力欄、text は複数行の入力欄、boolean はオンとオフの切り替えになります。
テキストの型
string
短い1行のテキストです。タイトル、名前、短い値に使います。
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
検証のオプション:
minLength:最小の文字数maxLength:最大の文字数pattern:値が一致する必要がある正規表現
エディターは入力を maxLength までに制限し、長さのルールに対する文字数をリアルタイムで表示します。
ウィジェットのオプション:
- この型に固有のものはありません
text
複数行のプレーンテキストです。説明、抜粋、長めのプレーンテキストに使います。
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
検証のオプション:
minLength:最小の文字数maxLength:最大の文字数pattern:値が一致する必要がある正規表現
エディターは入力を maxLength までに制限し、長さのルールに対する文字数をリアルタイムで表示します。
ウィジェットのオプション:
rows:テキストエリアの行数(既定値:3)
url
Webのアドレスです。コンテンツAPIは、有効なURLでない値を拒否します。
{
slug: "website",
label: "Website",
type: "url",
required: true,
}
URLのフィールドはテキストとして保存されます。/about のような相対パスは url フィールドの有効な値ではないため、値が相対パスになる可能性がある場合は、代わりに string フィールドを使います。
slug
スラッグのような値を入れるためのテキストです。この独自のフィールドの型は、値を生成したり無害化したりしません。
{
slug: "legacy_slug",
label: "Legacy Slug",
type: "slug",
required: true,
unique: true,
}
すべてのコンテンツのエントリーは、予約済みのシステムの slug をすでに持っており、EmDashはこれを公開URLのために別に管理しています。独自の slug フィールドは、コンテンツモデルがスラッグのような値をもう1つ保存する必要がある場合にだけ使います。
数値の型
number
小数です。価格、評価、測定値に使います。
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
検証のオプション:
min:最小値max:最大値
エディターは数値の入力欄に min と max を設定し、その下に許される範囲を表示します。
SQLiteのREAL(64ビットの浮動小数点数)として保存されます。
integer
整数です。数量、件数、並び順の値に使います。
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
検証のオプション:
min:最小値max:最大値
エディターは数値の入力欄に min と max を設定し、その下に許される範囲を表示します。
SQLiteのINTEGERとして保存されます。
boolean
真または偽です。切り替えやフラグに使います。
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
SQLiteのINTEGER(0または1)として保存されます。
日付と時刻
datetime
ある時点を表します。API、MCP、CLIから書き込む場合は、Z または明示的なUTCからの時差を含める必要があります。管理画面の日時の選択欄は、「設定」→「一般」で設定したタイムゾーンで解釈されます。
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
保存形式: 2025-01-24T12:00:00.000Z
EmDashは、受け付けた入力を、ミリ秒を3桁にしたUTCに変換してから保存します。たとえば、2025-01-24T21:00:00+09:00 は 2025-01-24T12:00:00.000Z として保存されます。値が時点ではなく、カレンダー上の日付やその土地の時刻の場合は、代わりに string フィールドを使います。
選択の型
select
あらかじめ決めた選択肢から1つを選びます。
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
検証のオプション:
options:許される値の配列(任意)。指定すると、あらかじめ決めた選択肢を表示し、それ以外の文字列を拒否します。指定しない場合、検証はどの文字列も受け付けます。
選択した値を含むTEXTとして保存されます。
multiSelect
あらかじめ決めた選択肢から複数を選びます。
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
検証のオプション:
options:許される値の配列(任意)。指定すると、あらかじめ決めた選択肢を表示し、それ以外の文字列を拒否します。指定しない場合、検証はどの文字列の配列も受け付けます。
JSONの配列として保存されます:["news", "tutorial"]
リッチコンテンツ
portableText
Portable Textの形式を使うリッチテキストのコンテンツです。見出し、リスト、リンク、画像、独自のブロックをサポートします。
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
値は、Portable TextのブロックのJSON配列として保存されます。例:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
プラグインは、エディターに独自のブロックの種類(埋め込み、ウィジェットなど)を追加できます。これらはスラッシュコマンドのメニューに表示されます。保存したブロックを公開サイトで描画するには、ネイティブ型プラグインまたは付属のパッケージが提供するAstroのコンポーネントが必要です。Portable Textの描画コンポーネントを参照してください。
メディアの型
image
アップロードした画像への参照です。サイズや代替テキストなどのメタデータを含みます。
{
slug: "featuredImage",
label: "Featured Image",
type: "image",
validation: {
allowedMimeTypes: ["image/jpeg", "image/png"],
},
options: {
darkVariant: true,
},
}
ウィジェットのオプション:
darkVariant:ダークカラースキームで表示する画像のための2つ目の枠を、編集者に提供します(既定値:false)。ダークモードを参照してください。
検証のオプション:
allowedMimeTypes:選択するメディアとして受け付ける、正確なMIMEタイプの一覧(空にはできません)
値は、メディアへの参照とそのメタデータを持つオブジェクトとして保存されます。
{
"id": "01HXK5MZSN...",
"src": "/_emdash/api/media/file/01HXK5MZSN...",
"alt": "Description",
"width": 1920,
"height": 1080,
"provider": "local",
"meta": {
"storageKey": "01HXK5MZSN....jpg"
}
}
darkVariant を有効にすると、値の darkVariant に、同じ形でダークモード用の画像を持てます。
{
"id": "01HXK5MZSN...",
"alt": "Architecture diagram",
"width": 1920,
"height": 1080,
"darkVariant": {
"id": "01HXK5N2QT...",
"width": 1920,
"height": 1080
}
}
file
ドキュメントやPDFなど、アップロードしたファイルへの参照です。
{
slug: "document",
label: "Document",
type: "file",
validation: {
allowedMimeTypes: ["application/pdf"],
},
}
検証のオプション:
allowedMimeTypes:選択するメディアとして受け付ける、正確なMIMEタイプの一覧(空にはできません)
値は、キャッシュしたメタデータを持つプロバイダーへの参照として保存されます。
{
"id": "01HXK5MZSN...",
"provider": "local",
"filename": "report.pdf",
"mimeType": "application/pdf",
"meta": {
"storageKey": "01HXK5MZSN....pdf"
}
}
url と size は、ほかのキャッシュしたメタデータのフィールドと同じく任意です。コンテンツのクエリは、保存された値をそのまま返し、メディアライブラリから情報を補いません。最新のメタデータやプロバイダー固有のURLが必要な場合の正式な取得APIについては、ファイルの値と現在のメタデータを参照してください。
関連の型
reference
別のコンテンツのエントリーへの参照です。
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
ウィジェットのオプション:
collection:参照先のコレクションのスラッグ(必須)
参照は、参照先のエントリーのIDとして保存されます。
"01HXK5MZSN..."
柔軟な型
json
任意のJSONデータです。複雑な入れ子の構造、外部サービスとの連携、決まったスキーマのないデータに使います。
{
slug: "metadata",
label: "Metadata",
type: "json",
}
SQLiteのJSONの列にそのまま保存されます。
repeater
構造化された行を繰り返すリストです。validation.subFields にサブフィールドを1つ以上定義します。すると、編集者はJSONをそのまま入力しなくても、行の追加、削除、並べ替え、編集ができます。
次のフィールドは、製品の仕様の一覧を保存します。
{
slug: "specifications",
label: "Specifications",
type: "repeater",
validation: {
minItems: 1,
maxItems: 12,
subFields: [
{ slug: "label", label: "Label", type: "string", required: true },
{ slug: "value", label: "Value", type: "text", required: true },
{ slug: "source", label: "Source", type: "url" },
],
},
}
リピーターの値は、オブジェクトの配列として保存されます。
[
{
"label": "Weight",
"value": "1.2 kg",
"source": "https://example.com/specifications"
}
]
使えるサブフィールドの型は、string、text、url、number、integer、boolean、datetime、select、image です。リピーターの中に、別のリピーターや、portableText、reference、file のような複雑なフィールドは入れられません。
リピーターの検証は、次のプロパティを受け付けます。
subFields:1つ以上のサブフィールドの定義。それぞれの定義にはslug、label、typeが必要で、requiredも設定できます。selectのサブフィールドは、optionsで選択肢を指定します。minItems:最小の行数。0以上である必要があります。maxItems:最大の行数。1以上で、minItemsより小さくできません。
フィールドのプロパティ
すべてのフィールドは、次の共通のプロパティをサポートします。
| プロパティ | 型 | 説明 |
|---|---|---|
slug |
string |
一意の識別子(必須) |
label |
string |
表示名(必須) |
type |
FieldType |
フィールドの型(必須) |
required |
boolean |
値を必須にします(既定値:false) |
unique |
boolean |
値の重複を禁止します(既定値:false) |
searchable |
boolean |
フィールドを全文検索の対象にします(既定値:false) |
indexed |
boolean |
インデックスを使ったフィールドでの並べ替えと絞り込みを有効にします |
translatable |
boolean |
ロケールごとに値を保存します(既定値:true) |
defaultValue |
unknown |
新しいエントリーの既定値 |
validation |
object |
型ごとの検証のルール |
widget |
string |
独自のウィジェットへの置き換え |
options |
object |
ウィジェットの設定 |
sortOrder |
number |
管理画面での表示順 |
indexed は、スカラーのフィールド(string、url、number、integer、boolean、datetime、select、reference、slug)で使えます。インデックスを付けたフィールドは、コンテンツの一覧のクエリで orderBy のフィールドとして渡したり、fieldFilters で使ったりできます。インデックスを追加するたびに保存容量と書き込みの負荷が増えるため、並べ替えや絞り込みに使わないフィールドにはインデックスを付けないようにします。
searchable は、フィールドのテキストを、コレクションの全文検索のインデックスに追加します。識別子、価格、フラグなど、エントリーのすべての翻訳で同じにする必要がある値には、translatable: false を設定します。あるロケールで翻訳対象でないフィールドを変更すると、EmDashはその値を翻訳先のエントリーに同期します。
予約済みのフィールドのスラッグ
次のスラッグは予約済みのため、使えません。
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
TypeScriptの型
プログラムから使うために、フィールドの型の定義をインポートします。
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"url",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
"repeater",
];