canva-creator について
canva-creatorは、承認済みのブリーフを投稿カレンダー、素材確認、Canvaのソーシャルデザイン、コピー、HubSpotへの登録へと進めるキャンペーン用ワークフロースキルです。メールはテキストのみで扱い、各段階でオーナーの承認を求めます。
主な機能
- 01ブリーフから投稿カレンダーを作成
- 02ソーシャルデザイン用素材の棚卸し
- 03Canva候補デザインの生成と確認
- 04テキストのみのメール文案作成
- 05承認済み投稿をHubSpotに登録
活用シーン
- 01ソーシャルとメールのキャンペーン計画
- 02デザイン生成前の画像枠の確認
- 03投稿ごとのCanva候補デザインの比較
- 04HubSpot登録用ソーシャル投稿の準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ anthropics/ knowledge-work-plugins --skill canva-creatorインストール後、Claude Code で/canva-creatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/canva-api.mdgotchas.mdhubspot-staging.mdreference/examples/boutique-brief-campaign.md詳細
Canva Creator
範囲
このスキルでは、オーナーの承認を各段階の条件として、5つの段階を順に進めてキャンペーンを作成します。
brief → calendar → asset inventory → Canva designs → copy → HubSpot staging
| 経路 | チャネル | このスキルで作成するもの |
|---|---|---|
| Canva(ソーシャル) | Instagram、Facebook、X/Twitter、LinkedIn | Canva のデザイン+キャプション+HubSpot に予約投稿された投稿 |
| テキストのみ | メール(ニュースレター、マーケティング、ドリップ) | 件名+プリヘッダー+本文。オーナーが送信できるよう、チャット内に表示 |
メールの行では、いかなる場合も Canva を使用しません。テンプレート、自動入力、デザインの複製、アセットのアップロード、エクスポートは一切行いません。このスキルではメールの画像を扱いません。メールテンプレートの自動入力では、画像スロットの数が利用可能な写真の数を超えるとプレースホルダー画像が生成され、バリエーションのサムネイルはチャットのプレビューに表示されないためです。オーナーから Canva でメールデザインを作るよう依頼された場合は、リダイレクトの文言について reference/gotchas.md を参照してください。
事前確認
ステージ 1 の前に、次の項目を確認します。
-
ブリーフ。 ユーザーが承認済みのブリーフを参照または貼り付けていることを確認します。ない場合は、次のように尋ねます。 「キャンペーンを作成するには、コンテンツブリーフが必要です。content-strategy スキルで作成したものはありますか。それとも、今ここで作成しますか?」
-
Canva のプラン。 Pro/Teams では、ユーザーのライブラリからテンプレートを手動で選択する必要があります(自動入力 API はありません)。Enterprise では、ブランドテンプレートから自動入力できます。
-
HubSpot のプラン。 ソーシャル投稿の準備には Marketing Hub Professional が必要です。Starter または Free の場合は、ステージ 5 をスキップして CSV をエクスポートします (reference/hubspot-staging.md を参照)。
-
ブランドアセット。 ストアフロント(Shopify または Square)が接続されている場合(同等のサービスについては
../../shared/connector-neutrality.mdを参照)、まず商品リストを読み込みます。ブリーフに記載されたすべての商品について、タイトル、画像 URL、価格を確認します。読み取りのみを行います。Canva へのアップロードはステージ 2 の手順 5 まで行わず、その時点でも承認済みカレンダーの各枠で必要な画像だけをアップロードします。このリストを写真の初期一覧とし、ストアに画像がない商品についてのみ確認します。取得するフィールドや価格に関する主張のルールは、../social-content-engine/reference/shopify-assets.md に記載されています(Shopify 向けに書かれていますが、Square のカタログ画像でもツールの一覧から同じ手順で取得します)。ストアフロントがない場合は、ディスク上の商品写真の場所、または Canva でブランドキットが利用可能かを確認します。 -
生成予算。 キャンペーンで使用する Canva のボリュームを見積もり、ステージ 1 の開始前に提示します。デフォルトでは Canva を使用する各行につき候補を 3 件作成します。デザインごとに約 5 回の API 呼び出しが必要です(自動入力+エクスポート+ポーリング)。
Generation budget for this campaign: Canva (social) rows: 8 Candidates per row: 3 (default — say "single candidate" to use 1) Total designs: 24 API calls (approx): ~120 (autofill + export + polling) Canva limit: 100 requests/minute. This will take ~2-3 minutes of generation, well within your tier limits. Proceed?予測されるデザインの合計が 30 件を超える場合は、最初から候補 1 件のモードを推奨します。大規模なキャンペーンでは、すぐに余裕がなくなります。オーナーはステージ 1 の開始前に、各行につき候補を 1 件、2 件、または 3 件に変更できます。選択した値はセッション全体で固定します。
ワークフロー
ステージ 1 — 投稿カレンダー
ブリーフから、コンテンツのテーマ、チャネル、頻度、確定日 (ローンチ、セール、祝日)を抽出します。
各行をCanvaまたはテキストのみの下書きに振り分けるPath列を含む
カレンダーテーブルを作成します。
| 日付 | チャネル | Path | テーマ | アセットの種類 | キャプション/件名の切り口 |
|---|---|---|---|---|---|
| Jun 2 | Instagramフィード | Canva (social) | リネンのローンチ | 正方形の投稿 | 「ついに、ワンピースが…」 |
| Jun 5 | メール | Text-only | リネンのローンチ | メール本文 | 「本当に通気性のよいリネン」 |
メールチャネルの行はすべて、提示する前にText-onlyとタグ付けします。ブリーフで指定されている場合を除き、期間は最大30日とします。同じ日に同じ商品を扱う投稿が複数ある場合は、最初にスケジュールの競合として明示します。
チェックポイント 1。 カレンダーを提示し、次のように尋ねます。「この内容で計画に合っていますか?日付の変更、チャネルの追加、テーマの入れ替えはありますか?」承認されるまで調整し、次の段階に進む前に、振り分けを口頭で再確認します。「N件はCanva、M件はテキストのみの下書きで進めます」。ここで分類ミスに気づけば修正は簡単ですが、デザイン生成後ではそうはいきません。
ステージ 2 — アセットの一覧(Canvaの行のみ)
メールの行はこの段階を完全にスキップします。各Canva (social)の行について、テンプレートに必要なものと、すでに用意できているものを一覧にします。
-
すべての画像スロットを名前ごとに列挙します。 正方形のInstagram投稿には通常1〜2個の画像スロットがあります。カルーセルや商品グリッドでは5個以上になることもあります。個別に(
Header_Image、Product1_Image、Product2_Image、…)列挙し、「商品画像」のようにまとめてはいけません。- Enterprise:ブランドテンプレートの
dataset[].labelからフィールド名を読み取ります(GET /v1/brand-templates/{id})。 - Pro/Teams:テンプレート内の異なる画像用長方形をすべて数えます。
- Enterprise:ブランドテンプレートの
-
利用可能なアセットを一覧にします。 ブリーフのテキストコンテンツ(商品名、オファー文、タグライン、価格)、事前確認時に接続済みのストアフロントから読み取った商品画像URL(ステップ5でアップロードし、その時点でギャップテーブルが必要とするスロットに限り、
asset.idを記録します)、Canvaにすでにアップロードされている商品写真(GET /v1/assets)またはオーナーのディスクにある写真、ブランドキットの色とフォント(Enterprise)を確認します。キャプションに記載する価格は、ストアフロントから返された値またはブリーフから取得し、記憶に頼ってはいけません。 -
スロットごとのギャップテーブルを作成します。 デザインごとではなく、デザイン内の各スロットにつき1行とします。
日付 スロット名 スロットの種類 利用可能なアセット 状態 Jun 2 Hero_Image 画像 bloom_summer.jpg → asset_id 保留中 アップロード Jun 2 Headline テキスト 「ついに、夏のリネン」 準備完了 Jun 9 Product1_Image 画像 — 不足 -
スロットとアセットの不一致はオーナーと解決します。 テンプレートの画像スロット数が、ブリーフで提供された写真の数を上回る場合は、作業を止めて次のように尋ねます。
The "Summer Carousel" template has 5 image slots. The brief gave me 1 photo (bloom_summer.jpg). How should I fill the other 4? 1. Reuse the same photo across all 5 slots 2. You send me 4 more photos (file paths) 3. Pick a simpler template with fewer slotsオーナーが選択するまで、生成APIは呼び出しません。空のスロットを含めて生成すると、Canvaのデフォルトの風景プレースホルダーだらけのデザインになります。
-
不足している写真をアップロードし、確認済みのアセットIDを記録します。
POST /v1/asset-uploadsでアップロードし、status == "success"になるまでGET /v1/asset-uploads/{job_id}をポーリングします。レスポンスからasset.idを記録します。自動入力の画像フィールドで機能するのはこの値だけです。空文字列、URL、ファイルパス、古いIDを渡すと、写真の代わりにCanvaの風景ストック画像が黙って描画されます。 -
マニフェストを確認します。 すべてのスロットが解決済みで、すべての画像の
asset.idが確認済みである、完成したスロットごとのテーブルをオーナーに見せます。ここがCanva APIの呼び出し前の最終確認地点です。
ステージ 3 — Canva デザインの生成
Canva API を呼び出す前に、カレンダーを再度読み込み、Path が
Canva (social) ではない行をすべて除外します。メールの行はこの
ステージを通りません。
デザインはカレンダーの行ごとに 1 つずつ生成し、各行につき候補を 3 件 (または事前確認時に選択した値)作成します。各行で同じループを実行します。 候補を生成 → 検証 → エクスポート → 視覚的に確認 → 失敗したものを再試行 → 提示 → オーナーの選択を待機 → 次の行。行の間は 30 秒間待機します。 これにより、約 30 秒あたりの生成 3 回とエクスポート 3 回に抑えられ、 Canva のレート制限である毎分 100 リクエストを大幅に下回ります。複数の行を 並列処理しないでください。1 行ずつ処理することで、キャンペーンの途中で オーナーがクォータ上限に達するのを防ぎます。
ポーリング間隔。 ジョブのステータスは 3~5 秒ごとにポーリングし、それより 短い間隔では行わないでください。間隔を短くしても完了が早まることはなく、 クォータを消費するだけです。
プレビュー URL — 安全に埋め込めるのは 1 種類のみです。 オートフィルの応答で
返される design.canva.ai のサムネイルは数分で期限切れになります。これを
Markdown 画像として埋め込むと、画像が表示されない「画像を表示」プレースホルダーに
なります。永続的なエクスポート URL(export-download.canva.com または
export-design MCP ツール)は期限切れになりません。ネイティブ Cowork カルーセルは
コネクターの認証済みセッションを使ってオートフィル結果を直接表示します。
カルーセルに表示させ、再度埋め込まないでください。
行ループ
-
テンプレートを解決します。(セッションごとに1回。カレンダーで異なる種類のアセットが混在していない限り、全行で同じテンプレートを使用します。)
- Enterprise:アセットの種類で絞り込んだ
GET /v1/brand-templates。 - Pro/Teams:
GET /v1/designs?ownership=any&query={template name}を実行し、上位3件をオーナーに提示して、生成前に1件を確認します。
- Enterprise:アセットの種類で絞り込んだ
-
行の候補を並行して生成します。 行の候補3件(または事前チェックで決めたN件)を同時に実行します。
- Enterprise:候補ごとに、テンプレートIDとフィールド値を指定して
POST /v1/autofillsを実行します。すべてのジョブを並行してポーリングします。 - Pro/Teams:
POST /v1/designsを実行してコピーを作成します。オーナーがCanvaで適用するテキストと画像の編集内容を説明し、デザインIDを受け取ります。
- Enterprise:候補ごとに、テンプレートIDとフィールド値を指定して
-
ジョブのステータスを確認します。 各候補について、
GET /autofills/{job_id}の戻り値がstatus == "success"であり、result.design.idが存在することを確認します。エラーにはデザインごとに対処します。-
JOB_FAILED→job.error.messageを確認し、フィールド値またはアセットIDを修正して1回だけ再試行します。 -
RATE_LIMIT_EXCEEDED(このセッションで1回目)→ 60秒待って、その候補を1回だけ再試行します。一時的な急増に対処できます。 -
RATE_LIMIT_EXCEEDED(このセッションで2回目)、またはquota_exceeded/日次上限エラーが発生した場合 → 直ちに生成を停止します。再試行しないでください。進捗を提示し、次のように尋ねます。Canvaがキャンペーンのレートを制限しています。現在の状況: ✓ 生成済み:投稿1~4(デザイン12件) ⏸ 残り:投稿5~8(未生成のデザイン12件) どのように進めますか? 1. 残りの行は1候補ずつに切り替える(デザイン合計4件)— 今すぐ完了 2. キャンペーンを一時停止する — クォータが回復する60分後に再開 3. 生成を停止する — 現在の成果を使用して、キャプションに進むオーナーの選択を待ちます。再試行を繰り返さないでください。
-
-
成功した各候補を永続的なPNGにエクスポートします。 行のエクスポートを並行して実行します。
- REST:
format.type: "png"を指定してPOST /v1/exportsを実行し、成功するまでGET /v1/exports/{job_id}をポーリングして、urls[0]を取得します。 - Canva MCP:デザインIDを指定して
export-designを実行します。
これらの永続URLを後でプレビューに埋め込み、HubSpotの投稿に添付します。オートフィルのレスポンスに含まれるサムネイルは、後続の処理では使用しません。
- REST:
-
各エクスポートを目視で確認します。 画像を確認し、次のいずれかがあれば却下します。いずれも、未入力のスロットまたは誤ったアセットを示しています。
- 雲と緑の丘が描かれた汎用的な風景(Canvaのデフォルトのプレースホルダー)
- 写真があるべき場所に表示された無地の灰色の長方形
- Lorem Ipsumのテキスト、またはテンプレートのデフォルトテキスト
- ブリーフに一致しない被写体(製品またはブランドが違う)
候補が確認に失敗した場合:該当するスロットについてマニフェストを再確認し、
asset.idを修正して、その候補だけを再生成、再エクスポートし、再確認します。 -
一部失敗した場合は候補ごとに再試行します。 行のN件の候補のうち1件がステップ3または5で失敗した場合は、その1件だけを再生成します。行全体をやり直したり、壊れたカルーセルを一部だけ提示したりしないでください。2回目の試行も失敗した場合:
The third candidate for the Jun 9 post keeps failing — Canva returned [error / rendered placeholder]. How should I proceed? 1. Skip it — present the other 2 and move on 2. Swap to a simpler template for just this candidate 3. Try once more with a different photo -
行の候補を提示します。 ネイティブのCoworkカルーセルでオートフィルツールの結果をレンダリングします。その下に、次のテキストプロンプトを追加します。
Jun 9 candidates are ready — scroll through the carousel above. Which one should I use for the Jun 9 post?カルーセルがレンダリングされない場合、または表示位置が壊れている場合は、代わりにステップ4で取得した永続的なエクスポートPNGのURLを埋め込みます。最後の手段として、デザインのCanva編集URL(
https://www.canva.com/d/{design_id})にリンクします。design.canva.aiのURLを再度埋め込んではいけません。 -
30秒待ってから、次の行に進みます。
チェックポイント2。 オーナーがカレンダーの各行につき1つのデザインを選んだ時点で完了です。再生成を希望された場合は、その候補だけを再生成します。
ステージ 4 — コピーの作成
カレンダーの各行について、コピーを作成します。ソーシャルの行にはキャプション、メールの行にはメール全文を作成します。
ソーシャルキャプション — Instagram、Facebook、X、LinkedIn:
- 長さ:チャネルに適した長さ(Instagram は 2,200 文字以内、Facebook は 500 文字以内を推奨、X は 280 文字以内)。
- 構成:フック → 製品のメリットを 1 つ → CTA → ハッシュタグ 3〜5 個(30 個ではありません)。
- トーン:ブリーフのトーンに関する指示に合わせます。ブリーフに「カジュアルで親しみやすく」とあれば、企業向けのコピーにはしません。
- 無駄な文言は入れません。「うれしいお知らせです!」や「発表できることを大変うれしく思います。」は使いません。価値を伝えるところから始めます。
メールの内容 — メール全体を Claude が作成します。Canva は使いません。
- 件名:50 文字以内。具体的で、釣り文句は使いません。「春のプロジェクトの予約が埋まり始めています」は「お見逃しなく!」よりも適切です。
- プリヘッダー:90 文字以内。件名を繰り返さず、内容を補足します。
- 本文:平易な文章で 100〜250 語。続きを読む価値のある冒頭文 → 内容を伝える段落を 1〜2 つ → 明確な CTA を 1 つ → 結びの言葉。
- トーン:ソーシャルと同じトーンに関する指示に従います。オーナーは、テンプレートのニュースレターではなく、自分らしい文面のメールを求めています。
- 画像への言及はしません。「上の画像をご覧ください」とは書きません。ビジュアルを使いたい場合は、オーナーがメールツールに追加します。
- メールごとに CTA は 1 つです。最も重要なアクションを選び、先に伝えます。
ソーシャルの各行の下にキャプションをインラインで表示します。メールの各行の下にメール全文をインラインで表示します。
Subject: <subject line>
Preheader: <preheader text>
<body text>
作成例については、 reference/examples/boutique-brief-campaign.mdを参照してください。
チェックポイント 3. 「書き直したいキャプションやメールはありますか?日付と変更内容をお知らせください。」承認されるまで修正を繰り返します。
ステージ 5 — HubSpot への登録とメールの引き渡し
ソーシャル投稿を HubSpot に登録します。メールの内容は登録せず、オーナーがメールツールにコピーできるようインラインで表示します。API のフィールドリファレンスについては、 reference/hubspot-staging.mdを参照してください。
-
キャンペーンを作成します。 カレンダーのキャンペーン名と開始日/終了日を指定して、
POST /marketing/v3/campaignsを実行します。 -
各ソーシャル投稿を登録します。
Canva (social)の各行について、HubSpot Social API にPOSTします。channel:カレンダーのチャネルを HubSpot のアカウント ID に対応付けますscheduledAt:ISO 8601 形式の日時です。呼び出す前に、日時が未来であることを確認しますcontent.body:承認済みのキャプションattachments:ステージ 3 でエクスポートした、永続的な Canva PNG の URLstatus:SCHEDULED(PUBLISHEDにはしません)
-
キューを確認します。
GET /marketing/v3/social/posts?status=SCHEDULEDを呼び出して一覧を表示し、HubSpot のキャンペーン画面への直接リンクを提示します。 -
引き渡し用にメールの内容を表示します。 メールの各行について、承認済みの件名、プリヘッダー、本文を送信日ごとにまとめてインラインで表示します。オーナーはこれらをメールツール(HubSpot Marketing Email、Mailchimp、Gmail、または M365)にコピーします。
最終チェックポイント。
Your social posts are scheduled in HubSpot: [link]
They'll go out as scheduled — you can cancel or edit any post in HubSpot.
Email content is drafted below — copy each into your email tool when
you're ready to send:
Jun 5 — "Spring projects are booking up"
Jul 15 — "Summer maintenance windows are filling"
Anything to change before we're done?
この要約と併せて、要約の代わりにすることなく、ハウススタイル(../../shared/artifact-style.md)に従ってキャンペーンを HTML アーティファクトとして表示します。投稿カレンダーを表で示し、各行にチャネルごとのステータスピル(scheduled / drafted / handoff)を付け、各行に承認済みのキャプションまたはメール本文とエクスポート済み PNG へのリンクを含む登録済み投稿パネルを表示します。
締めくくりの提案。 キャンペーンに含まれる内容を 1 行で伝え、最も関連性の高い次のステップを、そのトリガーフレーズとともに 1 つ提示します。通常は、投稿の配信が始まった後に「マーケティングはうまくいっていますか?」(growth-pulse)を案内します。ほかに最大 2 つまで案内できます。「コンテンツを作成する」(social-content-engine)は定期的なカレンダー向け、「広告」(ad-manager)は広告向けです。提案は最大 3 つまでとし、このセッション中にオーナーが断ったものは再提案しません。
承認ゲート
- メールの行ではCanvaを呼び出しません。 APIを呼び出す前に、必ず
Path列を再確認します。 - 公開しません。 HubSpotの投稿はすべて
SCHEDULEDとしてステージングされ、公開のタイミングはオーナーが管理します。 - 事前確認で生成予算を必ず提示します。 オーナーにデザインの合計数を提示し、ステージ1を開始する前に承認を得ます。
- ステージ3では一度に1行ずつ処理します。 1行内の候補は並列処理しますが、行は30秒間隔で順次処理します。これはクォータを保護するためです。
- クォータエラーが2回目に発生したら、一時停止して確認を求めます。 再試行を繰り返してはいけません。
- 提示する前に、必ず永続的なPNGとしてエクスポートします。 ジョブが成功しても、デザインが正しくレンダリングされたとは限りません。
- メッセージに
design.canva.aiのURLを埋め込んではいけません。 URLは期限切れになります。 - 1つの候補が失敗したとき、行全体を再生成してはいけません。 再試行は候補ごとに行います。
- Pro/Teamsユーザー向けのテンプレートを自動選択してはいけません。 必ず確認を取ります。
- スロットごとの棚卸しを省略してはいけません。 複数スロットのテンプレートは、いずれかのスロットが空だとプレースホルダーの風景画像をレンダリングします。
- チェックポイント1を省略してはいけません。 カレンダーの承認前に生成すると、このスキルでは最も多くの作業が無駄になります。
リファレンス
- reference/canva-api.md — Canva Connect APIのエンドポイント、アセットのアップロード、エクスポート形式、MCPの同等機能
- reference/hubspot-staging.md — HubSpot Social API、およびPro以外のプラン向けCSVフォールバック
- reference/gotchas.md — よくある失敗パターンの良い例/悪い例
- reference/examples/boutique-brief-campaign.md — 実例を使った詳しい解説(単一スロットのソーシャル投稿、複数スロットのテンプレート)
記載されていないツールの使用
このスキルで名前を挙げているコネクターは、テスト済みの手段であり、利用可能な手段を限定するものではありません。オーナーが、接続されていない、または記載されていないツールをこのフローで使用したい場合は、build-connectorを提案してください。まずコネクターディレクトリを確認し、該当するコネクターがなければZapier経由で接続します。生のAPIに対して手作業で構築することはありません。接続が確立された後、そのツールは他の任意のコネクターと同様に、このスキルの承認ゲートに従って利用できます。