Power AutomateでGoogle カレンダーの予定をOffice 365にコピーする

# Power Automate
Microsoft 認定資格 [PL-900: Microsoft Power Platform 基礎](https://learn.microsoft.com/ja-jp/certifications/exams/pl-900)の学習をしています。

Power Apps, Power Automate, Power BI, Virtual Agentsなんかを学習するのですが、ラーニング パスでいくつかサンプルを作成しています。
こういう演習は、自分にとって身近であるほど退屈にならないし、デベロッパー・エクスペリエンスたりうるものだと思います。
(とはいっても、Power Platformでの開発は従来の“開発(Development)”という言葉ほど、ガチガチなものではありません)
## 何を作る？
Power Automateで何ができるかの説明やアカウント等の環境の準備は色々なところに解説があると思うので省きます。
GoogleやOffice 365といったウェブ上の様々のサービスをトリガー(きっかけ)やアクション(動作)にできるということで、
まず1つやってみたい事を思いつきました。

## Google カレンダーで作成した予定をOffice 365の予定表に同期する
職場ではGoogleのアカウントとOffice 365のアカウントを併用しているのですが、
どちらも似たようなサービスがあって使い分けが必要になってきます。

会議はTeamsを使う事が多いのでOfficeとの親和性があるのですが、
私はメールやスケジュールはGoogleの方を使っています。

Googleだけを使っているとOfficeメインで使っている人から私の予定が確認できなかったり、
Teamsの状態表示(取り込み中とか)が変化しません。

そこで、Google カレンダーで予定を作成するのをトリガーにしてOffice 365にコピーするようにしてみたいと思います。
ちなみにGoogleカレンダーでOffice 365の予定表を表示させたりその逆を行う事はインポート等の基本的な機能で可能ですが、
予定自体はどちらかに入っているのを同時に見ているだけです。

## テンプレートから
新規に作成してもいいですが、何しろ初めてなのでひな形から作成してみます。
Power Automateにはすぐに使えそうな数多くのテンプレートがあります。
その中から今回の要件に近いものを探します。
**Google カレンダー**で検索すると、**Google カレンダーにイベントが追加されたときにメールを送信する**がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/9706e49f-17c6-21aa-b7b2-08c2d20571cc.png)
トリガーはGoogle カレンダーで、アクションはOffice 365のOutlookでメールを送信するみたいです。
“メールを送信”のアクションを予定の作成に作り変えれば、実現できそうな気がします。
各サービスに接続したら、**続行**をクリックしてテンプレートからフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/6d7b9018-1b4d-e8f8-d493-2b55d2ffc52f.png)
初期状態はこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/d22fb2a3-a4d9-0e2d-8dc5-199372b390ad.png)
**カレンダーID**でGoogleのアカウントを選択します。右端の▽でドロップダウンが現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/65dac329-dac6-b65d-90ba-ee6a4b65590e.png)
**＋**ボタンをクリックして、新しいステップを挿入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/86e5f324-beca-8432-5c23-d45475e6caae.png)
Office 365の予定の作成は、**イベントの作成**でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/e6450f40-282a-3720-bd28-773bcf3558f2.png)
詳細オプションを展開して、入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/16205a67-bca7-887d-424d-e1ea97263fae.png)
**予定表 ID**はドロップダウンを展開すると**Calendar**が出てきます。
環境によって変わるかもしれませんが、Office既定の予定表はこれを入力すれば良いようです(後で編集する時にはIDに展開されています)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/a48abce7-3e45-27b8-4367-c16cbb2d9e01.png)
**件名**は動的なコンテンツから**イベント リスト イベント タイトル**を使います。入力にフォーカスすると自動的にUIがポップアップします。
**イベント リスト イベント**は、Google カレンダーで作成した予定を指すと思えば良いでしょう。
同様に**開始時刻**は**イベント リスト イベント 開始日時**、**終了時刻**は**イベント リスト イベント 終了日時**
これらは動的なコンテンツのリストに現れませんが、**動的なコンテンツの検索**に`日時`等と入力すれば現れました。
**タイム ゾーン**は **(UTC+09:00) Osaka, Sapporo, Tokyo**を選択し、
**本文**は**イベント リスト イベント 説明**
**場所**は**イベント リスト イベント 場所**を入力しました。
他にも出席者等入力できる項目はありますが、この辺の扱いはGoogleとOfficeで異なっているので空にしておきます。
(もし作成すると、出席者にも案内が行われるような気がする...)
最後に、テンプレートによって作成された**Get my profile (V2)**(マイ プロフィールの取得)と**Send an email**(メールの送信)は削除します(右端の **…** → **削除**)。
## テスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/a4c7431b-7ce4-7243-f182-475df827d19e.png)
右上の**保存**をクリックして作成したフローを保存し、**フロー チェッカー**でエラーや警告がなければ**テスト**をクリックしてテストします(**手動**→**テスト**)。
Google カレンダーで予定を作成します。
本文には装飾(ハイパーリンク)も入れてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/7d3a5476-4655-3f97-fb0e-231df66d4990.png)
テスト画面の方を見ると、正常に実行されたメッセージが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/34ccd1ea-a077-c816-5e62-9deeed51ab37.png)
Officeの予定表を見てみます。
すぐに予定が作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/4ec3e8a5-fa8e-fab5-edbc-9e702b1ebbcd.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116331/0b4955a5-4617-510b-bd97-93eb0f4a096b.png)
本文の装飾も問題なく表示されています。
ちなみにPower Automateのトリガーにはイベントの変更や削除といったトリガーもあります。
それらを駆使することで変更と削除に対しても同期することができますが、
現状、一方向の管理にするとは限らないので(例えばOffice側で変更してしまうと、こんどはGoogle側への同期が必要になる)
一旦作り込みはここまでにしました。

又、このような要件に対してもっと優れたソリューションが他にあるかもしれませんが、
今回はPower Automateの学習ということで題材にしてみました。

現状、繰り返しの予定に対応していないので、またいずれ作り込んでみたいと思います。

必要がなくなったら、フローをオフにするなり削除するなりしておきましょう。
又、エクスポートすればファイルに保存して取っておくこともできます。

# Power Platformはローコード開発プラットフォーム
Power Platformでの開発はとても簡単なので、とにかく「思いつき」が全ての入り口になると思います。
「これ不便だなあ」とか「こんなのがあったらなあ」等が思いついたらまず触ってみて、
もしつまづいたらどのように解決するかをその段階で調べるというのも、良いのではないかと思います。
自分の目的を達成するという事がモチベーションにつながり、
手を動かす事で仕組みを覚えて理解が深まると、私は思っています。