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

このページ

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

概要

以下の表は、すべてのフィールドタイプとそのSQLite列を示しています:

タイプSQLite列説明
stringTEXT短いテキスト入力
textTEXT複数行テキスト
urlTEXTURL値
numberREAL10進数
integerINTEGER整数
booleanINTEGER真/偽
datetimeTEXT日付と時刻
selectTEXTオプションからの単一選択
multiSelectJSON複数選択
portableTextJSONリッチテキストコンテンツ
imageTEXT画像参照
fileTEXTファイル参照
referenceTEXT別のエントリへの参照
jsonJSON任意のJSONデータ
slugTEXTURL安全な識別子
repeaterJSON繰り返しフィールドグループ

テキストタイプ

string

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

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

検証オプション:

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

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

  • 特になし

text

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

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

検証オプション:

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

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

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

slug

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

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

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

数値タイプ

number

10進数。価格、評価、測定に使用します。

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

検証オプション:

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

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

integer

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

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

検証オプション:

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

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

boolean

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

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

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

日付と時刻

datetime

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

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

検証オプション:

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

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

選択タイプ

select

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

{
  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" }]
	}
]

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

メディアタイプ

image

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

{
  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
}

file

ドキュメントやPDFなどのアップロードされたファイルへの参照。

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

値は、ファイル参照とそのメタデータを含むオブジェクトとして保存されます:

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

リレーショナルタイプ

reference

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

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

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

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

単一の参照は、ターゲットエントリIDとして保存されます:

"01HXK5MZSN..."

複数の参照は、エントリIDの配列として保存されます:

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

柔軟なタイプ

json

任意の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
  • primary_byline_id
  • created_at
  • updated_at
  • published_at
  • scheduled_at
  • deleted_at
  • version
  • live_revision_id
  • draft_revision_id
  • terms
  • bylines
  • byline

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",
];