Content Type

Content Type はコンテンツが従うひな形(スキーマ)です。どのフィールドを持ち、各フィールドがどのタイプ・多言語対応の有無・必須の有無・バリデーションルールを持つかを定義します。アパレルショッピングモールの「商品」を例にとると、商品名・価格・詳細説明・代表写真といった項目構成を Content Type 「商品」1つが規定し、実際の個々の商品はこのひな形に従う Content として作成されます。

CMA において Content TypeSpace の下位リソースであり、パスは /spaces/{spaceId}/content-types を基準とします。作成・更新・公開取り消しといった管理操作は CMA で実行し、公開されたスナップショットは CDA へ配信されます。ただし Content Type は作成・更新時に自動的に公開されるため、Content とは異なり、別途の公開呼び出しなしにただちに Published 状態になります(下記 状態と自動公開 を参照)。

リソース構造

以下は Content Type 「商品」の単一取得レスポンスです。sys(システムプロパティ)とともに、namedisplayFieldpublishWithAuthorfields といった本体プロパティを持ちます。

{
  "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 を公開する際、公開スナップショットに作成者情報(sys.createdBysys.updatedBy)を一緒に格納するかどうかです。デフォルト値は false で、この場合 CDA/ACDA へ配信されるスナップショットには作成者が格納されません。この値は公開時点で適用され、遡及しないため、後で true に変更しても、すでに公開された Content は再度公開しなければ作成者が埋め込まれません。管理 API(CMA/ACMA)が扱う下書きには、この設定とは無関係に sys.createdBy があります。配信レスポンスに作成者(byline)を表示したり、権限ルールの createdBy フィルター(:self を含む)を CDA/ACDA で判定したりするには、この値を true にしておく必要があります(SpaceRoleServiceUserRolecreatedBy フィルターの説明を参照)。
  • fields: このひな形が定義するフィールドの一覧です。各項目の構造は下記 フィールド で説明します。

photo フィールドは typeRefertargetTypeMedia であるため、アップロードしたファイルアセットを指します。brand フィールドは Refer + targetType: Content であり、validationsreferContentType によって特定の Content Type(ここでは「ブランド」)の Content のみを参照するよう制限します。

システムプロパティ (sys)

すべての Content Type は、共通のシステムプロパティと Content Type 固有のプロパティを sys オブジェクトに格納します。spacecreatedByupdatedByRefer の形({ "sys": { "id", "type": "Refer", "targetType" } })で入ります。

プロパティタイプ説明
idstringリソースの一意な識別子。
typestringリソースの種類。Content Type は常に "ContentType"
spaceRefer<Space>この Content Type が属する Space
createdByRefer<User>作成したユーザー。
createdAtstring (date-time)作成日時。
updatedByRefer<User>最後に更新したユーザー。
updatedAtstring (date-time)最終更新日時。
versioninteger (≥1)リソースのバージョン。作成・更新・公開・公開取り消しなど、すべての変更ごとに1ずつ増加します。
statusstring (enum)公開状態。DraftChangedPublishedArchived のいずれか。
publishobject公開履歴。下記のキーを参照。

publish オブジェクトのキー:

キータイプ説明
versioninteger最後に公開された時点の sys.version
atstring (date-time)最終公開日時。
firstAtstring (date-time)初回公開日時。公開を取り消しても保持されます。
counterinteger累計公開回数。
byRefer<User>最後に公開したユーザー。

公開を取り消す(DELETE .../publish)と、publish から versionatby が削除され、firstAtcounter のみが残ります。

Content Typesys には、Contentsys にある contentType(自己参照)プロパティがありません。Content Type 自体がひな形だからです。archive プロパティもありません。

フィールド

fields は、この Content Type が定義するフィールドの一覧です。各項目は次の構造(FieldDefinition)を持ちます。

キータイプ説明
idstring (1-64)フィールドの一意な識別子。作成時に自動付与されます。
namestring (1-50)コンテンツスタジオに表示されるフィールド名(例: 商品名)。
apiNamestring (1-64)API でこのフィールドを指すキー。パターン ^[a-zA-Z0-9][a-zA-Z0-9-_]*$(英字・数字で始まり、以降は英字・数字・-_)。
typestring (enum)フィールドのタイプ。下記 フィールドの種類 (type) を参照。
localizedboolean多言語の値を持てるかどうか。
requiredboolean必須入力かどうか。
validationsarray値に適用するバリデーションルールの一覧。ルールがなければ空配列 []。下記 バリデーション (validations) を参照。
disabledboolean無効化されているかどうか。
targetTypestring (enum)typeRefer の場合のみ。参照対象が ContentMedia か。
itemsobjecttypeArray の場合のみ。配列要素の定義(Refer 要素または ShortText 要素)。

フィールドの種類 (type)

type は、値が保存・取得される方法を決定します。一部のタイプは検索の動作が異なります。

type意味値の制限備考
ShortText短い単一行のテキスト。64文字正確なキーワード検索に適しています。
LongText長い本文テキスト。5,120文字全文(full-text)類似度検索をサポート。
RichText書式を持つ本文。204,800文字検索対象ではなく、書式表現用。
Long整数。例: 価格 price
Number実数(小数を含む)。有限な値のみ無限大と NaN は受け付けません。
Boolean真/偽。
Date日付・時刻。
Json任意の JSON 構造。シリアライズして 5,120文字構造の中の数値も有限である必要があります。
Location位置(座標)。latitude -9090、longitude -180180
Refer別のリソースを指す参照。targetTypeContent または Media を指定。
Array複数の値を格納する配列。要素64個items で要素定義を伴う。

「商品」の例では、商品名ShortText価格Long詳細説明RichText代表写真Refer(targetType: Media)、ブランドRefer(targetType: Content)です。

値の制限はタイプが定めるプラットフォーム上限であり、Content Type を作成するときではなく、Content に値を書き込むときに検査されます。validationssize でこれより大きい上限を指定しても、プラットフォーム上限が先にかかります。Array の要素には要素タイプの同じ制限がそのまま適用されるため、items.typeShortText の配列は、要素の1つ1つが64文字を超えられません。制限を超えた値で Content を書き込むと拒否され、そのコードは Content のエラー にあります。

バリデーション (validations)

validations は、フィールド値に適用するルールの配列です。各項目は次のキーのいずれかを格納します。

キー形式説明
size{ "min", "max" }テキストの長さ、または配列サイズの最小・最大。
uniqueboolean同じ Content Type 内での値の重複を禁止。
regexp{ "pattern", "flags" }値が正規表現パターンに一致する必要があります。pattern は必須。
prohibitRegexp{ "pattern", "flags" }値が正規表現パターンに一致する場合は拒否。pattern は必須。
inarray許可する値の一覧。一覧にある値のみ通過。
range{ "min", "max" }数値の最小・最大。
dateRange{ "min", "max", "after", "before" }日付値の許容範囲。
mediaMimetypeGrouparrayRefer(Media)フィールドで許可するファイル種別の一覧。下記の enum を参照。
mediaImageDimensions{ "width", "height" }画像の横・縦ピクセルの制約。
mediaFileSize{ "min", "max" }ファイルサイズ(バイト)の最小・最大。
referContentTypearrayRefer(Content)フィールドで参照を許可する Content Type の一覧。各項目は Refer<ContentType> の形。
messagestring検証失敗時に表示するカスタムメッセージ。

mediaMimetypeGroup に使用できる値(12種): AttachmentPlaintextImageAudioVideoRichTextPresentationSpreadsheetPdfDocumentArchiveCodeMarkup

「商品」の例の brand フィールドは、referContentType によって「ブランド」Content Type(sys.id3trmXRM3RqbgSnifyg7OveRYWnJWEG)のみを参照するよう制限します。

状態と自動公開

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 TypeDraft になる唯一の経路は、明示的な公開取り消し(DELETE .../publish)です。公開を取り消すと statusDraft になり、publish オブジェクトから versionatby が抜け、firstAtcounter のみが残ります。

制約

対象制約
name(Content Type)1-64文字、必須。
description128文字以下、任意。
fields1-80個。作成・更新・部分更新のいずれもこの範囲を守る必要があります。
name(フィールド)1-50文字、必須。
apiName(フィールド)1-64文字、パターン ^[a-zA-Z0-9][a-zA-Z0-9-_]*$、必須。

削除ガード: 削除は次の2つの条件をすべて満たす必要があります。

  • この Content Type を使う Content が1つでもあると削除できません。先に該当する Content をすべて削除してください。この検査が最初にかかります。
  • 公開状態(PublishedChanged)の Content Type はそのまま削除できません。先に公開を取り消して(DELETE .../publish)Draft にしてから削除してください(Archived 状態も削除可能)。

エラー

Content Type を扱うときに出会うコードです。すべてのリソースに共通するコードは 共通エラー を参照してください。

コード条件
WGL422010この Content Type を使う Content がまだ残っているのに、Content Type を削除しようとしました。公開取り消しも同じ検査を受けるため、Content が残っていると公開取り消しの段階でこのコードで拒否されます。
WGL422009公開状態(PublishedChanged)の Content Type を、公開を取り消さずに削除しようとしました。
WGL422006公開状態ではない Content Type の公開を取り消そうとしました。
WGL400002fields が許可された個数を超えています。作成・更新・部分更新のいずれもこの検査を受けます。
WGL400045displayField に記載した値が、その Content Typefields にある apiName のどれにも存在しません。
WGL400046対になるプロパティを一緒に記載しなければならないフィールドに、そのプロパティがありません。Array には items が、Refer には targetType が必要です。
WGL400040同じ apiName を持つフィールドが2つ以上あります。

API

以下のすべてのエンドポイントの基準 URL は https://cma.weegloo.com/v1 であり、Authorization ヘッダーに CMA を認証する Bearer トークンが必要です。更新・部分更新・公開・公開取り消しは、楽観的同時実行制御のために X-Weegloo-Version ヘッダー(現在のリソースの sys.version)を一緒に送る必要があります。