Canva MCPで日本語タイトルが「天久百厳浸」になった — AI生成の限界と代替手順の記録

Claude Code から Canva MCP を呼んで日本語ヒーロー画像を生成させたら、タイトルが「天久百厳浸」になった。
4案生成、4案全滅。出力されたのは「米岡済本」「天久百厳浸」など、私が指定した日本語タイトルとは無関係のランダムな漢字だった。Canva の AI は英語特化であり、日本語の意味的整合性を保てない——そのことを、試して初めて実感した記録です。
結論
Canva AI(MCP 経由の generate-design)は日本語テキストを意味として扱えない。 英語タイトルなら問題ないが、日本語ブログのヒーロー画像を AI 生成に任せるのは現状では無理だ。
代替は 2 つ:
- Canva テンプレートをコピーして、テキストだけ手動で書き換える(AI 生成は使わない)
- Pillow + プロジェクトに同梱した TTF フォントで画像をスクリプト生成する(採用した方法)
この記事の前提
- 状況: masatoman.net のヒーロー画像を Claude Code ルーティーンで自動生成したかった
- スタック: Next.js + Vercel、記事は MDX 管理、OGP 画像は
/public/images/articles/に PNG で配置 - 試したこと: Canva MCP(generate-design ツール)で日本語タイトルを指定して 4 案生成
- 日付: 2026-05-28
読者のよくある詰まり
「MCP ツールが動いた → じゃあ日本語コンテンツにも使える」と思ってしまう。
私もそうだった。Claude Code から MCP 経由でツールが呼び出せる、API が返ってくる、エラーも出ない——ここまで確認して「動いた」と判断した。しかし生成物を見て気づいた。ツールとしての呼び出しは成功していたが、コンテンツとしては完全に失敗していた。
実際に起きたこと
Canva MCP generate-design の失敗記録(2026-05-28)
- 生成案数: 4 案
- 成功案数: 0 案
- 出力例: タイトル指定「Claude Code Skills — 最初の 1 スキルを動かすまでの実装ログ」に対し、実際の出力テキストは「天久百厳浸」「米岡済本」など意味不明な漢字の列
- エラー: なし(API 呼び出し自体は成功として返ってくる)
原因分析
Canva AI の画像生成エンジンは英語コーパスで訓練されており、日本語テキストのセマンティクス(意味)を保持したまま画像にレンダリングする能力を持っていない。
具体的には:
| 操作 | 日本語の扱い |
|---|---|
| generate-design(AI 生成) | ランダムな漢字が出力される |
| テンプレートコピー + テキスト編集 | 日本語テキストをそのまま配置できる(OK) |
つまり「AI に任せる」と「テンプレートを使う」で、日本語対応の可否が真逆になる。
判断基準:MCP ツールを日本語コンテンツで使えるか
以下の問いで判断できる:
「そのツールは英語コーパスで訓練されているか?」
- YES(Canva AI、多くの画像生成 AI)→ 日本語テキストの意味的整合性は期待しない
- NO またはローカル処理(Pillow、Cairo、ImageMagick)→ 指定した文字をそのまま描画するため問題なし
「生成後にテキストを人間が確認できるか?」
- できない(自動パイプライン)→ AI 生成テキストを日本語コンテンツに使わない
- できる(手動レビューあり)→ 使えるが、毎回直しが必要なコストを許容できるか考える
採用した代替構成
最終的に 3 案を比較して Pillow を選んだ:
| 方法 | 評価 | 理由 |
|---|---|---|
| Canva 基本テンプレ | × | デザインが画一的でブランドを作れない |
| Canva AI 生成 | × | 日本語が崩壊する(今回の失敗) |
| 動的 OG(Next.js) | △ | デザイン自由度が低い、Vercel の制約がある |
| Pillow + 同梱 TTF | ✅ | 再現可能、フォントを repo に同梱できる |
採用した構成:
from PIL import ImageFont, ImageDraw, Image
# public/fonts/ に TTF を同梱してシステムフォント依存を排除
title_font = ImageFont.truetype("public/fonts/NotoSansJP-Bold.ttf", size=48)
sub_font = ImageFont.truetype("public/fonts/NotoSansJP-Regular.ttf", size=24)
scripts/generate-hero-image.py で MDX ファイルを自動読み込みし、frontmatter の title と description からヒーロー画像を生成する構成にした。9 カテゴリ別のカラーテーマを持ち、グラデーション背景 + タグチップ + カテゴリバッジを描画する。
補足: フォントをシステムに依存させると、クラウド実行環境によって IPAGothic 等の日本語フォントが存在しない場合がある。過去に 6 枚連続で □ 文字化けが発生した。フォントは必ず repo に同梱する。
で、どう稼ぐ?
この失敗から「AI ツール費の回収」に直結する判断が 1 つある。
ヒーロー画像の質は SNS での CTR に直結する。 ランダム漢字のサムネイルを X でシェアしても誰もクリックしない。Claude Code や MCP にお金を払っているなら、その恩恵が「読まれる記事のサムネイル」という形で回収できないと意味がない。
今回の結果として、ヒーロー画像生成を Pillow スクリプト化してルーティーンに組み込んだ。新規記事を push するたびにスクリプトが走り、ブランドに沿った PNG が自動生成される。一度設計すれば、以降は Claude Code が自動で動かす。
AI に任せる設計を間違えると、AI にお金を払っても品質は下がる。 今回はその典型例だった。
今日やること(3 つ以内)
- Canva MCP を使っている場合、日本語テキストが含まれる生成物を全部確認する
- ヒーロー画像の生成に AI を使っているなら、「ツール呼び出しが成功 = コンテンツが正しい」になっていないか確認する
- フォントがシステム依存になっているなら、TTF を repo に同梱して絶対パスで指定する
masatoman のメルマガ — 毎週月曜の朝に手紙を 1 通
masatoman.net の今週の記事 1 本を、読者目線で深掘りした手紙が毎週月曜 9:00 に届きます。「これ自分のことだ」が見つかる予告編。登録特典に「個人開発の収益化チェックリスト 15 項目」。
masatoman のメルマガ — 毎週月曜の朝に 1 通
masatoman.net で今週公開した記事の中から 1 本を、読者目線で深掘りした手紙が届きます。「自分も同じことやってる」「ここで詰まってた」が見つかる予告編。
Next Step
次に読むならこの導線です
【第12回】夜寝てる間に Claude Code が記事を書き上げる構成 — 月 ¥5K で動く全コード
Claude Codeラボ全12話の集大成。Skills/MCP/サブエージェント/Hooks/リモート運用を統合した「自走する Claude 自動化」を、月 ¥5K の実コストで動かす全構成を公開。寝てる間に競合調査・記事下書き・PR まで自動化する 6 層アーキテクチャの完成版。
Claude Code から自作 MCP サーバーを呼び出す — TypeScript で書く最小実装と詰まりポイント
Claude Code で自作 MCP サーバー(TypeScript)を呼び出す最小実装を全コード公開。`.mcp.json` 設定から `@modelcontextprotocol/sdk` 実装まで、詰まりポイント3点も解説。
【第12回】夜寝てる間に Claude Code が記事を書き上げる構成 — 月 ¥5K で動く全コード
Claude Codeラボ全12話の集大成。Skills/MCP/サブエージェント/Hooks/リモート運用を統合した「自走する Claude 自動化」を、月 ¥5K の実コストで動かす全構成を公開。寝てる間に競合調査・記事下書き・PR まで自動化する 6 層アーキテクチャの完成版。
Claude Code で 0→MVP を1日で作る全記録 — recipe-ai Build in Public
Claude Codeを使い、YouTube料理動画からレシピを自動抽出するAIアプリ「recipe-ai」を0からMVPまで1日で構築した全記録。CLAUDE.md設計、API実装、Supabase連携、Vercelデプロイ、Stripe課金導入までの工程を時系列で公開。
記事が役に立ったら気軽にどうぞ。
この記事が役に立ったらシェア