コンテンツにスキップ

フィールドタイプリファレンス

EmDashはコンテンツスキーマを定義するための14種類のフィールドタイプをサポートしています。各タイプはSQLiteのカラムタイプにマッピングされ、適切な管理UIを提供します。

タイプSQLiteカラム説明
stringTEXT短いテキスト入力
textTEXT複数行テキスト
numberREAL小数
integerINTEGER整数
booleanINTEGER真偽値
datetimeTEXT日付と時刻
selectTEXTオプションからの単一選択
multiSelectJSON複数選択
portableTextJSONリッチテキストコンテンツ
imageTEXT画像参照
fileTEXTファイル参照
referenceTEXT他のエントリーへの参照
jsonJSON任意のJSONデータ
slugTEXTURLセーフな識別子

短い、単一行のテキスト。タイトル、名前、短い値に使用します。

{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}

バリデーションオプション:

  • minLength — 最小文字数
  • maxLength — 最大文字数
  • pattern — 一致させる正規表現パターン

ウィジェットオプション:

  • 特になし

複数行のプレーンテキスト。説明、抜粋、長いプレーンテキストに使用します。

{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}

バリデーションオプション:

  • minLength — 最小文字数
  • maxLength — 最大文字数

ウィジェットオプション:

  • rows — テキストエリアの行数(デフォルト: 3)

URLセーフな識別子。他のフィールドから自動生成されるか、手動で入力されます。

{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}

スラッグは自動的にサニタイズされます:小文字化、スペースをハイフンに置換、特殊文字を削除。

小数。価格、評価、測定値に使用します。

{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}

バリデーションオプション:

  • min — 最小値
  • max — 最大値

SQLite REAL(64ビット浮動小数点数)として保存されます。

整数。数量、カウント、順序値に使用します。

{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}

バリデーションオプション:

  • min — 最小値
  • max — 最大値

SQLite INTEGERとして保存されます。

真または偽。トグルやフラグに使用します。

{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}

SQLite INTEGER(0または1)として保存されます。

日付と時刻の値。ISO 8601形式で保存されます。

{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}

バリデーションオプション:

  • min — 最小日付(ISO文字列)
  • max — 最大日付(ISO文字列)

保存形式: 2025-01-24T12:00:00.000Z

事前定義されたオプションからの単一選択。

{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}

バリデーションオプション:

  • options — 許可された値の配列(必須)

選択された値を含むTEXTとして保存されます。

事前定義されたオプションからの複数選択。

{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}

バリデーションオプション:

  • options — 許可された値の配列(必須)

JSON配列として保存されます:["news", "tutorial"]

Portable Text形式を使用したリッチテキストコンテンツ。見出し、リスト、リンク、画像、カスタムブロックをサポートします。

{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}

Portable TextブロックのJSON配列として保存されます:

[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]

プラグインはカスタムブロックタイプ(埋め込み、ウィジェットなど)をエディターに追加できます。これらはスラッシュコマンドメニューに表示され、サイト上で自動的にレンダリングされます。詳細はプラグインの作成 — Portable Textブロックタイプを参照してください。

アップロードされた画像への参照。寸法や代替テキストなどのメタデータを含みます。

{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}

ウィジェットオプション:

  • showPreview — 管理パネルで画像プレビューを表示(デフォルト: true)

保存される値:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}

アップロードされたファイル(文書、PDFなど)への参照。

{
slug: "document",
label: "Document",
type: "file",
}

保存される値:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}

他のコンテンツエントリーへの参照。

{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}

ウィジェットオプション:

  • collection — ターゲットコレクションのスラッグ(必須)
  • allowMultiple — 複数参照を許可(デフォルト: false)

単一参照の保存値:

"01HXK5MZSN..."

複数参照の保存値:

["01HXK5MZSN...", "01HXK6NATS..."]

任意のJSONデータ。複雑なネスト構造、サードパーティ統合、固定スキーマのないデータに使用します。

{
slug: "metadata",
label: "Metadata",
type: "json",
}

SQLite JSONカラムにそのまま保存されます。

すべてのフィールドは以下の共通プロパティをサポートします:

プロパティタイプ説明
slugstring一意の識別子(必須)
labelstring表示名(必須)
typeFieldTypeフィールドタイプ(必須)
requiredboolean値の必須化(デフォルト: false)
uniqueboolean一意性の強制(デフォルト: false)
defaultValueunknown新規エントリーのデフォルト値
validationobjectタイプ固有のバリデーションルール
widgetstringカスタムウィジェットのオーバーライド
optionsobjectウィジェット設定
sortOrdernumber管理パネルでの表示順序

以下のスラッグは予約済みで使用できません:

  • id
  • slug
  • status
  • author_id
  • created_at
  • updated_at
  • published_at
  • deleted_at
  • version

プログラムでの使用のためにフィールドタイプをインポート:

import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
];