bulk-cms-update について
Webflow CMS アイテムを一括作成・更新するワークフロースキルです。スキーマに基づく検証、アイテムごとの承認、バッチ処理、ロールバック用データの保存に対応します。
主な機能
- 01フィールド、必須値、制約の検証
- 02重複 slug と参照先の確認
- 03アイテムをプレビューして個別承認
- 041 バッチ最大 50 件の処理
- 05更新前データを保存してロールバックに備える
活用シーン
- 01CMS アイテムの一括取り込みと検証
- 02選択した既存アイテムの更新
- 03承認後の公開、または下書き保存
MCP 対応
サイト、コレクション、スキーマ、既存アイテムの確認と、CMS アイテムの作成・更新・公開に Webflow MCP ツールを使用するよう定めています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ webflow/ webflow-skills --skill bulk-cms-updateインストール後、Claude Code で/bulk-cms-updateを入力して読み込まれたか確認します。
詳細
CMS の一括更新
包括的な検証、きめ細かな承認、ロールバック機能を備えて、複数の CMS アイテムを作成または更新します。
重要な注意事項
すべての操作で必ず Webflow MCP ツールを使用してください。
- 利用可能なサイトを一覧表示するには、Webflow MCP の
data_sites_toolでアクションlist_sitesを使用します - CMS コレクションを一覧表示するには、Webflow MCP の
data_cms_toolでアクションget_collection_listを使用します - コレクションのスキーマを取得するには、Webflow MCP の
data_cms_toolでアクションget_collection_detailsを使用します - 既存のアイテムを取得するには、Webflow MCP の
data_cms_toolでアクションlist_collection_itemsを使用します - アイテムを作成するには(下書きまたは公開済み)、Webflow MCP の
data_cms_toolでアクションcreate_collection_itemsを使用します - アイテムを更新するには(下書きまたは公開済み)、Webflow MCP の
data_cms_toolでアクションupdate_collection_itemsを使用します - 下書きアイテムを公開するには、Webflow MCP の
data_cms_toolでアクションpublish_collection_itemsを使用します - 作業を始める前にベストプラクティスを確認するには、Webflow MCP の
webflow_guide_toolを使用します - Webflow の操作に、ほかのツールや方法は使用しないでください
- すべてのツール呼び出しには、必須の
contextパラメーター(第三者の視点で15~25語)を含める必要があります
手順
フェーズ 1:サイトとコレクションの選択
- サイトを取得する:対象のサイトを特定します。ユーザーがサイト ID を指定していない場合は、確認してください。
- コレクションを一覧表示する:Webflow MCP の
data_cms_toolでアクションget_collection_listを使用して、利用可能なコレクションを表示します - ユーザーにコレクションを選択してもらう:作業対象のコレクションをユーザーに指定してもらいます
- コレクションのスキーマを取得する:Webflow MCP の
data_cms_toolでアクションget_collection_detailsを使用して、以下を取得します- すべてのフィールド定義と型
- 必須フィールドと任意フィールド
- フィールドの検証ルール(最大長、パターンなど)
- 参照フィールドの参照先
フェーズ 2:データの収集と解析
-
操作の種類を確認する:ユーザーが希望する操作を明確にします
- 新しいアイテムのみ作成
- 既存のアイテムのみ更新
- 新規作成と更新の両方
-
ユーザーからデータを受け取る:以下のような柔軟な形式でデータを受け付けます
- 構造化形式(JSON 風)
- 自然言語による説明
- CSV 形式のデータ
- 箇条書き
-
解析して正規化する:ユーザーデータを構造化形式に変換します
-
既存のアイテムを取得する(更新が含まれる場合):Webflow MCP の
data_cms_toolでアクションlist_collection_itemsを使用して、現在のデータを取得します重要 — アイテムを効率よく検索する:
- 名前で特定のアイテムを検索する場合は、必ず
nameパラメーターで絞り込みます(例:name: "Pikachu") - スラッグで検索する場合は、
slugパラメーターで絞り込みます - まずすべてのアイテムを取得してから結果を検索する方法は絶対に使わないでください。API 呼び出しとトークンの無駄になります
- すべてのアイテムを表示する必要がある場合、または対象のアイテムが特定できていない場合に限り、全件を取得します
- 名前で特定のアイテムを検索する場合は、必ず
フェーズ 3:検証と分析
- すべてのデータを検証する:
- フィールド名:すべてのフィールド名がスキーマに存在することを確認します
- 必須フィールド:すべての必須フィールドが指定されていることを確認します
- フィールドの型:データの型がスキーマと一致していることを検証します
- 制約:最大長、パターン、許容値を確認します
- スラッグ:スラッグが一意かつ有効であることを確認します
- 参照フィールド:参照先のアイテムが存在することを確認します
- 競合を検出する:
- スラッグの重複(バッチ内または既存アイテムとの重複)
- 必須フィールドの不足
- 無効なデータ型
- 制約違反
- 影響を分析する:
- 新規作成と更新の件数を数えます
- 変更されるフィールドを特定します
- バッチサイズと処理時間を算出します
フェーズ 4:プレビューと詳細な承認
- 詳細なプレビューを生成する:
- 各項目の検証ステータスを表示する
- 問題がある場合は警告を表示する
- 更新の場合は差分(古い値 → 新しい値)を表示する
- 新規作成の場合はすべてのフィールド値を表示する
- 選択して承認できるよう、各項目に番号を付ける
- 詳細な承認オプションを提示する:
- 処理する項目をユーザーが選択できるようにする
- オプション:「すべて」、「なし」、個別の番号、番号範囲
- 処理時間の見積もりを表示する
- 公開オプションを提示する:
- すぐに公開する(
*_liveエンドポイントを使用) - 下書きとして作成する(通常のエンドポイントを使用し、手動で公開)
- すぐに公開する(
フェーズ 5:実行とレポート
- ロールバックデータを保存する:変更を加える前に、以下を保存します:
- 更新するすべての項目の元の値
- タイムスタンプ
- 操作の詳細
- バッチで処理する:
- 1 バッチあたり最大 50 項目
- 進捗インジケーターを表示する
- レート制限に適切に対処する
- 操作を実行する:ユーザーの選択に基づいて適切な Webflow MCP ツールを使用する
- エラーに適切に対処する:
- 個々の項目で失敗が発生しても処理を続行する
- 成功と失敗を別々に記録する
- 詳細なエラーメッセージを表示する
- 包括的なレポートを生成する:
- 概要(成功数/失敗数)
- 項目ごとの詳細な結果
- 作成/更新された項目の ID
- 失敗した項目のエラー詳細
- ロールバックのオプションを提示する:必要に応じて変更を元に戻せるようにする
例
ユーザーのプロンプト:
Add 2 blog posts about Webflow MCP and update the first blog to say "Top" instead of "Best"
ステップ 1:サイトとコレクションの選択
📋 Bulk CMS Update Setup
Available Sites:
1. MCP Demo#1
2. MCP Demo#2
3. MCP Demo#3
Please select a site (1-3):
ユーザーが選択:1
Available Collections in MCP Demo#1:
└── Blog Posts (9 items)
Fields: name, slug, post-body, post-summary, main-image, thumbnail-image, featured, color
Proceed with Blog Posts collection? (yes/no)
ユーザーが確認:はい
ステップ 2:データ収集
🔍 Collection Schema: Blog Posts
Required Fields:
- name (PlainText, max 256 chars)
- slug (PlainText, max 256 chars, alphanumeric only)
Optional Fields:
- post-body (RichText)
- post-summary (PlainText)
- main-image (Image)
- thumbnail-image (Image)
- featured (Switch, true/false)
- color (Color, hex format)
I'll parse your request:
- Create 2 new posts about Webflow MCP
- Update first post: "Best" → "Top"
Generating items...
ステップ 3:検証とプレビュー
📋 Preview: Bulk CMS Update
Collection: Blog Posts
Operations: Create 2 items + Update 1 item
---
### 🆕 Items to Create (2)
[1] ✓ NEW POST
name: "Webflow MCP: The Future of Web Development"
slug: "webflow-mcp-future-web-development"
post-summary: "Discover how Webflow MCP is revolutionizing..."
post-body: "<h1>The Future is Here</h1><p>..."
featured: true
color: "#9B59B6"
✅ All validations passed
[2] ✓ NEW POST
name: "Why Webflow MCP Will Transform Your Workflow in 2026"
slug: "webflow-mcp-transform-workflow-2026"
post-summary: "Learn how Webflow MCP's integration..."
post-body: "<h1>Transform Your Workflow</h1><p>..."
featured: true
color: "#3498DB"
✅ All validations passed
---
### ✏️ Items to Update (1)
[3] ✓ UPDATE EXISTING
Item ID: 69615f84fc6ce1aa444d24d5
Slug: why-webflow-is-best-2026-ai
Changes:
name: "Why Webflow is the Best Choice for 2026" → "Why Webflow is the Top Choice for 2026"
✅ All validations passed
---
**Summary:**
- ✅ 2 items will be created
- ✅ 1 item will be updated
- ⚠️ 0 warnings
- ❌ 0 errors
**Publish Options:**
1. Publish immediately (recommended)
2. Save as drafts
Which items would you like to process?
- Type "all" to process all 3 items
- Type numbers to skip (e.g., "2" to skip item 2)
- Type "none" to cancel
Select publish option (1/2): _
Select items: _
ユーザーが選択:1, すべて
⚠️ You're about to:
- Create 2 new blog posts (published live)
- Update 1 existing blog post (changes published live)
Type "confirm" to proceed.
ユーザーが確認:確認
ステップ 4:実行と結果
🔄 Processing bulk update...
Creating items: ██████████ 100% (2/2)
Updating items: ██████████ 100% (1/1)
✅ Bulk CMS Update Complete!
---
### 🆕 Created Items (2)
✓ [1] "Webflow MCP: The Future of Web Development"
ID: 6961640c66de07bed9aacf3e
Slug: webflow-mcp-future-web-development
Published: Jan 9, 2026, 8:24 PM
✓ [2] "Why Webflow MCP Will Transform Your Workflow in 2026"
ID: 6961640c66de07bed9aacf41
Slug: webflow-mcp-transform-workflow-2026
Published: Jan 9, 2026, 8:24 PM
---
### ✏️ Updated Items (1)
✓ [3] "Why Webflow is the Top Choice for 2026"
ID: 69615f84fc6ce1aa444d24d5
Changed: title updated
Published: Jan 9, 2026, 8:24 PM
---
**Summary:**
- ✅ 2 items created successfully
- ✅ 1 item updated successfully
- ❌ 0 failures
- ⏱️ Completed in 3.2 seconds
**Total Items:** 11 (was 9)
📋 Rollback Available:
Last update: 3 items modified just now
Type "undo" within 5 minutes to revert all changes
別の例:検証警告がある場合
📋 Preview: Bulk CMS Update
[1] ⚠️ NEW POST
name: "Test Post"
slug: "test"
post-summary: "Hi"
⚠️ Warning: post-summary too short (< 20 chars) - may affect SEO
⚠️ Warning: slug too generic - consider more descriptive slug
⚠️ Warning: missing post-body - content will be empty
✅ Required fields present (can proceed)
[2] ❌ NEW POST
name: "Another Post!!!"
slug: "another post"
❌ Error: slug contains spaces (must be alphanumeric with hyphens only)
❌ Error: name contains special characters not allowed
🔴 Cannot proceed - fix errors first
---
**Summary:**
- ✅ 1 item can be created (with warnings)
- ❌ 1 item has errors (cannot create)
Fix item 2 or skip it? (fix/skip)
ガイドライン
フェーズ 1:重要な要件
サイトとコレクションの選択:
data_sites_toolをlist_sitesアクションとともに使用し、必ず実際のサイト一覧を取得する- サイト ID を決めつけない
- コレクション名と項目数を表示する
- データを受け付ける前にフィールドスキーマを表示する
- ユーザーにコレクションの選択を確認する
フェーズ 2:データの解析
柔軟な入力形式: 複数の形式のデータを受け付けます:
- 構造化形式(JSON 形式など):
CREATE:
- name: "Post Title"
slug: "post-slug"
featured: true
- 自然言語:
"Add a blog post called 'Getting Started' with slug 'getting-started'"
- CSV 形式:
name,slug,featured
"Post 1","post-1",true
"Post 2","post-2",false
- 箇条書き:
- Post 1: "Title" (slug: title-slug)
- Post 2: "Another" (slug: another-slug)
解析ルール:
- 形式の違いに柔軟に対応する
- 不足している任意フィールドを推測する
- 曖昧な場合は確認を求める
- 必須フィールドの値を決めつけない
効率的な項目検索: 更新対象の既存項目を取得する際は、フィルターパラメーターを使用して API 呼び出しを最小限に抑えます:
# Good - Filter by name when you know the item name
data_cms_tool(action: "list_collection_items", collection_id, name: "Pikachu")
# Good - Filter by slug when you know the slug
data_cms_tool(action: "list_collection_items", collection_id, slug: "pikachu")
# Bad - Fetching all items then searching through results
data_cms_tool(action: "list_collection_items", collection_id) # Returns 100 items
# Then manually searching for "Pikachu" in results...
- 特定の項目を検索する際は、必ず
nameまたはslugパラメーターを使用する - これにより、API 呼び出し、レスポンスサイズ、トークンの使用量を削減できる
- すべての項目を表示する場合、または対象が不明な場合にのみ、フィルターなしの一覧を取得する
フェーズ 3:検証ルール
フィールド名の検証:
- すべてのフィールド名がスキーマに存在することを確認します
- 大文字と小文字を区別して照合します
- タイプミスの修正候補を提示します
- 例:「autor」→「author」のことですか?
必須フィールド:
- Webflow CMS では
nameとslugが常に必須です - スキーマからコレクション固有の必須フィールドを確認します
- 不足している必須フィールドをすべて明確に一覧表示します
- 必須フィールドが不足している場合は続行できません
フィールド型の検証:
PlainText:
- 最大長の制約を確認します
- 指定されている場合はパターンを検証します
- HTML は使用できません
RichText:
- 有効な HTML である必要があります
- 閉じられていないタグがないか確認します
- 一般的な HTML 要素を許可します
Image/File:
- ファイル ID または URL を受け付けます
- 可能な場合はファイルの存在を検証します
- 代替テキストは任意です
Switch(Boolean):
- true/false、yes/no、1/0 を受け付けます
- ブール値に正規化します
Color:
- 16 進数形式(#RRGGBB)である必要があります
- 16 進数文字を検証します
- 例:#FF5733 ✓、red ✗
Reference フィールド:
- 既存のアイテム ID を参照する必要があります
- 参照先のアイテムが存在することを検証します
- わかりやすいように、参照先のアイテム名を表示します
スラッグの検証:
- 重要:英数字とハイフンのみを使用する必要があります
- 空白、アンダースコア、特殊文字は使用できません
- 最大 256 文字です
- 一意である必要があります(既存データとバッチ内の両方を確認します)
- スラッグがない場合は、タイトルから候補を自動提案します
- 例:
- ❌ "My Post!" → ⚠️ 特殊文字が含まれています
- ✅ "my-post" → 有効です
制約の検証:
- 最大長:上限に近づいた場合は警告し、超過した場合はエラーにします
- パターン:スキーマの正規表現パターンをテストします
- 許可される値:列挙された選択肢と照合します
フェーズ 4:プレビューと承認
プレビュー形式:
作成操作の場合:
[1] ✓ NEW POST
field1: "value1"
field2: "value2"
field3: "value3"
✅ All validations passed
更新操作の場合:
[2] ✓ UPDATE EXISTING
Item ID: xxx
Slug: existing-slug
Changes:
field1: "old value" → "new value"
field2: (no change)
field3: "old" → "new"
✅ All validations passed
警告があるアイテムの場合:
[3] ⚠️ NEW POST
name: "Title"
⚠️ Warning: Missing optional field 'post-body'
⚠️ Warning: Slug may be too generic
✅ Can proceed (warnings only)
エラーがあるアイテムの場合:
[4] ❌ NEW POST
name: "Title!!!"
slug: "bad slug"
❌ Error: slug contains spaces
❌ Error: name has special characters
🔴 Cannot proceed - must fix errors
個別承認:
- 各アイテムに番号を付けます:[1]、[2]、[3]...
- 選択して処理できるようにします
- 次の形式を受け付けます:
- "all" - すべてを処理します
- "none" - 操作をキャンセルします
- "1,3,5" - アイテム 1、3、5 を処理します
- "1-5" - アイテム 1 から 5 を処理します
- "2" - アイテム 2 のみスキップし、残りを処理します
公開オプション:
- 即時公開:
*_liveエンドポイントを使用します(推奨) - 下書きモード:通常のエンドポイントを使用し、後で公開します
- それぞれの選択肢の影響を説明します
フェーズ 5:実行とレポート
バッチ処理:
- 1 バッチあたり最大 50 アイテムです
- 進行状況バーを表示します:
Processing: ████████░░ 80% (40/50 items) - 残り時間の見積もりを表示します
- レート制限に対応します(一時停止/再試行)
エラー処理:
単一アイテムの失敗の場合:
Processing item 3/10...
❌ Failed: "Post Title"
Error: Slug already exists
→ Skipping to next item
処理の続行:
- 1 件のエラーでバッチ全体を失敗させないようにします
- すべての成功と失敗を記録します
- 成功と失敗を別々に報告します
重大な失敗の場合:
❌ Critical Error: API connection lost
Items processed before error: 7/50
- 5 created successfully
- 2 updated successfully
- 43 not processed
Retry failed items? (yes/no)
成功レポートの形式:
✅ Operation Complete
Created: 25 items
- Show first 5 with IDs
- "[+20 more]" if > 5
Updated: 10 items
- Show first 5 with IDs
- "[+5 more]" if > 5
Failed: 2 items
- "Item Name": Error reason
- "Item Name": Error reason
Total time: 12.5 seconds
Items per second: 2.8
ロールバック機能:
変更前の状態を保存:
{
"timestamp": "2026-01-09T20:24:44Z",
"operations": [
{
"type": "update",
"itemId": "xxx",
"originalValues": {
"name": "Old Title",
"featured": false
},
"newValues": {
"name": "New Title",
"featured": true
}
}
]
}
ロールバックを提示:
📋 Rollback Available:
Last update: 15 items modified 2 minutes ago
Rollback will:
- Restore 10 updated items to previous values
- Delete 5 newly created items
⚠️ Type "undo" to rollback all changes
⚠️ Rollback expires in 3 minutes
パフォーマンスの最適化
バッチサイズ:
- デフォルト:1 バッチあたり 50 アイテム
- フィールドの複雑さに応じて調整します
- 画像が大きい場合:1 バッチあたり 20 アイテム
- 単純なテキストフィールドの場合:1 バッチあたり 100 アイテム
進行状況インジケーター:
Creating items...
Batch 1/3: ████████████████████ 100% (50/50)
Batch 2/3: ████████████████████ 100% (50/50)
Batch 3/3: ██████░░░░░░░░░░░░░░ 30% (15/50)
レート制限:
- Webflow API のレート制限を遵守します
- 必要に応じてバッチ間で一時停止します
- 待機する理由をユーザーに表示します
- 失敗したリクエストを自動的に再試行します(最大 3 回)
エラーメッセージ
明確で、次の行動につながる内容:
❌ 悪い例:
"Error: validation failed"
✅ 良い例:
"Validation Error on item 3:
- Slug 'my post' contains spaces
- Change to: 'my-post' (alphanumeric with hyphens only)"
エラーのカテゴリ:
- 🔴 重大:まったく続行できません(API の停止、認証情報が無効)
- ❌ エラー:このアイテムは処理できません(修正するかスキップしてください)
- ⚠️ 警告:続行できますが、推奨されません(任意フィールドの不足)
- 💡 提案:ベストプラクティスです(スラッグが汎用的すぎる、概要が短すぎる)
ベストプラクティス
必ず行うこと:
- ✅ 変更を加える前にプレビューを表示する
- ✅ 明示的な確認を求める
- ✅ すべてのデータを十分に検証する
- ✅ 大規模な操作ではバッチ処理する
- ✅ 成功と失敗を分けて報告する
- ✅ 直近の変更をロールバックできるようにする
- ✅ 柔軟に対応できるよう、細かい単位で承認を求める
決して行わないこと:
- ❌ ユーザーの確認なしに変更を適用する
- ❌ 1件のエラーでバッチ全体を失敗させる
- ❌ フィールド名や値を推測する
- ❌ 事前に検証せず処理する
- ❌ 検証時の警告をユーザーに隠す
エッジケース:
- 重複するスラッグ:番号を自動で追加する(post-title-2)
- 任意フィールドが未入力の場合:空のままにする(値を勝手に作らない)
- 大規模なバッチ:処理にかかる時間について警告する
- 参照フィールド:参照先が存在することを検証する
- 画像フィールド:URLまたはファイル ID を受け付ける
ユーザーエクスペリエンス:
- コレクションのスキーマを最初に表示する
- 参照しやすいように項目に番号を付ける
- 視覚的な階層構造を使う(├── └──)
- 対応方法が分かるエラーメッセージを表示する
- 処理時間を見積もる
- 処理の途中でキャンセルできるようにする