Microsoft Lists と Power Automate を使って周知事項リストを作ってみた

# ことの始まり
とある日のこと。

ワイ「（そういえば、お願いしていた作業、みんなやってくれてるかな？）」
ワイ「（どれどれ・・・、うーん、Ｍ君やってくれてないがな）」

ワイ「Ｍ君、以前にお願いしていた作業、期日過ぎてるけど出来てないやん」
Ｍ君「あっ、うっかりしてました。すぐにやります！」
Ｍ君「でも、これっていつ連絡貰ってましたっけ？」

ワイ「（あれっ？メールで案内したんやったかな・・・、Teams やったかな・・・）」
ワイ「（そやそや、Teams やったわ）」

ワイ「ほら、先週 Teams のこのスレッドで案内しとるやん（キリッ）」
ワイ「事務処理とはいえ、期日は守らなアカンで」
Ｍ君「すみません、スレッドが流れてしまって見落としていました」

Ｍ君「ところで、Teams のスレッドはメールみたいにフラグ管理出来ないんですかね？」
ワイ「いやいや、ほら、大事なスレはピン留めしてるから分かるやろ？」
Ｍ君「でも、古いものも残ってるし、自分が対応したか分からなくなりますよね？」
ワイ「（・・・）」
ワイ「まぁ、何にせよ他の人はちゃんと出来てるんやから、Ｍ君もしっかり頼むで」
Ｍ君「はい、気を引き締め直します！」

数時間後・・・。

ワイ「（なんか、モヤモヤするなぁ・・・。あの対応で良かったんやろか）」
ワイ「（Ｍ君の意見にも一理あるし、きちんと案内できてたら対応してくれてたはずやしなぁ・・・）」

ワイ「（うーん・・・・　　( ﾟдﾟ)ﾊｯ！）」
ワイ「（人が悪いんやない！仕組みが悪かったんや！！）」

# ということで、作ってみた
少々前置きが長くなりましたが、上記の課題をクリアするために無い知恵を絞って周知事項リストを作ってみました。

なるべく手間と費用をかけたくなかったので Microsoft 365（旧 Office 365）に使用ライセンスが含まれている Microsoft Lists と Power Automate を使用しています。

完成形は下のイメージです。Microsoft Lists には Teams 用のアプリが用意がされているので、チャネルのタブとして表示しています。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/b7cab083-75ac-2164-73a9-0e109b111a20.png)|
|:-:|

## データ構造と画面を作成する
データ構造は Microsoft Lists に定義していきます。誤解を恐れずに言うならば Microsoft Lists はデータ構造を定義することで、データの器と入力フォームを自動生成してくれるツールです。Excel に近い概念で利用できるので、非常にとっつきやすいです。

前述の通り Microsoft Lists には Teams 用のアプリが用意されているので、まずはアプリの追加でチャネルに組み込みます。次にデータ構造を定義していくのですが、数種類のデータ型の中から適切なものを選んで列として追加していくだけです。ちなみに、必須項目や入力チェックの設定もここで出来ます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/9365fe50-0761-38bb-1014-48007ae23c9c.png)|
|:--|

今回は以下のような感じで定義しました。入力フォームのみで表示されればよい項目は列表示を外しています。

| 列名 | タイプ | 列表示| 用途 |
|:-|:-|:-:|:-|
| 状態 | 選択肢 | ○ | 期日に対する状態（オープン / 締切間近 / クローズ） |
| タイプ | 選択肢 | ○ | 周知タイプ（周知事項 / 作業依頼 / 募集） |
| 対象 | 選択肢 | ○ | 周知対象者（値の手動追加を許可） |
| タイトル | １行テキスト| ○ | 周知事項のタイトル |
| 内容 | 複数行テキスト | ○ | 周知事項の内容 |
| 期日 | 日付と期日 | ○ | 周知事項の対応期日 |
| 確認・応募 | 選択肢 | ○ | 確認または応募する際の署名  |
| リンク | ハイパーリンク | | 参照先 URL |
| 重要 | はい/いいえ | | 期日に関係なく周知が必要か（ビューの条件用） |

すると、こんな感じで入力フォームが自動生成されます。めちゃめちゃ簡単ですね！！

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/9bae56c4-9a48-eebd-b12f-2623aa2ceb14.png)|
|:-:|

一方、一覧画面の方はこんな感じです。Excel のように並び替えやフィルタ（下図①）が出来るのですが、その設定に名前をつけてビューとして保存（下図②）することが出来ます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/631bf5a6-2c6b-9286-f1f1-0ca6d9059a26.png)|
|:-:|

例えば、期日の前後でビューを分けたり出来るのですが、今回はひと工夫して「重要のみ」というビューを用意してみました。

単純に「重要」がチェックがされている周知事項を表示するだけなのですが、将来入ってくる新人や中途採用者にも周知が必要なものを一覧で見てもらえるようにと考えました。

これだけでも使い始められそうな気がしますが、今回は自動化処理を組み込んで、もう少しだけ使い勝手を向上させてみました（使ってみたいだけという説あり）。

## 自動化処理を組み込む
自動化処理は Power Automate を使って作成していきます。今回は、以下の２つの自動化処理を組み込んでみます。

* 周知事項追加通知：新規の周知事項が登録された際に Teams チャネルへの投稿とメール通知を行う
* 周知事項状態変更：期日に応じて周知事項の「状態」を 「締切間近」「クローズ」に更新する

ここで注意が必要なのですが、実は Microsoft List の実体は Sharepoint のリストなので、Power Automate のアクションは Sharepoint 用の中から探す必要があります。

### 周知事項追加通知
定義は Power Automate の「マイ フロー」画面にある「新しいフロー」ボタンを押して行っていきます。フローのタイプは「自動化したクラウド フロー」で、まずはトリガーを指定する必要があるので、Sharepoint の「項目が作成されたとき」を指定します。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/7b0d5334-c69e-d72a-5d4c-44062240550a.png)|
|:-:|

フロー定義の先頭に先程追加したトリガーが表示されるので、Sharepoint のアドレスとリスト名を選択します。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/47300346-8738-c8bb-5ad0-f7b2be2e9be6.png)|
|:-:|

Teams への投稿とメール送信には以下のアクションを使いました。アクション名に「（プレビュー）」や、バージョンが付いているので、今後もどんどん更新されていくと思います。

| 処理 | 接続先 | アクション名 | 
|:-|:-|:-|
| Teams への投稿 | Teams | チャットやチャネルにアダプティブカードを投稿する（プレビュー） |
| メール送信 | Outlook | メールの送信（V2） |

アクションの設定は直感的に分かるものばかりですが、Teams への投稿にはアダプティブカードを使用します。アダプティブカードとは、投稿文とデザインレイアウトを JSON で定義できるようにしたものです。

実際の見た目はこんな感じになります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/f6d040a8-abbe-42a9-0c76-ff9436f1534d.png)|
|:-:|

ちなみに、アダプティブカードの定義は結構ややこしいので、デザイナーを使うことをオススメします！

https://adaptivecards.io/designer/

通知処理の設定はこれだけです。要領さえ分かっていれば５分でできる内容ですね！

### 周知事項状態変更
次は周知事項の状態を自動変更する処理を組んでいきます。

先ほどと同じ要領で、今度は「スケジュール済み クラウドフロー」というフロータイプで定義を作成していきます。最初に実行時刻や繰り返し間隔を設定する必要があるので、ここでは毎日午前９時に動くように設定してみました。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/071ce383-10a0-54c7-f73f-90477d77d6f6.png)|
|:-:|

フロー定義はこんな感じです。期日までの日数を日本時間で判定する必要があるので、タイムゾーンの変換処理を挟んでいます。後は、Sharepoint からリストを取得してループで処理していくだけです。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/7c534b5b-7144-ff21-6710-c1bd16a9f14d.png)|
|:-:|

「リストのループ処理」の中身はこんな感じです。処理日付と周知項目の期日を比較し、期日を過ぎていれば「クローズ」、期日まで３日を切ったら「締切間近」に状態を変更しています。

画面がゴチャゴチャするので折りたたんでいますが、「締切間近」の判定と変更処理は「締切間近状態判定処理」の中に「クローズ状態判定処理」と同様の形式で定義しています。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/dfb92f9c-7ae7-aaa1-6355-0651d3f8c11f.png)|
|:-:|

Microsoft Lists からのリスト取得と更新には以下のアクションを使っています。

| 処理 | 接続先 | アクション名 | 
|:-|:-|:-|
| Sharepoint からリスト取得 | Sharepoint | 複数の項目の取得 |
| Sharepoint のリスト更新 | Sharepoint | 項目の更新 |

状態変更の設定も以上です！

# 実際に使ってみて
まず、周知事項を一元管理できるようになったメリットが大きかったです。冒頭に記載した通り、従来はメールや Teams 投稿でバラバラに案内していたので、情報が埋もれてしまい対応が漏れるということが起こっていました（通知した本人が、いつどのルートで案内したか分からなくなる有様・・・）。

それが、この仕組みを導入することで「周知事項リストだけ見ておいてね」で済むようになりました。また、メールと Teams 投稿で通知も行われるので見落とすということが大幅り、「確認・応募」に署名を入れてもらうことで対応状況まで把握できるようになりました。

また、Microsoft Lists は Teams といい感じで連携がされていて、あれこれツールを立ち上げなくていいのはもちろん、トピックスに対する会話も可能で、問い合わせや、その内容の共有がそのまま出来るのが非常に便利でした。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036913/59ab2482-0b3b-7e83-901a-d37541ed081b.png)|
|:-:|

その他、使えそうだなと思ったのは下記のような機能です。

* Excel へのエクスポート
* Excel ライクなグリッドビューでの複数トピックス一括編集
* 変更履歴の自動保存（バージョン管理）
* Power Apps との連携
* Power BI との連携

他にも色々な機能があったり、連携が出来るようなので詳しくは公式サイトを見てみてください。

https://www.microsoft.com/ja-jp/microsoft-365/microsoft-lists

# まとめ

色々調べながら作成したので半日ほどかかってしまいましたが、なかなか良いものが出来たなと感じています（※個人の感想です）。

大量データに対応できるかや、複雑な要件に対応できるかなど、気になる部分が無いわけではないですが、Microsoft Lists と Power Automate の組み合わせはとにかくお手軽で、ちょっとした業務改善の用途などに力を発揮してくれそうだと感じました。

まだまだマイナー（？）なツールだと思うので、この記事を読んで使ってみようかなと思って頂けたら嬉しいです。