Power Apps で勤務シフト作成アプリを作る その１ 概要と事前準備編

本記事は5回シリーズ（の予定）です。
その１はこちら：本記事
その２はこちら：https://qiita.com/KodamaJn/items/a16e7bb021780e51850d
その３はこちら：https://qiita.com/KodamaJn/items/00af61369887d4b8dff6
その４はこちら：https://qiita.com/KodamaJn/items/2765f395d807de13f785
その５はこちら：執筆中…

#はじめに
　先日、他部署から部内の勤務シフト作成作業の効率化について相談がありました。

　勤務シフトを作成するツールは世の中にいくつかあるのですが（しかもシフトの自動生成までしてくれるものもある！）、勤務シフトって部署によって要件のばらつきが激しいんですよね。
　単に"この時間帯は最低何人必要"というものから、個々の保持スキルの差、相性、年間の勤務バランス、希望休/希望時間帯など、要望レベルがそれぞれ違っていて、需要にぴったりくるツールって、なかなか探すのが大変です。正直、探すより作ったほうが早いと考えてしまう。

　という背景もあり、内製で手助けするのは無理かもな～と色々と話を伺っていると、実際にはシフト作成自体より、シフトを作成する前に行っている各部員の勤務希望の収集や、シフト確定の通知が紙や FAX で超絶面倒臭そうだったんですね。
　Power Apps でシフト自動作成まで実装するのは大変そうですが、希望収集や自動通知ならむしろ Power Platform の得意分野じゃないか！

　ということで、勤務希望収集からシフト確定通知まで行えるアプリを試しに作ってみました。

#完成イメージ
　希望申請アプリで各部員から申請された勤務希望を確認しながらシフトを組み、完成したら公開することで各人の予定表に追加される仕組みです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">社内から受けた勤務ダイヤ作成の効率化。<br>そもそも勤務希望の収集や確定通知が紙や FAX だったので、希望収集から確定通知まで行えるアプリを試しに作ってみました。<br>希望申請アプリで申請された希望を確認しながらダイヤを組み、完成したら公開することで各人の予定表に追加されます。<a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://t.co/YYWu4SjO9z">pic.twitter.com/YYWu4SjO9z</a></p>&mdash; Jun’ichi Kodama (@KodamaJn) <a href="https://twitter.com/KodamaJn/status/1246629201848881152?ref_src=twsrc%5Etfw">April 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<br>
　最終的には、人や勤務パターンの増減も行え、人が多すぎる場合は行間の調整も可能な仕組みを構築してみます。
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">人や勤務パターンの増減も行えます。<br>人が多すぎる場合は行間を調整します。 <a href="https://t.co/0YJEPoifmh">pic.twitter.com/0YJEPoifmh</a></p>&mdash; Jun’ichi Kodama (@KodamaJn) <a href="https://twitter.com/KodamaJn/status/1246629203987984386?ref_src=twsrc%5Etfw">April 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


#データベース設計
　弊社は E1 ライセンスを利用している都合上、データベースは SharePoint のリストを利用します。

　勤務シフトは「いつ、だれが、なにをやる」なので、日付、ユーザー、シフトパターンの情報が必要です。
　シフトに組み込むユーザーや勤務パターンは変動しますので、データベースはこんな感じで3つのリストを作成することにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405544/c73c54b6-3e80-56b6-fd9b-95419cc48148.png)
　ユーザーリストはそもそも分ける必要がなさそうに見えますが（笑）、<font color=Blue>シフト表にどのユーザーを表示するかの定義が必要なので、</font>作成しました。
　パターンリストにある「最低勤務人数」はシフト作成時に各パターンの人数が不足していないかをチェックするために利用します。「RGBA値」は各パターンを色分けして見やすくするために利用します。RGBA値の保存方法については、以下の記事をご参照ください。
　[Power Apps で色の設定情報を読み書きする簡単な方法](https://qiita.com/KodamaJn/items/1bc02fb23a889597c7e4)

　メインリストには、「とある日付のとある勤務者のシフト」が1レコードになるように格納します。希望の勤務パターン（希望があれば）は、実際の勤務パターンを列を分けて1レコード内に格納します。

<br>
　上記のイメージをもとに、以下のように SharePoint リストを作成します。リレーションシップの設定は行いません。また、タイトル列は使いませんので、リストの設定からタイトル列の必須入力を"いいえ"にしておきましょう。
　本来、関連する列の列名は同じである方が望ましいと思うのですが、今回は作成過程でどのリストの列を参照しているかを分かりやすくするため、列名の先頭1文字にリスト名を表すアルファベットを付けています。

###勤務シフト_ユーザー
| 列名                | 型           | 用途             |
|:--------------------|:-------------|:-----------------|
| uWorkUser           | ユーザー     | 勤務者           |


###勤務シフト_パターン
| 列名           | 型           | 用途          |
|:---------------|:-------------|:--------------|
| pWorkPattern   | 1 行テキスト | 勤務パターン  |
| pMinimunNumber | 数値         | 最低勤務人数  |
| pRed           | 数値         | R値(色分け用) |
| pGreen         | 数値         | G値(色分け用) |
| pBlue          | 数値         | B値(色分け用) |
| pAlpha         | 数値         | A値(色分け用) |

###勤務シフト_メイン
| 列名                | 型           | 用途             |
|:--------------------|:-------------|:-----------------|
| mWorkDate           | 日付         | 勤務日           |
| mWorkDateValue      | 数値         | 勤務日数値 ※    |
| mWorkUser           | ユーザー     | 勤務者           |
| mWorkPattern        | 1 行テキスト | 勤務パターン     |
| mRequestWorkPattern | 1 行テキスト | 希望勤務パターン |

※2020/06/19 時点で日付列のフィルタリングも委任可能となりましたので日付数値列を用意する必要はありません。
本記事執筆時点では SharePoint リストの日付列をフィルタリングが委任できなかったため回避方法として数値列を用意し利用しています。ご了承ください。

（以下参照）
[PowerAppsで遭遇する５つの委任問題とちょっと強引な回避方法（SharePointリスト利用時）その１](https://qiita.com/KodamaJn/items/4341865e6784847a005d)
<br>
　また、以後の作業のために、各リストに適当に何か入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405544/b484b6ba-020f-967a-dd78-b78fa53bf3c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405544/a50d298b-b8e9-be1a-e36d-2fab595adef4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405544/4c7cc74b-b87d-b7a1-5caa-79919b875fb3.png)


# おわりに
　これで、データベース側の準備は完了です。
　続いて、Power Apps でアプリを作成してきます。

　その２はこちら：https://qiita.com/KodamaJn/items/a16e7bb021780e51850d