記事を対話形式で公開する
supacms-publish スキルを使って Claude Code と対話しながら記事を公開する
Claude Code の supacms-publish スキルを使う方法を推奨します。 スキルを有効にすると、Claude がフィールド定義の確認から公開まで対話形式で案内してくれます。
Claude Code スキルで公開する(推奨)
1. スキルをインストールする
プロジェクトルートで以下を実行します。
supacms install-skill supacms-publishスキルファイルが .claude/skills/supacms-publish/SKILL.md に保存されます。Claude Code はプロジェクトルートの .claude/skills/ を自動で読み込むため、追加の設定は不要です。
スキルを最新版に更新する場合も同じコマンドを実行してください。
2. 使い方
APIキーを環境変数にセットしてから Claude Code を起動します。
export SUPACMS_API_KEY=sk-...チャット欄でスキルを呼び出します。
/supacms-publishまたは自然文でも起動します。
supa-media プロジェクトの article コンテンツタイプで記事を公開したいAPIキーは各コマンドの
--api-keyで渡せますが、SUPACMS_API_KEY環境変数にセットしておくとより安全です。
スキルが行うこと
Claude は以下の順番で自動的に進めます。
supacms project infoでプロジェクトと API ベース URL を確認supacms field listでフィールド定義を取得media型があればsupacms media uploadでアップロード → ID を取得フィールドを 1つずつ 質問して値を収集
supacms entry createでエントリを作成(draft)内容を確認してから
supacms entry publishで公開
AI エージェント向けのより詳細な設定は AI エージェントからの操作 も参照してください。
手動で公開する
スキルを使わずにコマンドを直接実行する場合の手順です。
事前準備
APIキーとプロジェクトIDが必要です。まだ取得していない場合は CLI の使いかた を参照してください。
1. プロジェクト情報を確認する
supacms project info --project <your-project-slug> --api-key <your-api-key> --pretty{
"slug": "supa-media",
"name": "Supa Media",
"apiBaseUrl": "https://cms.supa.ai"
}2. フィールド定義を確認する
media 型フィールドがある場合は必ず先に確認してください。 後続の手順が変わります。
supacms field list \
--project <your-project-slug> \
--content-type <contentTypeApiId> \
--api-key <your-api-key> \
--pretty3. media 型フィールドがある場合はアップロードする
supacms media upload \
--project <your-project-slug> \
--file ./cover.webp \
--alt "カバー画像" \
--api-key <your-api-key> \
--pretty返ってきた id をエントリ作成時に使います。
4. エントリを作成する
supacms entry create \
--project <your-project-slug> \
--content-type <contentTypeApiId> \
--data '{
"title": "記事タイトル",
"body": "本文テキスト",
"coverImage": "01abc123..."
}' \
--api-key <your-api-key> \
--prettymedia 型フィールドにはメディアの id を文字列として渡します。
5. 内容を確認して公開する
supacms entry publish \
--project <your-project-slug> \
--content-type <contentTypeApiId> \
--id <entryId> \
--api-key <your-api-key>公開後に entry update で内容を直した場合も、配信へ反映するには entry publish をもう一度実行します(publishedAt は初回公開時の値のまま)。
公開日時を未来の ISO 8601 日時にして予約公開する場合は --published-at を付けます。渡せるのは未来の日時だけです。すでに公開済みのエントリの日時を過去にさかのぼって直す場合は entry system を使います。
supacms entry publish \
--project <your-project-slug> \
--content-type <contentTypeApiId> \
--id <entryId> \
--published-at 2026-12-01T09:00:00+09:00 \
--api-key <your-api-key>supacms entry system \
--project <your-project-slug> \
--content-type <contentTypeApiId> \
--id <entryId> \
--published-at 2018-03-01T00:00:00.000Z \
--api-key <your-api-key>公開後に取り消す場合は entry unpublish を使います。
フィールド型ごとのデータ形式
type |
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 任意の JSON 値 |
|
|
|
|
|
|
field listで確認した型に基づいてデータを組み立ててください。型を間違えると 422 バリデーションエラーになります。
rich_text は Tiptap JSON で渡す
rich_text は管理画面のリッチテキストエディタが扱う Tiptap の JSON ドキュメントを保存します。Markdown やプレーンテキストの文字列を渡すと 422 バリデーションエラーになります。
{
"type": "doc",
"content": [
{
"type": "heading",
"attrs": { "level": 2 },
"content": [{ "type": "text", "text": "見出し" }]
},
{ "type": "paragraph", "content": [{ "type": "text", "text": "本文テキスト" }] }
]
}JSON が長くなるため、--data に直接書くのではなく --file でファイルから渡すことを推奨します。
テキストの一部を装飾する場合は、テキストノードの marks に次のいずれかを付けます。bold(太字)/ italic(斜体)/ underline(下線)/ strike(取り消し線)/ highlight(ハイライト)/ code(インラインコード)/ link(attrs.href)。
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "通常の文字と" },
{ "type": "text", "text": "強調", "marks": [{ "type": "bold" }, { "type": "highlight" }] }
]
}HTML から変換したい場合は、MCP エンドポイントの html_to_tiptap ツールが使えます。
検証が入る前に文字列のまま保存された
rich_textの値が残っている場合、管理画面ではエディタの代わりに警告と生の値が表示され、本文を編集できません。CLI または API から正しい Tiptap JSON で上書きすると復旧します。値を送っていないフィールドは検証の対象外なので、その間も他のフィールドだけを更新することは可能です。