🏠 PA45トップ› 第28回 資料› ハンズオン手順
PA45 第28回|ハンズオン手順

Copilotと通知カード1枚でまとめて完了にするやること3件を1枚のカードに出し、終わったものにチェックを入れて1回送るだけで、まとめて完了になります。手が止まるカードのJSONと式は、Copilotに聞きながら進めます。順番どおりに進めればできます。

今日つくるもの: ボタンを押すと、SharePoint「今日のやること」からまだ終わっていない3件をとってきて、チェックが3つ並んだカードをTeamsへ送り、チェックされたものだけを「完了」に書き換えるフロー。
🔘 ボタンで開始→ 📋 未完了を3件とってくる→ 🗂️ カードを送って待つ→ ✅ チェックした分だけ完了に
🔰 初参加の方へ: ここから始めても大丈夫です。前回までの内容は必要ありません。自分あてにカードを送るだけでテストできます。難しいところ(カードのJSON・答えを取り出す式・エラーの読み方)は、Copilotに聞く前提で進めます。
STEP 0

準備(「今日のやること」リストを作る)

作るものは1つ。SharePointのリストだけです。ここで列の名前の付け方を間違えると、あとの手順が全部動かなくなります。いちばん大事な下ごしらえです。

  1. SharePoint サイトで 「新規」→「リスト」→ 空のリストを作ります。名前は 今日のやること。
  2. 列を1つ追加します。ここで名前は半角の Done、種類は 「はい/いいえ」。
    • まだ日本語にしません。この時点の名前が、あとで変えられない「内部名」になります。
  3. 作ったあとに、その列の表示名だけ「完了」に変更します。
    • 画面に出る名前は「完了」、フローから指す名前は Done。この2枚看板の状態にします。
  4. タイトル列に、やることを3件入れます。
    • 例)見積書を送る/議事録を共有する/請求書を確認する
リスト「今日のやること」。タイトル列と完了列に3件
実際の画面。表示名は「完了」、中の名前は Done の状態で3件入れたところ。
⚠️ なぜ半角で作ってから名前を変えるのか:
  • SharePointの列には表示名と内部名の2つがあり、内部名は作ったときの名前で決まって、あとから変わりません。
  • 最初から「完了」という日本語で作ると、内部名が _x5b8c__x4e86_ のような文字列になります。
  • フローの フィルター クエリや項目の更新で使うのは内部名のほうです。日本語のままだと、書いても通りません。
💡 すでに日本語で作ってしまったら: 列を作り直すのがいちばん早いです(データが3件だけなので、消して作り直しても数十秒です)。
STEP 1

ボタンで開始する

Power Automate で 「作成」→「インスタント クラウド フロー」を選びます。今日は時刻ではなく自分でボタンを押して動かします(そのほうが何度でも試せるからです)。

  1. トリガーは 「フローを手動でトリガーする」を選びます。
  2. 入力の追加はしません。押すだけで動く形にします。
  3. フロー名は やることをまとめて完了にする など、分かる名前を付けます。
💡 今日は、追加したアクションの名前を変えないでください。 あとで式の中からアクションの名前で結果を指すので、名前を変えると式も直す必要が出てきます。慣れたら変えて構いません。
STEP 2

まだ終わっていないものを、3件とってくる

SharePoint の 「複数の項目の取得」を追加します。全部とってくるのではなく、まだ終わっていないものだけに絞るのがポイントです。

  1. +新しいステップ→ SharePoint → 「複数の項目の取得」を追加します。
  2. 4つの欄を埋めます。詳細オプションを開くと、下2つが出てきます。
    サイトのアドレスリストを作ったサイトリスト名今日のやることフィルター クエリDone eq 0上から順に取得3
複数の項目の取得の設定。リスト名、フィルター クエリ Done eq 0、上から順に取得 3
実際の画面(サイトのアドレスはぼかしています)。詳細パラメーターを開くと、フィルター クエリと上から順に取得が出てきます。
■ フィルター クエリの読み方:
  • Done=STEP 0 で半角で作った内部名。ここが日本語だと通りません。
  • eq=「等しい」(equal)。= ではなくこう書く決まりです。
  • 0=「はい/いいえ」のいいえ。つまりまだ完了していないもの。
  • 上から順に取得=3:カードのチェックを3つに固定するので、3件だけ持ってきます。
STEP 3

チェック3つのカードを送って、押されるまで待つ

Teams の 「アダプティブ カードを投稿して応答を待機する」を追加します。「応答を待機する」が名前に付くものを選んでください。付いていないものは、送って終わりで返事を受け取れません。

  1. +新しいステップ→ Microsoft Teams → 「アダプティブ カードを投稿して応答を待機する」。
  2. 3つの欄を埋めます。
    投稿者フロー ボット投稿先フロー ボットとチャットをするRecipient自分(本人)
  3. メッセージ欄に、カードのJSONを貼り付けます。Copilot に出してもらう(下の指示をそのまま貼る)か、その下の用意済みのJSONをコピーします。
Copilot にそのまま貼る指示(このカードのJSONが返ってきます)
Adaptive Card 1.4 の JSON だけをください。Power Automate の「アダプティブ カードを投稿して応答を待機する」のメッセージ欄にそのまま貼ります。
要素は次のとおりです。
・見出し「今日のやること」(太字・大きめ)
・その下に小さい説明「終わったものにチェックを入れて、まとめて送ってください。」(うすい色)
・チェックを3つ(Input.Toggle)。id は t1 / t2 / t3、値は文字列の "true" / "false"(valueOn / valueOff)
・3つのチェックの title には、次の式をそのまま入れる
 t1:@{body('複数の項目の取得')?['value'][0]?['Title']}
 t2:@{body('複数の項目の取得')?['value'][1]?['Title']}
 t3:@{body('複数の項目の取得')?['value'][2]?['Title']}
・送信ボタンを1つ(Action.Submit、表示は「チェックしたものを完了にする」)
説明は不要です。JSON だけ返してください。
今日のやることカード。チェック3つと送信ボタン
返ってきたJSONを貼ると、Teams にこのカードが届きます。
用意済みのカードJSON(Copilot の返事がうまく貼れないとき)
{"$schema":"http://adaptivecards.io/schemas/adaptive-card.json","type":"AdaptiveCard","version":"1.4","body":[{"type":"TextBlock","text":"今日のやること","weight":"Bolder","size":"Large","wrap":true},{"type":"TextBlock","text":"終わったものにチェックを入れて、まとめて送ってください。","isSubtle":true,"wrap":true,"spacing":"None"},{"type":"Input.Toggle","id":"t1","title":"@{body('複数の項目の取得')?['value'][0]?['Title']}","valueOn":"true","valueOff":"false"},{"type":"Input.Toggle","id":"t2","title":"@{body('複数の項目の取得')?['value'][1]?['Title']}","valueOn":"true","valueOff":"false"},{"type":"Input.Toggle","id":"t3","title":"@{body('複数の項目の取得')?['value'][2]?['Title']}","valueOn":"true","valueOff":"false"}],"actions":[{"type":"Action.Submit","title":"チェックしたものを完了にする"}]}
メッセージ欄にカードのJSONを貼った状態
実際の画面。貼ると、title の式が紫の fx body(...) の部品に変わります。これがリストの項目名です。
★このJSONで押さえるところは3つだけです:
  • Input.Toggle =チェックの部品。3つ並べているので、チェックが3つ出ます。
  • id(t1 / t2 / t3)=答えを受け取るときの名前。あとで body/data/t1 のように使います。
  • valueOn / valueOff =チェックしたとき/しないときに送られる値。ここでは "true" / "false" という文字を送るようにしています。
⚠️ title の中の式について: 3つの title には body('複数の項目の取得')?['value'][0]?['Title'] のような式が入っています。[0] が1件目、[1] が2件目、[2] が3件目です。STEP 2 のアクション名を「複数の項目の取得」のままにしておくと、この式がそのまま通ります。名前を変えた場合は、式の中の名前も同じに直してください。
STEP 4

条件を入れる前に、1回動かして答えを見る

次の STEP で使う式は、カードから返ってくる答えの形が分からないと作れません。先に1回だけ動かして、答えを見ておきます。条件がまだ無いので、リストは変わりません。

  1. 右上の 「保存」 → 「テスト」→「手動」→「フローの実行」。
  2. Teams に届いたカードで、3件のうち2件だけチェックを入れて送信します。
  3. フローの実行結果の画面で、カードのアクションをクリックし、出力をコピーします。
  4. headers と responder を消して、body と data の形だけを残します(下のような形になればOK)。
  5. M365 Copilot チャットに、下の指示をそのまま貼って、t1 の値を取り出す式を聞きます。
Teamsに届いたカード。3件のうち2件にチェック
実際の画面。2件にチェックして送信したところ。
Copilot にそのまま貼る指示(t1 の式を聞く)
Power Automate で「アダプティブ カードを投稿して応答を待機する」アクションを使っています。
テスト実行したときの出力は次のとおりです(関係ない部分は消しています)。

{
  "body": {
    "data": {
      "t1": "true",
      "t2": "false",
      "t3": "true"
    }
  }
}

t1 の値を取り出す式を、Power Automate の式の書き方で1行だけ教えてください。
アクション名は「アダプティブ カードを投稿して応答を待機する」です。説明は不要です。
⚠️ 出力をそのまま貼らない: 出力には 送信した人の名前・メールアドレス・テナントIDや、署名(sig=)つきのURLが入っています。Copilot に貼るのは body と data の形だけにしてください。body を消すと、Copilot が返す式から body が抜けてしまうので、body は残します。
STEP 5

チェックが入ったものだけ、完了にする

カードの下に 「条件」を置き、その「はいの場合」に 「項目の更新」を入れます。これを3件ぶん並べます。

  1. +新しいステップ→ 「条件」を追加します。
  2. 左辺に、カードの答え t1 を入れます(STEP 4 で Copilot が出した式、または下の式を貼ります)。
  3. 真ん中は 「次の値に等しい」、右辺は true と手で入力します。
    • 「はい/いいえ」ではなく、true という4文字を打ちます。 カードから返ってくるのが文字だからです。
  4. 「はいの場合」の中に SharePoint「項目の更新」を追加します。
    サイトのアドレス/リスト名STEP 2 と同じID1件目のID(下の式)完了はい
  5. 「いいえの場合」は空のままにします。まだ終わっていないので、何もしません。
  6. できた条件をまるごとコピーして2つ増やし、t1 を t2 / t3 に、IDの [0] を [1] / [2] に変えます。
条件の設定。body/data/t1 が true と等しい
実際の画面。左の値にカーソルを合わせると、中に入っている式が吹き出しで見えます。
項目の更新の設定。IDに式、完了をはい
はいの場合に入れる「項目の更新」。ID に式、完了は「はい」。
条件の左辺に入れる式(1件目)
outputs('アダプティブ カードを投稿して応答を待機する')?['body/data/t1']
「項目の更新」のID欄に入れる式(1件目)
body('複数の項目の取得')?['value'][0]?['ID']
⚠️ 式の中のアクション名は、自分の画面に合わせてください。
  • 式の中のアクション名は、フローの中で使われている名前と一字一句同じにします。画面では空白に見えても、中では _(アンダースコア)になっていることがあります。
  • 確かめ方:アクションの「…」→「コードの表示」を開くと、中で使われている名前が見えます。カードJSONの中の body('複数の項目の取得') も同じです。
  • アクション名の表示は環境によって変わることがあります。うまく参照できないときは、動的コンテンツの一覧から選ぶのが確実です。
  • それでも分からないときは、1回テスト実行して出力をコピーし、Copilotに貼って式を作ってもらいます(下の「Copilotに聞く4か所」③)。
STEP 6

もう一度テストする(完成)

  1. 右上の 「保存」→ 「テスト」→「手動」で実行します。
  2. Teams にカードが届きます。3件のうち2件だけチェックを入れて、下のボタンを押します。
  3. SharePoint「今日のやること」を開くと、チェックした2件だけが完了になり、残り1件はそのままのはずです。
  4. もう一度実行すると、残り1件だけがカードに出ます(完了したものは Done eq 0 で除かれるため)。
うまくいかないとき:
  • カードが届かない → Teams に 「ワークフロー」アプリが入っているか/Recipient が自分になっているか。
  • フィルター クエリでエラー → 列の内部名が Done になっているか(STEP 0)。
  • チェックしたのに完了にならない → 条件の右辺が true(文字)になっているか。「はい」ではありません。
  • カードの項目名が空になる → リストの未完了が3件未満です。やることを足してください。
  • エラー文が英語で出た → 読まずに、そのままコピーしてCopilotに貼ります(下の④)。
+

Copilotに聞く4か所(そのまま貼れます)

今日つまずくところは、だいたいこの4つです。手を動かすのは自分、分からないところだけ聞く、という使い方をします。Power Automate内蔵のCopilotではなく、M365 Copilot チャットを開いて貼ってください。

① 日本語の列名が動かない理由を聞く

SharePointで「完了」という日本語の名前で列を作りました。
Power Automateのフィルタークエリから指定できません。
なぜですか。どう作り直せばよいですか。

② カードのJSONを出してもらう

コツは形を指定することです。放っておくと長い解説が付いてきて、どこを貼ればよいか分からなくなります。

Adaptive Card 1.4 の JSON だけをください。Power Automate の「アダプティブ カードを投稿して応答を待機する」のメッセージ欄にそのまま貼ります。
要素は次のとおりです。
・見出し「今日のやること」(太字・大きめ)
・その下に小さい説明「終わったものにチェックを入れて、まとめて送ってください。」(うすい色)
・チェックを3つ(Input.Toggle)。id は t1 / t2 / t3、値は文字列の "true" / "false"(valueOn / valueOff)
・3つのチェックの title には、次の式をそのまま入れる
 t1:@{body('複数の項目の取得')?['value'][0]?['Title']}
 t2:@{body('複数の項目の取得')?['value'][1]?['Title']}
 t3:@{body('複数の項目の取得')?['value'][2]?['Title']}
・送信ボタンを1つ(Action.Submit、表示は「チェックしたものを完了にする」)
説明は不要です。JSON だけ返してください。

③ 答えを取り出す式を作らせる(材料を先に見せる)

先にテスト実行の出力を貼るのがコツです。貼らずに聞くと、項目名を推測した式が返ってきて、そのままでは動きません。

Power Automate で「アダプティブ カードを投稿して応答を待機する」アクションを使っています。
テスト実行したときの出力は次のとおりです(関係ない部分は消しています)。

{
  "body": {
    "data": {
      "t1": "true",
      "t2": "false",
      "t3": "true"
    }
  }
}

t1 の値を取り出す式を、Power Automate の式の書き方で1行だけ教えてください。
アクション名は「アダプティブ カードを投稿して応答を待機する」です。説明は不要です。

④ エラー文は、訳さずそのまま貼る

エラー文にはアクション名・場所・型が入っています。訳すとその手がかりが消えます。英語のまま全文を貼ってください。

Power Automateでこのエラーが出ました。

(エラー文を全文そのまま貼る)

意味と、どこを直せばよいかを教えてください。
⚠️ 貼る前に一度だけ確認: 社名・氏名・取引先など、そのまま貼ると困る文字が混ざっていないか見てください。混ざっていたら、サンプルの文字に置き換えてから貼ります。
💡 一発で終わらなくて普通です。 返ってきたものを試して、違ったらその結果をまた貼る。会話を続けるのが正しい使い方です。
← 第28回の資料にもどる 🏠 サイトのトップへ