Content Type
最終更新: 2026年7月3日
Content Type はコンテンツが従う枠組み(スキーマ)です。どのフィールドを持ち、各フィールドがどのタイプ・多言語対応の有無・必須の有無・バリデーションルールを持つかを定義します。アパレルショッピングモールの「商品」を例にとると、商品名・価格・詳細説明・代表写真といった項目構成を Content Type 「商品」1つが規定し、実際の個々の商品はこの枠組みに従う Content として作成されます。
CMA において Content Type は Space の下位リソースであり、パスは /spaces/{spaceId}/content-types を基準とします。作成・更新・公開取り消しといった管理操作は CMA で実行し、公開されたスナップショットは CDA へ配信されます。ただし Content Type は作成・更新時に自動的に公開されるため、Content とは異なり、別途の公開呼び出しなしにただちに Published 状態になります(下記 状態と自動公開 を参照)。
リソース構造
以下は Content Type 「商品」の単一取得レスポンスです。sys(システムプロパティ)とともに、name、displayField、publishWithAuthor、fields といった本体プロパティを持ちます。
{
"sys": {
"id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA",
"type": "ContentType",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"publish": {
"version": 7,
"at": "2026-06-17T03:13:49.973Z",
"firstAt": "2026-06-14T17:04:46.953Z",
"counter": 4,
"by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
},
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-14T17:04:46.846Z",
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-17T03:13:49.973Z",
"version": 8,
"status": "Published"
},
"name": "商品",
"displayField": "productName",
"publishWithAuthor": false,
"fields": [
{ "id": "5n06s7ocmwdi", "name": "商品名", "apiName": "productName", "type": "ShortText", "localized": true, "required": true, "validations": [], "disabled": false },
{ "id": "1gecyz8g4llwf", "name": "価格", "apiName": "price", "type": "Long", "localized": false, "required": false, "validations": [], "disabled": false },
{ "id": "3ow4popgz54zg", "name": "詳細説明", "apiName": "description", "type": "RichText", "localized": true, "required": false, "validations": [], "disabled": false },
{ "id": "2alxdptmdub1s", "name": "代表写真", "apiName": "photo", "type": "Refer", "localized": false, "required": false, "validations": [], "disabled": false, "targetType": "Media" },
{
"id": "2a80lehazfx3t",
"name": "ブランド",
"apiName": "brand",
"type": "Refer",
"localized": false,
"required": false,
"validations": [
{ "referContentType": [ { "sys": { "id": "3trmXRM3RqbgSnifyg7OveRYWnJWEG", "type": "Refer", "targetType": "ContentType" } } ] }
],
"disabled": false,
"targetType": "Content"
}
]
}主なキー:
sys.id: Content Type の一意な識別子です。単一取得・更新・削除パスの{contentTypeId}に入ります。name: Content Type の名前です(例:商品)。displayField: コンテンツスタジオの一覧で各 Content を代表して表示するフィールドのapiNameです(例:productName)。publishWithAuthor: Content 公開時に作成者情報を一緒に含めるかどうかです。デフォルト値はfalseです。fields: この枠組みが定義するフィールドの一覧です。各項目の構造は下記 フィールド で説明します。
photo フィールドは type が Refer で targetType が Media であるため、アップロードしたファイルアセットを指します。brand フィールドは Refer + targetType: Content であり、validations の referContentType によって特定の Content Type(ここでは「ブランド」)の Content のみを参照するよう制限します。
システムプロパティ (sys)
すべての Content Type は、共通のシステムプロパティと Content Type 固有のプロパティを sys オブジェクトに格納します。space、createdBy、updatedBy は Refer の形({ "sys": { "id", "type": "Refer", "targetType" } })で入ります。
| プロパティ | タイプ | 説明 |
|---|---|---|
id | string | リソースの一意な識別子。 |
type | string | リソースの種類。Content Type は常に "ContentType"。 |
space | Refer<Space> | この Content Type が属する Space。 |
createdBy | Refer<User> | 作成したユーザー。 |
createdAt | string (date-time) | 作成日時。 |
updatedBy | Refer<User> | 最後に更新したユーザー。 |
updatedAt | string (date-time) | 最終更新日時。 |
version | integer (≥1) | リソースのバージョン。作成・更新・公開・公開取り消しなど、すべての変更ごとに1ずつ増加します。 |
status | string (enum) | 公開状態。Draft、Changed、Published、Archived のいずれか。 |
publish | object | 公開履歴。下記のキーを参照。 |
publish オブジェクトのキー:
| キー | タイプ | 説明 |
|---|---|---|
version | integer | 最後に公開された時点の sys.version。 |
at | string (date-time) | 最終公開日時。 |
firstAt | string (date-time) | 初回公開日時。公開を取り消しても保持されます。 |
counter | integer | 累計公開回数。 |
by | Refer<User> | 最後に公開したユーザー。 |
公開を取り消す(DELETE .../publish)と、publish から version、at、by が削除され、firstAt、counter のみが残ります。
Content Type の sys には、Content の sys にある contentType(自己参照)プロパティがありません。Content Type 自体が枠組みだからです。archive プロパティもありません。
フィールド
fields は、この Content Type が定義するフィールドの一覧です。各項目は次の構造(FieldDefinition)を持ちます。
| キー | タイプ | 説明 |
|---|---|---|
id | string (1-64) | フィールドの一意な識別子。作成時に自動付与されます。 |
name | string (1-50) | コンテンツスタジオに表示されるフィールド名(例: 商品名)。 |
apiName | string (1-64) | API でこのフィールドを指すキー。パターン ^[a-zA-Z0-9][a-zA-Z0-9-_]*$(英字・数字で始まり、以降は英字・数字・-・_)。 |
type | string (enum) | フィールドのタイプ。下記 フィールドの種類 (type) を参照。 |
localized | boolean | 多言語の値を持てるかどうか。 |
required | boolean | 必須入力かどうか。 |
validations | array | 値に適用するバリデーションルールの一覧。ルールがなければ空配列 []。下記 バリデーション (validations) を参照。 |
disabled | boolean | 無効化されているかどうか。 |
targetType | string (enum) | type が Refer の場合のみ。参照対象が Content か Media か。 |
items | object | type が Array の場合のみ。配列要素の定義(Refer 要素または ShortText 要素)。 |
フィールドの種類 (type)
type は、値が保存・取得される方法を決定します。一部のタイプは検索の動作が異なります。
type | 意味 | 備考 |
|---|---|---|
ShortText | 短い単一行のテキスト。 | 正確なキーワード検索に適しています。 |
LongText | 長い本文テキスト。 | 全文(full-text)類似度検索をサポート。 |
RichText | 書式を持つ本文。 | 検索対象ではなく、書式表現用。 |
Long | 整数。 | 例: 価格 price。 |
Number | 実数(小数を含む)。 | |
Boolean | 真/偽。 | |
Date | 日付・時刻。 | |
Json | 任意の JSON 構造。 | |
Location | 位置(座標)。 | |
Refer | 別のリソースを指す参照。 | targetType で Content または Media を指定。 |
Array | 複数の値を格納する配列。 | items で要素定義を伴う。 |
「商品」の例では、商品名 は ShortText、価格 は Long、詳細説明 は RichText、代表写真 は Refer(targetType: Media)、ブランド は Refer(targetType: Content)です。
バリデーション (validations)
validations は、フィールド値に適用するルールの配列です。各項目は次のキーのいずれかを格納します。
| キー | 形式 | 説明 |
|---|---|---|
size | { "min", "max" } | テキストの長さ、または配列サイズの最小・最大。 |
unique | boolean | 同じ Content Type 内での値の重複を禁止。 |
regexp | { "pattern", "flags" } | 値が正規表現パターンに一致する必要があります。pattern は必須。 |
prohibitRegexp | { "pattern", "flags" } | 値が正規表現パターンに一致する場合は拒否。pattern は必須。 |
in | array | 許可する値の一覧。一覧にある値のみ通過。 |
range | { "min", "max" } | 数値の最小・最大。 |
dateRange | { "min", "max", "after", "before" } | 日付値の許容範囲。 |
mediaMimetypeGroup | array | Refer(Media)フィールドで許可するファイル種別の一覧。下記の enum を参照。 |
mediaImageDimensions | { "width", "height" } | 画像の横・縦ピクセルの制約。 |
mediaFileSize | { "min", "max" } | ファイルサイズ(バイト)の最小・最大。 |
referContentType | array | Refer(Content)フィールドで参照を許可する Content Type の一覧。各項目は Refer<ContentType> の形。 |
message | string | 検証失敗時に表示するカスタムメッセージ。 |
mediaMimetypeGroup に使用できる値(12種): Attachment、Plaintext、Image、Audio、Video、RichText、Presentation、Spreadsheet、PdfDocument、Archive、Code、Markup。
「商品」の例の brand フィールドは、referContentType によって「ブランド」Content Type(sys.id が 3trmXRM3RqbgSnifyg7OveRYWnJWEG)のみを参照するよう制限します。
状態と自動公開
Content Type は作成・更新・部分更新時に自動的に公開されます。この点が Content と異なります。Content は作成後に別途の公開呼び出しがあって初めて配信経路に乗りますが、Content Type は作成レスポンスがただちに status: "Published" で返ります。
status は次の4つのいずれかです。
status | 意味 |
|---|---|
Draft | 公開されていない状態。 |
Changed | 公開されたことがあるが、その後の変更分がまだ公開されていない状態。 |
Published | 公開済みで、未公開の変更分がない状態。 |
Archived | アーカイブされた状態。 |
sys.version はすべての変更で1ずつ増加します。Content Type は更新と公開が一度に発生するため、1回の更新で version が2上がります(更新自体 +1、自動公開 +1)。例の「お知らせ」では、作成直後の version は2(作成 +1、自動公開 +1)で、publish.counter は1です。続いて更新すると version は4になり、publish.counter は2になります。
Content Type が Draft になる唯一の経路は、明示的な公開取り消し(DELETE .../publish)です。公開を取り消すと status が Draft になり、publish オブジェクトから version・at・by が抜け、firstAt・counter のみが残ります。
制約
| 対象 | 制約 |
|---|---|
name(Content Type) | 1-64文字、必須。 |
description | 128文字以下、任意。 |
fields | 作成時 1-80個、更新時 最低1個。 |
name(フィールド) | 1-50文字、必須。 |
apiName(フィールド) | 1-64文字、パターン ^[a-zA-Z0-9][a-zA-Z0-9-_]*$、必須。 |
削除ガード: 削除は次の2つの条件をすべて満たす必要があります。
- この Content Type を使う Content が1つでもあると削除できません(
WGL422010)。先に該当する Content をすべて削除してください。この検査が最初にかかります。 - 公開状態(
Published・Changed)の Content Type はそのまま削除できません(WGL422009)。先に公開を取り消して(DELETE .../publish)Draftにしてから削除してください(Archived状態も削除可能)。
API
以下のすべてのエンドポイントの基準 URL は https://cma.weegloo.com/v1 であり、Authorization ヘッダーに CMA を認証する Bearer トークンが必要です。更新・部分更新・公開・公開取り消しは、楽観的同時実行制御のために X-Weegloo-Version ヘッダー(現在のリソースの sys.version)を一緒に送る必要があります。
関連ドキュメント
- Content モデリング: Content Type をコンテンツスタジオで作成する方法。
- 状態と公開: 公開・バージョンの意味。
