毎朝席替えしてくれるbotを Power Automateだけで無理やり作る
2021-12-22
azblob://2022/11/11/eyecatch/2021-12-22-please-change-my-seat-by-power-automate-000.jpg

この記事はFIXER Advent Calendar 2021(https://adventar.org/calendars/6837)22日目の記事です。

私はFIXERの中で、営業・企画の担当をしていて、8人のメンバーと共に仕事をしています。初めは各々決まった席で仕事をしていたのですが、「日替わりで席替えした方が面白いかも!」となり、毎日Slackでみんなの席を教えてくれるbotを、Power Automate だけで作ってみました!

タイトルで「無理やり」と書きましたが、正直Sharepoint等と連携すれば、もっとスマートな方法があるはずなので、①少人数 かつ ②とにかく同じものをそのまま作りたい人、のみ参考にしてください!

手順1:スケジュール+変数を作る

今回は4人のメンバーがいて、そのメンバーに1~4の番号をランダムで振ることで席を指定します。(8人だと大変なので……)

まずは Power Automateのトリガーとして、「スケジュール済みクラウド フロー」で平日毎朝9:00に起動するように設定。
この時、あえて繰り返し間隔を「日」ではなく、「週」を選択すると、ワンタッチで平日のみ起動するように設定できるので、楽できます。

そのあと、4人分の変数を「変数」→「変数を初期化する」を使い、設定していきます。
変数の名前は seat_A~seat_Dで設定。種類は「整数」を選択します。

スケジュールフロー設定の時に、繰り返し間隔を「週」にするのがおすすめ!

手順2:1人目の席を決める

ではさっそく席決めをしていきます。
1人目は簡単です。ランダムに1~4の中から数字を選んでもらいます。

「変数」→「変数の設定」を使い、seat_A を選んだうえで、下記を入力します。

int(rand(1,5))

この時、"rand(a,b)" の時、a以上b未満の整数になるので、1~4で設定したい時は"5"にするのがポイント。

1人目の席決めは簡単

手順3:2人目の席を決める

2人目の席の決め方は、「1~4の中からランダムに選んだ時に1人目の数字と被らなければ良い」と考えます。

ここでは「条件」→「Do until」を使います。「Do until」は上段が条件、下段は動作となり、上段の条件を満たすまで、下段の動作を繰り返してくれます。
そのため、今回は上段は「seat_A は seat_B と等しくない」、下段は「seat_B に1~4の中からランダムに数字を選ぶ」動作(作り方②と同じ)を入れることで、seat_B が seat_A と重複しないように数字を設定できます。

ここで「Do until」を使い始めます。

これで2人目までは決定しました。ここからが勝負です。

手順4:3人目の席を決める

3人目の決め方も、 「1~4の中からランダムに選んだ時に1人目・2人目の数字と被らなければ良い」と考えます。この時「Do until」がノーコードで複数条件を設定できるできれば、嬉しいのですが生憎その機能は無く……

いろいろ考えましたが、こうすることに。

①下段の動作は今までと同じく、 「seat_C に1~4の中からランダムに数字を選ぶ」動作(手順2と同じ)

②上段、条件の右側にはこのような式を入れてみました。

or(equals(variables('seat_C'),variables('seat_A')),equals(variables('seat_C'),variables('seat_B')))

"equals(a,b)" は、a・bが等しいと "True" を返してくれます。("variables"は変数)
"or(a,b)" は、a・bのいずれかが "True" だと、"True" を返してくれる。

これにより、上段、条件の右側は、「CとA・CとB」のいずれかが等しいと "True" を返してくれるようになりました。

③上段左側にも "True" を入れ、真ん中の判定基準は「次の値に等しくない」を選択します。

もっといい方法ないのかな…

この①→②→③により、 「CとA・CとB のいずれかが等しい、状態ではない」 =「CとA・CとB がいずれも等しくない」という条件が作ることができ、重複しない席番号を選べるようになりました。

もっといい方法がありそうな気がしますが、一旦これで出来たので、ひとまず満足してます(笑)

手順5:4人目の席を決める

さて、4人目は3人目と同じです。上段、右側の条件を「DとA・DとB・DとC のいずれかが等しい、状態ではない」ことを確認するので、下記のような式を入力してみます。

or(equals(variables('seat_D'), variables('seat_A')), equals(variables('seat_D'), variables('seat_B')),equals(variables('seat_D'), variables('seat_C')))

比較対象のDと既に決まったA・B・Cをそれぞれ比較しています。
長くなりましたね。これを繰り返せば、何人でも増やせます。

増やすときは、Power Automate の中で記入すると欄が小さくて書きにくいので、私はメモ帳とかを利用して書きました。

確認:席番号をSlackで通知してみる

最後にSlackへ席番号の一覧を通知してみましょう。

無事、4人分の席番号を割り振ることができました。

できましたね。

まとめ

繰り返しになりますが、「たぶんもっと簡単に作れる方法があるはずです!」
ただひとまず作りたい!ってなった人が、とにかく見て作ってもらえるレシピと思って頂ければと思います。

私はカタカタ、コーディングはできない分、ローコードでできる条件や構文を考えてみました。
工夫次第でいろんなことができそうなのが、Power Automate の良いところですね。

それでは、また!