SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Power Automate Desktopチュートリアル

無償デスクトップ自動化ツール「Power Automate Desktop」にタイマー機能を加え、任意にフローを実行する

Power Automate Desktopチュートリアル 第22回

  • X ポスト
  • このエントリーをはてなブックマークに追加

待機時間を制御する全体のフローの作成

 サブフローができたので、ここからは新たにメインフローを作成し、前節で作成したサブフローを指定した時刻で繰り返し呼び出します。

 以下の内容のテキストファイルをドキュメントフォルダーの直下に[ScheduleFlow.json]という名前で保存します。先頭から

  • 別フロー実行時刻
  • 終了時刻
  • 実行の間隔(分)

を表すものとします。開始時刻はフローの実行開始予定より後にしてください。終了時刻は、開始時刻+間隔より後にしてください。

 以下の例では、4/25 23:00から4/26 23:00までの間5分ごとに別のフロー(BrowserShotFlow)を呼び出す設定例です。フローができていない段階では、仮の値を記載しておき、完成して実行直前に適切な時刻を設定することにしましょう。

[ScheduleFlow.json]
{
    "TimeOfNextRun": "2023/04/25 23:00",
    "TimeOfEnd": "2023/04/26 23:00",
    "WaitingMin": 5
}

[1]新しいフローを作成する

 Power Automate for desktopを開きます。トップ画面から[+新しいフロー]をクリックして、適当な名前(ここでは「ScheduledFlow」)で新規のフローを作成します。

[2]設定ファイルのあるドキュメントフォルダーパスを取得する

 [フォルダー]アクショングループから[特別なフォルダーを取得]アクションを配置します。

図:ドキュメントフォルダーの取得アクションの配置
図:ドキュメントフォルダーの取得アクションの配置
図:ドキュメントフォルダーの取得アクションの設定
図:ドキュメントフォルダーの取得アクションの設定

 以下の入力/選択をして保存します。

  • 特別なフォルダーの名前:ドキュメント
  • 生成された変数:%Documents%

[3]設定ファイルを読み込む

 [ファイル]アクショングループから[ファイルからテキストを読み取る]アクションを配置します。

図:ファイルからテキストを読み取るアクションの配置
図:ファイルからテキストを読み取るアクションの配置
図:ファイルからテキストを読み取るアクションの設定
図:ファイルからテキストを読み取るアクションの設定

 以下の入力/選択をして保存します。

  • ファイルパス:%Documents%\ScheduleFlow.json
  • エンコード:UTF-8(既定値)

[4]設定内容をカスタムオブジェクトにする

 [変数]アクショングループから[JSONをカスタムオブジェクトに変換]アクションを配置します。

図:JSONをカスタムオブジェクトに変換アクションの配置
図:JSONをカスタムオブジェクトに変換アクションの配置
図:JSONをカスタムオブジェクトに変換アクションの設定
図:JSONをカスタムオブジェクトに変換アクションの設定

 以下の入力をして保存します。

  • JSON:%FileContents%
  • 生成された変数:%Setting%

[5]次の実行時刻を変数に設定

 同様に[変数]アクショングループから[変数の設定]アクションを配置します。

 以下の入力をして保存します。

  • 変数:%TimeOfNextRun%
  • 値:%Setting.TimeOfNextRun%

[6]終了時刻を変数に設定

 同様に[変数]アクショングループから[変数の設定]アクションを配置します。以下の入力をして保存します。

  • 変数:%TimeOfEnd%
  • 値:%Setting.TimeOfEnd%

[7]待機時間(分)を変数に設定

 同様に[変数]アクショングループから[変数の設定]アクションを配置します。以下の入力をして保存します。

  • 変数:%WaitingMin%
  • 値:%Setting.WaitingMin%

[8]終了時間と次の実行時間の差を取得する

 [日時]アクショングループから[日付の減算]アクションを配置します。

図:日付の減算(終了判定)アクションの配置
図:日付の減算(終了判定)アクションの配置
図:日付の減算(終了判定)アクションの設定
図:日付の減算(終了判定)アクションの設定

 以下の入力をして保存します。

  • 元となる日付:%TimeOfEnd%
  • 日付の減算:%TimeOfNextRun%
  • 差異を次の単位で取得:秒
  • 生成された変数:%Period%

[9]ループする

 [ループ]アクショングループから[ループ条件]アクションを配置します。

図:ループ条件アクションの配置
図:ループ条件アクションの配置
図:ループ条件アクションの設定
図:ループ条件アクションの設定

 以下の入力をして保存します。

  • 最初のオペランド:%Period%
  • 演算子:より大きい(>)
  • 2番目のオペランド:0

[10]現在日時を取得する

 [日時]アクショングループから[現在の日時を取得]アクションをループの中に配置します。

図:現在の日時を取得アクションの配置
図:現在の日時を取得アクションの配置
図:現在の日時を取得アクションの設定
図:現在の日時を取得アクションの設定

 以下の入力をして保存します。

  • 生成された変数:%Now%

[11]次の実行時刻と現在の差を取得する

 [日時]アクショングループから[日付の減算]アクションをループの中に配置します。

図:日付の減算(待機秒作成)アクションの配置
図:日付の減算(待機秒作成)アクションの配置
図:日付の減算(待機秒作成)アクションの設定
図:日付の減算(待機秒作成)アクションの設定

 以下の入力をして保存します。

  • 元となる日付:%TimeOfNextRun%
  • 日付の減算:%Now%
  • 差異を次の単位で取得:秒

[12]次の実行時刻まで待機する

 [フローコントロール]アクショングループから[Wait]アクションをループの中に配置します。

図:Wait(実行待機)アクションの配置
図:Wait(実行待機)アクションの配置
図:Wait(実行待機)アクションの設定
図:Wait(実行待機)アクションの設定

 以下の入力をして保存します。

  • 期間:%TimeDifference%

[13]他のデスクトップフローを呼び出す

 [フローを実行する]アクショングループから[Desktopフローを実行]アクションを配置します。

図:Desktopフローを実行アクションの配置
図:Desktopフローを実行アクションの配置
図:Desktopフローを実行アクションの設定
図:Desktopフローを実行アクションの設定

 以下の選択をして保存します。(前節作成したフロー)

  • Desktopフロー:BrowserShotFlow

[注意]

 ここで前節で作成したフローが表示されない場合は冒頭の[注意]の後半を参照して、そのフローを開きコードをコピーして保存して作成し、このアクションで表示されるか確認してください。

[14]次の実行時刻を計算する

 [日時]アクショングループから[加算する日時]アクションをループの中に配置します。

 次の実行時刻を計算します。

図:加算する日時(次の実行時刻)アクションの配置
図:加算する日時(次の実行時刻)アクションの配置
図:加算する日時(次の実行時刻)アクションの設定
図:加算する日時(次の実行時刻)アクションの設定

 以下の入力をして保存します。

  • 日時:%TimeOfNextRun%
  • 加算:%WaitingMin%
  • 時間単位:分
  • 生成された変数:%TimeOfNextRun%

[15]終了判定のために終了時間と次の実行時間の差を取得する

 ループの前の[8]で配置した[日付の減算](終了時刻-次の実行時刻)アクションをコピーして、貼り付けるとすぐ下にコピーされるので、ループの中の最後に移動します。

図:日付の減算アクションをコピーペースト
図:日付の減算アクションをコピーペースト
図:日付の減算アクションををドラッグ
図:日付の減算アクションをドラッグ

 ループの処理が複雑になってきたので、ここで補足しておきます。

図:ループの説明
図:ループの説明
  1. 変数Periodには(終了時刻)-(次の実行時刻)の秒数が入っていて、値が正である(つまり次の実行時間が終了時刻より前である)限りループを実行します。0以下になった場合ループを終了します。
  2. 次の実行時刻までフローを一時停止するため、(次の実行時刻)-(現在時刻)の秒数を変数TimeDifferenceに取得します。
  3. [Wait]アクションでTimeDifference秒待機します。
  4. 時刻が(次の実行時刻)になっているはずなので、別フローを実行します。
  5. (次の実行時刻)に指定の待機時間を加算して新しい(次の実行時刻)とします。
  6. ループ条件で使用するため、(終了時刻)-(次の実行時刻)を計算して、変数Periodに格納し、1に戻ります。

 上述の設定例の場合、23:00、23:05、23:10、…に別フローが呼び出されます。

[16]実行する

 最後に、メインフローを実行してみましょう。実行に際しては、ScheduleFlow.jsonの内容が「(現在時刻)<(最初の実行時刻)<(終了時刻)-(間隔)」となっていることを確認してください。

図:実行結果
図:実行結果

 上のように、指定時間の範囲で動画のキャプチャが複数記録されていれば成功です。

 指定時間で処理を実行するフローは以下のようなバリエーションが考えられます。

  • 開始時刻(最初の実行時刻)の値に現在日時をフロー内で設定する→設定に開始時刻は不要。
  • 停止ボタンで停めるまで実行する前提で、常に真となるループ条件を設定して無限ループにする→設定に終了時刻は不要。
  • 設定ファイルをループの中で実行直前に読み込むようにする→各設定値を全体の実行開始後に変更可能。
  • 繰り返しの実行時刻を一定間隔ではなく、時刻のリストの設定から読み取るようにする。
  • 一定の間隔で実行するだけで「時刻」が重要でない場合は、実行前の[Wait]アクションのみする→フローが単純化。

まとめ

 Power Automate for desktopでループと待機のあるフローから、他のフローを呼び出すことで、指定時刻と間隔でアクションを実行するフローをデザインしました。呼び出されるフローの他の例としては、第9回「データ登録を自動化する」のGmailの受信メールを取得してDBのテーブルに登録するフローなどが考えられます。また、定期的にフォルダーをチェックして、ファイルが追加されたら処理を行うフローを実行するなどといったことも考えられます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Power Automate Desktopチュートリアル連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 飯島 聡(WINGSプロジェクト イイジマ サトシ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17978 2023/08/21 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング