Power AutomateからAI(Claude)を呼び出すところまではうまくいった。でも、そのあとAIの回答から必要な値が取り出せない——「JSON の解析」アクションを入れたのに、動的コンテンツの一覧に出てこない。あるいは、最初は動いていたのに、ある日突然エラーで止まる。
これ、AIとの連携フローで最もよくあるつまずきです。今回は、実機で何度もハマって分かった3つの原因と対処法を、そのまま解説します。
そもそも、なぜ「JSON の解析」が必要なのか
Claude(生成AI)にJSON形式で回答するよう指示すると、たしかにJSONの形をした答えが返ってきます。「じゃあ、そのまま使えるのでは?」と思いますよね。
ここに最初の罠があります。
原因①:AIの回答は「JSONの形をした”文字列”」でしかない
Claude APIのレスポンスは、実際には次のような構造で返ってきます。
{
"content": [
{ "type": "text", "text": "{\"priority\": \"至急\", \"summary\": \"納期遅延のお詫び\"}" }
]
}
注目してほしいのは text の中身です。{"priority": "至急", ...} というJSONっぽい見た目の、ただの文字列が入っているだけなんです。Power Automateからすると、これは「JSONデータ」ではなく「JSONのように見える1本の長い文字」でしかありません。
だから、content[0].text を取り出しただけでは、priority や summary を動的コンテンツとして選ぶことができない。この文字列に対して、もう一段「JSON の解析」をかけて初めて、中の値がバラバラに使えるようになります。
1段階目の「JSON の解析」=Claude APIのレスポンス全体を構造化
2段階目の「JSON の解析」=その中のtext(文字列)を、さらに構造化
この「二段構え」を知らずに1段階だけで止まると、「値が取れない」「動的コンテンツに出てこない」で必ず詰まります。
原因②:スキーマを「サンプルから自動生成」すると、いつか必ずエラーで止まる
「JSON の解析」アクションには、スキーマを手入力する方法と、「サンプルのペイロードを使用してスキーマを生成する」というボタンで自動生成する方法があります。多くの人は手軽な自動生成を選びます。ところが、これが後になって静かに壊れます。
自動生成すると、貼り付けたサンプルに含まれる項目が、すべて required(必須)扱いになります。実機で試すと分かるのですが、AIの回答は毎回100%同じ形で返ってくるとは限りません。ある回では summary が省略される、ある回では項目の順番が変わる——そんなわずかな揺れがあっただけで、「JSON の解析」アクションがエラーで停止してしまうのです。
対処法はシンプルです。スキーマは自動生成に頼らず、required を含めない形で手動記述する。
{
"type": "object",
"properties": {
"priority": { "type": "string" },
"summary": { "type": "string" }
}
}
required の指定がなければ、項目が多少揺れても解析は落ちません。実機検証では、この落とし穴に複数回遭遇しました。「今日まで動いていたのに急に止まった」の多くは、これが原因です。
原因③:動的コンテンツから直接選ぶと、勝手に「For each」で囲まれる
もう一つ、地味にハマるのがこれです。「JSON の解析」の後、動的コンテンツの一覧から値(テキスト)を直接選んでアクションに差し込むと、Power Automateが自動的にフロー全体を「For each」で囲んでしまうことがあります。
これは、選んだ項目が「配列の中の値」として扱われるために起きる挙動です。1件のデータを処理したいだけなのに、意図せずループ構造になってしまい、フローの見た目も動きも変わってしまいます。
対処法は、動的コンテンツの一覧からクリックで選ぶのではなく、「式」タブを開いて body('JSON_の解析')?['content'][0]?['text'] のように直接指定することです。式で書けば、余計な「For each」は付きません。
おまけ:AIがコードブロックで囲んでくることがある
「JSONだけを返して」とプロンプトで指示していても、Claudeが稀に “`json ~ “` のようにマークダウンのコードブロック記号で回答を囲んでくることがあります。これをそのまま次の「JSON の解析」に渡すとエラーになるため、replace 関数で記号を取り除く一手間を挟むと安定します。
replace(replace(outputs('前のアクション'),'```json',''),'```','')
小さな一手間ですが、これを知らないと「さっきまで動いていたのに」の原因になります。
まとめ:3つとも「実機で動かして初めて分かる」つまずき
- ① AIの回答は文字列 → JSON解析は二段構えが必要
- ② スキーマの自動生成は将来壊れる → required なしで手動記述
- ③ 動的コンテンツを直接選ぶと勝手にループ化する → 式タブで直接指定
どれも、チュートリアル通りに一度動かしただけでは気づきません。実際に何度もフローを組み、AIの回答の揺れやUIの挙動を確認して初めて見えてくる落とし穴です。
こうした実機で見つけたつまずきを一つずつ潰しながら、Power Automate × Claude APIの土台フローをゼロから作る手順を、Udemy講座にまとめました。
📘 Udemy講座「Power Automate × 生成AI 業務自動化入門|ノーコードでClaude APIを呼ぶ」
https://www.udemy.com/course/power-automate-ai-claude-api/?referralCode=C716C79ECD90E7687497
「動かない」で止まらないための土台を、一緒に作りませんか。

コメントを残す