skills/diverta/kuroco-skills/kuroco-content-management

kuroco-content-management

SKILL.md

Kuroco コンテンツ管理パターン

Kuroco HeadlessCMSでのコンテンツ管理(作成・取得・更新・削除)に関するベストプラクティス。

ドキュメント参照: /kuroco-docs スキルを使用してKuroco公式ドキュメントを検索・参照できます。

目次

コンテンツ構造

階層構造

コンテンツ定義(TopicsGroup)
├── カテゴリ(TopicsCategory)
│   └── コンテンツ(Topics)
└── 拡張項目(ext_col_01〜ext_col_XX)

コンテンツ定義の設定

管理画面: [コンテンツ定義] → [新規作成]

項目 説明
グループ名 コンテンツ定義の名前
識別子 ユニークなID(英数字)
本文の入力方法 WYSIWYG、マークダウン、HTML
閲覧制限 全員/グループ制限/カスタム検索
編集制限 全員/グループ制限/カスタム検索
拡張項目 カスタムフィールド(最大99個)

拡張項目(カスタムフィールド)

タイプ 説明 APIレスポンス例
テキスト 1行テキスト "ext_col_01": "値"
テキストエリア 複数行テキスト "ext_col_02": "複数行\nテキスト"
WYSIWYG リッチテキスト "ext_col_03": "<p>HTML</p>"
数値 整数・小数 "ext_col_04": 100
日付 日付選択 "ext_col_05": "2024-01-01"
選択(単一) ラジオボタン "ext_col_06": "選択肢1"
選択(複数) チェックボックス "ext_col_07": ["選択肢1", "選択肢2"]
ファイル/画像 アップロード "ext_col_08": { "id": "xxx", "url": "https://...", "desc": "" }
リンク URLリンク "ext_col_10": { "url": "https://...", "title": "リンク名" }
関連コンテンツ 他コンテンツ参照 "ext_col_11": { "topics_id": 123, "subject": "タイトル" }

Topics API オペレーション

オペレーション 説明 メソッド パス例
list 一覧取得 GET /news
details 詳細取得 GET /newsdetail/{topics_id}
insert 新規追加 POST /news/insert
update 更新 POST /news/update/{topics_id}
delete 削除 POST /news/delete/{topics_id}
bulk_upsert 一括更新 POST /news/bulk

コンテンツCRUD操作

一覧取得レスポンス

{
  "list": [
    {
      "topics_id": 1,
      "subject": "タイトル",
      "contents": "本文(HTML)",
      "ymd": "2024-01-01",
      "topics_flg": 1,
      "category_id": 1,
      "ext_col_01": "拡張項目値",
      "tag": ["タグ1", "タグ2"]
    }
  ],
  "pageInfo": {
    "totalCnt": 100,
    "perPage": 10,
    "totalPageCnt": 10,
    "pageNo": 1
  }
}

コンテンツ作成

const response = await fetch('/rcms-api/1/news/insert', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    subject: 'タイトル',
    contents: '<p>本文</p>',
    ymd: '2024-01-01',
    topics_flg: 1,           // 1: 公開, 0: 非公開
    category_id: 1,
    open_ymd: '2024-12-01',  // 予約公開開始日
    close_ymd: '2024-12-31', // 公開終了日
    tag: ['タグ1', 'タグ2'],
    ext_col_01: 'カスタム値'
  })
})

コンテンツ更新

const response = await fetch(`/rcms-api/1/news/update/${topicsId}`, {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    subject: '更新タイトル',
    contents: '更新本文'
    // 更新したいフィールドのみ送信可能
  })
})

コンテンツ削除

await fetch(`/rcms-api/1/news/delete/${topicsId}`, {
  method: 'POST',
  credentials: 'include'
})

フィルタークエリ

基本構文: filter={field} {operator} {value}

演算子
=, != filter=category_id = 1
>, >=, <, <= filter=ymd >= '2024-01-01'
contains filter=subject contains 'キーワード'
in, not_in filter=category_id in [1, 2, 3]

複合条件: filter=(category_id = 1 or category_id = 2) and topics_flg = 1

ソート: order_by=ymd desc

詳細な使い方: references/filter-query.md を参照

ファイル・CSV操作

ファイルアップロード

// 1. ファイルアップロード
const formData = new FormData()
formData.append('file', file)
const result = await fetch('/rcms-api/1/files/upload', {
  method: 'POST',
  credentials: 'include',
  body: formData
})
const { file_id } = await result.json()

// 2. コンテンツに紐付け
await fetch('/rcms-api/1/news/insert', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    subject: 'タイトル',
    ext_col_02: { file_id, desc: '説明' }
  })
})

詳細(一括更新、カテゴリ、タグ、閲覧制限): references/file-operations.md を参照

管理API(mng_api)によるコンテンツ操作

/kuroco-mng-api-browser スキルを使うと、管理画面と同等のコンテンツ操作をブラウザ経由で実行できます。フロントエンドAPI(rcms-api)との違いに注意してください。

フロントエンドAPI vs 管理API

項目 フロントエンドAPI(rcms-api) 管理API(mng_api)
対象 エンドユーザー 管理者・運用者
認証 StaticToken / DynamicToken / Cookie 管理画面セッションCookie
エンドポイント /rcms-api/{api_id}/{path} /direct/rcms_api/mng_api/
利用場面 フロントエンド実装 データ一括操作、構造確認、設定変更

コンテンツ定義一覧の取得

// mng_api: コンテンツ定義(TopicsGroup)一覧(columnsで必要カラムのみ取得)
const r = await fetch('/direct/rcms_api/mng_api/?mt=topics&ct=topics_group_list&columns=topics_group_id,group_nm', {credentials:'include'});
const data = await r.json();
JSON.stringify(data.topics_group_list?.map(g => ({id: g.topics_group_id, name: g.group_nm})));

コンテンツ一覧の取得

// mng_api: 特定コンテンツ定義のコンテンツ一覧(columnsで必要カラムのみ取得)
const r = await fetch('/direct/rcms_api/mng_api/?mt=topics&ct=topics_list&topics_group_id[]=1&cnt=10&columns=topics_id,subject,ymd', {credentials:'include'});
const data = await r.json();
JSON.stringify(data.topics_list?.map(t => ({id: t.topics_id, subject: t.subject, ymd: t.ymd})));

コンテンツの作成

// mng_api: コンテンツ作成(※実行前にユーザー確認必須)
const r = await fetch('/direct/rcms_api/mng_api/?mt=topics&ct=topics_edit', {
  method: 'POST',
  credentials: 'include',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    subject: 'タイトル',
    contents: '本文',
    topics_group_id: 1,
    topics_flg: 1
  })
});
const data = await r.json();
JSON.stringify({id: data.topics_id});

活用シーン

  • サイト構造の把握: コンテンツ定義一覧・拡張項目の確認
  • データの一括確認・修正: 管理画面GUIを経由せず効率的にデータ操作
  • スキーマ確認: MODE=schema&mt=topics&ct=topics_list でフィールド定義を取得

注意: insert/update/deleteは必ずユーザーに確認してから実行すること。詳細は /kuroco-mng-api-browser スキル参照。

ベストプラクティス

  • キャッシュ活用: エンドポイント設定で キャッシュ: 86400(1日)を設定。更新時は自動クリア
  • ページネーション: pageIDcnt パラメータで分割取得

関連スキル

  • /kuroco-api-integration - API設計・認証パターン
  • /kuroco-mng-api-browser - 管理APIによるコンテンツ操作(ブラウザ経由)
  • /kuroco-smarty-plugins - Smartyテンプレートでのコンテンツ操作(assign_topics_list 等)
  • /kuroco-webhook-processing - バッチ処理でのコンテンツ自動処理

関連ドキュメント

  • docs/tutorials/adding-a-topics.md - コンテンツ定義作成
  • docs/tutorials/bulk-upload-in-csv.md - CSVアップロード
  • docs/management/content-structure-topics.md - コンテンツ構造
  • docs/reference/filter-query.md - フィルタークエリ詳細
Weekly Installs
6
GitHub Stars
1
First Seen
Jan 28, 2026
Installed on
claude-code6
opencode4
antigravity4
codex4
gemini-cli4
cursor4