PowerAutomateクラウドフローで祝日にフローが動かなくなるようにする設定【初心者向けに丁寧に解説】

  • URLをコピーしました!
目次

今回作るフローの流れ

画像の流れどおり、全体はこの順番です。

  1. Recurrence で定期実行
  2. 作成 で日本時間の今日の日付を作る
  3. HTTP で祝日一覧を取得
  4. 条件 で今日が祝日か判定
  5. True なら終了
  6. False なら通常処理へ進む

この構成にしておくと、既存フローの先頭に追加するだけで使いやすいです。
「まず祝日判定して、祝日なら止める」という流れなので、ほかの業務フローにもそのまま応用できます。

まず準備しておくこと

今回はクラウドフローで作業します。
新規作成でも既存フローの編集でも大丈夫です。

初心者の方は、まず次のイメージで覚えてください。

  • Recurrence は「毎日何時に動かすか」
  • 作成 は「今日の日付を文字で作る」
  • HTTP は「外部サイトに問い合わせる」
  • 条件 は「Yes / No で分岐する」
  • 終了 は「ここでフローを止める」

この意味だけ分かっていれば、十分進められます。


手順1:Recurrenceを設定する

最初にフローの開始部分を作ります。

操作手順

  1. Power Automateでクラウドフローを作成します
  2. トリガーで Recurrence を選びます
  3. 実行頻度を設定します

たとえば、毎朝1回だけ動かしたいなら、次のように設定します。

  • 頻度:1 日
  • 時刻:9:00

ここはあなたの業務に合わせて変更して大丈夫です。
大事なのは、このあと祝日チェックが入るので、毎日実行にしても祝日は自動停止できるという点です。


手順2:「作成」アクションで日本時間の今日の日付を作る

次に、今日の日付を「2026-03-25」のような形で作ります。
ここは今回の設定の中でもかなり重要です。

操作手順

  1. Recurrenceの下にある を押します
  2. アクションの追加 をクリックします
  3. 検索窓で 作成 と入力します
  4. データ操作 – 作成 を選びます

追加できたら、入力 の欄に次の式を入れます。

formatDateTime(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time'),'yyyy-MM-dd')

入力するときのコツ

初心者の方がつまずきやすいのは、式を普通の文字として入れてしまうことです。
必ず、動的なコンテンツや式を入力できる画面から入れてください。

この式の意味

この式は、次の順番で処理しています。

  • utcNow()
    今のUTC時刻を取得する
  • convertTimeZone(utcNow(),'UTC','Tokyo Standard Time')
    UTCを日本時間に変換する
  • formatDateTime(...,'yyyy-MM-dd')
    日付を「年-月-日」の形に整える

つまり、日本時間での今日の日付を、祝日判定しやすい文字列にしているわけです。

なぜ日本時間に変換するのか

Power Automateでは、時刻がUTC基準で扱われることがあります。
そのままだと、日本では日付が変わっているのに、フロー上ではまだ前日扱いになることがあります。
祝日判定では日付のズレが一番困るので、最初に日本時間へ変換しておくのが安全です。

このアクション名について

記事内では「作成」という名前で説明しています。
条件式の中でも outputs('作成') と使うので、アクション名を変えない方が分かりやすいです。
もし名前を変更した場合は、後で入力する式の中の名前も合わせて変更する必要があります。


手順3:HTTPアクションで祝日一覧を取得する

次に、祝日データを取得します。
今回は、日付単体のAPIではなく、祝日一覧のJSONを取得して、その中に今日の日付があるかをチェックします。

操作手順

  1. 「作成」の下にある を押します
  2. アクションの追加 をクリックします
  3. 検索窓で HTTP と入力します
  4. HTTP アクションを選びます

追加したら、各項目を次のように設定します。

メソッド

GET

URI

https://holidays-jp.github.io/api/v1/date.json

そのほかの項目

  • ヘッダー:空でOK
  • 本文:空でOK
  • 認証:通常は不要

このHTTPで何をしているのか

このURLにアクセスすると、祝日データがJSON形式で返ってきます。
たとえばイメージとしては、こんな感じのデータです。

{
"2026-01-01": "元日",
"2026-01-12": "成人の日"
}

つまり、日付がキー、祝日名が値になっています。
この一覧の中に、さきほど「作成」で作った今日の日付が含まれていれば、その日は祝日です。

初心者向けポイント

HTTPという言葉を見ると難しそうですが、今回はかなりシンプルです。
やっていることは「祝日一覧が載っているページに取りに行く」だけです。
メソッドをGETにしてURLを入れるだけなので、ここは落ち着いて入力すれば大丈夫です。


手順4:条件アクションで今日が祝日かどうかを判定する

ここが今回のメインです。
HTTPで取ってきた祝日一覧の中に、今日の日付が含まれているかをチェックします。

操作手順

  1. HTTPの下にある を押します
  2. アクションの追加 をクリックします
  3. 検索窓で 条件 と入力します
  4. 条件 を選びます

条件画面が出たら、通常の「左辺・比較・右辺」という形ではなく、式で判定する方法にすると分かりやすいです。

条件に入力する内容は次です。

contains(string(body('HTTP')), outputs('作成'))

この式の意味

この式は、次のような意味です。

  • body('HTTP')
    HTTPアクションで取得した中身を取り出す
  • string(body('HTTP'))
    その中身を文字列として扱う
  • outputs('作成')
    作成アクションで作った今日の日付
  • contains(文字列, 検索文字)
    文字列の中に検索したい文字が含まれているかを調べる

つまり、
「HTTPで取得した祝日一覧の中に、今日の日付が含まれているか?」
を確認しています。

含まれていれば True、含まれていなければ False になります。

入力のしかたを丁寧に説明すると

初心者の方は、条件アクションで「どこにこの式を入れるの?」と迷いやすいです。
その場合は、条件で左側の入力欄をクリックし、 タブを開いて、そこへ丸ごと貼り付けるのが分かりやすいです。

もし画面の作りによって1つの式として入れにくい場合は、次の考え方でもOKです。

  • 左側:式 contains(string(body('HTTP')), outputs('作成'))
  • 比較方法:次の値に等しい
  • 右側:true

この形でも意味は同じです。

なぜ contains を使うのか

今回はHTTPの戻り値が祝日一覧全体なので、
「一覧の中に今日の日付があるかどうか」を見るのが一番シンプルです。

APIの戻り値を1個ずつ解析する方法もありますが、初心者には少し複雑です。
contains を使えば、かなり分かりやすく作れます。


手順5:True側に「終了」を入れる

条件がTrueということは、今日の日付が祝日一覧に含まれているということです。
つまり、今日は祝日です。
なので、この先の処理を止めます。

操作手順

  1. 条件の True 側の中にある を押します
  2. アクションの追加 をクリックします
  3. 検索窓で 終了 と入力します
  4. 終了 アクションを選びます

設定内容

  • ステータス:成功 でも キャンセル でも運用次第

初心者の方には、まず 成功 をおすすめします。
理由は、エラーではなく「意図的に止めた」ことが分かりやすいからです。

ここでの考え方

祝日だった場合にエラー扱いにする必要はありません。
「今日は祝日なので正常終了」という考え方で止めると、実行履歴も見やすくなります。


手順6:False側に通常の処理を入れる

Falseということは、今日は祝日ではないという意味です。
したがって、ここに普段やりたい処理を書きます。

たとえば、

  • メール送信
  • Teams通知
  • Excel更新
  • SharePointリスト登録
  • 承認依頼
  • ファイルコピー

などを入れます。

つまり、このフローはこうなります。

  • 祝日なら何もせず終了
  • 平日なら通常業務を実行

この形にしておくと、既存フローの一番上に付け足すだけで運用しやすいです。


実際に入力する内容を一覧で確認したい人向け

ここだけ見れば設定を再現できるように、入力内容をまとめておきます。

作成

formatDateTime(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time'),'yyyy-MM-dd')

HTTP

  • メソッド
GET
  • URI
https://holidays-jp.github.io/api/v1/date.json

条件

contains(string(body('HTTP')), outputs('作成'))

True側

  • 終了

False側

  • 通常のフロー処理

初心者が引っかかりやすいポイント

1. 作成 の名前を変えてしまった

条件で outputs('作成') を使っているので、アクション名が違うと動きません。
たとえば「Compose」や「日付作成」に変えた場合は、その名前に合わせて式も変える必要があります。

2. HTTPのアクション名を変えた

条件で body('HTTP') を使っています。
こちらもアクション名を変更すると、式の中の名前を修正しないといけません。

3. 式を文字として入れてしまった

式入力欄ではなく、普通のテキスト欄に入れると、ただの文字列として扱われてしまいます。
必ず式として入力してください。

4. 日本時間にしていない

utcNow() のままだと日付ズレが起きることがあります。
今回のように最初から convertTimeZone を使っておくと安心です。

5. 祝日だけ止めて土日は止めていない

今回の記事は「祝日停止」がテーマなので、土日判定は入れていません。
土日も止めたい場合は、別の条件を追加して拡張できます。


この設定が初心者におすすめな理由

この方法のいいところは、構造が分かりやすいことです。

  • 先に日付を作る
  • 祝日一覧を取る
  • 含まれているか確認する
  • 祝日なら終了

やっていることが日本語で理解しやすいので、後から見返しても意味が分かりやすいです。
また、フローの先頭に置けるので、いろいろな業務に流用しやすいのも強みです。

実際、Power Automateを触り始めたばかりの頃は、「条件の作り方」よりも「何をどういう順番で考えればいいか」で迷いやすいです。
このやり方は順番が素直なので、初学者でも再現しやすいです。


よくある質問

Q1. なぜ date.json を使うのですか?

一覧で祝日データが返ってくるため、今日の日付が含まれているかを contains で素直に判定できるからです。
初心者にとっては、1件ずつ細かく解析するより分かりやすいです。

Q2. formatDateTime(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time'),'yyyy-MM-dd') は長すぎて覚えられません

覚えなくて大丈夫です。
意味としては「今の時刻を日本時間にして、日付だけの形にする」です。
よく使うので、メモ帳や社内テンプレートに保存しておくと便利です。

Q3. 条件は本当に contains(string(body('HTTP')), outputs('作成')) でいいのですか?

今回の構成ではこれでOKです。
HTTPで取得した祝日一覧の文字列の中に、今日の日付があるかどうかを見るシンプルな方法です。

Q4. 祝日のときに終了ではなく通知だけ出したいです

True側で「終了」の前にTeams通知やメール送信を入れればできます。
たとえば「本日は祝日のため処理をスキップしました」と送る運用も可能です。

Q5. 既存フローに後から追加できますか?

できます。
基本的には、今ある処理の前に今回の3つのアクションと条件分岐を入れればOKです。
False側に既存処理を移せば、祝日だけスキップできます。

Q6. 土日も止めたいです

できます。
ただし今回の記事は「祝日はフローが動かなくなるようにする設定」に絞っています。
まずは祝日判定だけを確実に動かし、その後で土日条件を追加するのがおすすめです。

Q7. APIが取得できなかったらどうなりますか?

ネットワークや接続先の問題でHTTPが失敗する可能性はあります。
心配な場合は、HTTPの後ろに失敗時の分岐や通知を追加すると安心です。
ただ、最初の1本としては、まず今回のシンプル版を完成させるのが先で大丈夫です。

Q8. TrueとFalse、どっちに通常処理を入れるのですか?

今回の条件では、Trueが祝日Falseが祝日ではない日です。
したがって、通常処理は False側 に入れます。
ここを逆にすると、平日に止まってしまうので注意してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次