EmDashは、コンテンツスキーマを定義するための16種類のフィールドタイプをサポートしています。各タイプはSQLiteの列タイプにマッピングされ、適切な管理UIを提供します。
概要
以下の表は、すべてのフィールドタイプとそのSQLite列を示しています:
| タイプ | SQLite列 | 説明 |
|---|---|---|
string | TEXT | 短いテキスト入力 |
text | TEXT | 複数行テキスト |
url | TEXT | URL値 |
number | REAL | 10進数 |
integer | INTEGER | 整数 |
boolean | INTEGER | 真/偽 |
datetime | TEXT | 日付と時刻 |
select | TEXT | オプションからの単一選択 |
multiSelect | JSON | 複数選択 |
portableText | JSON | リッチテキストコンテンツ |
image | TEXT | 画像参照 |
file | TEXT | ファイル参照 |
reference | TEXT | 別のエントリへの参照 |
json | JSON | 任意のJSONデータ |
slug | TEXT | URL安全な識別子 |
repeater | JSON | 繰り返しフィールドグループ |
テキストタイプ
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列にそのまま保存されます。
フィールドプロパティ
すべてのフィールドは、以下の共通プロパティをサポートします:
| プロパティ | タイプ | 説明 |
|---|---|---|
slug | string | 一意の識別子(必須) |
label | string | 表示名(必須) |
type | FieldType | フィールドタイプ(必須) |
required | boolean | 値を必須にする(デフォルト: false) |
unique | boolean | 一意性を強制(デフォルト: false) |
defaultValue | unknown | 新しいエントリのデフォルト値 |
validation | object | タイプ固有の検証ルール |
widget | string | カスタムウィジェットオーバーライド |
options | object | ウィジェット構成 |
sortOrder | number | 管理画面での表示順序 |
予約済みフィールドスラッグ
以下のスラッグは予約されており、使用できません:
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",
];