【PowerApps】フリーアドレスの席管理アプリSeMaSをバージョアップしてみた件

# 1. はじめに
日本の企業に吹き荒れるフリーアドレス旋風。[良い話と悪い話が複雑に絡み合っています](https://gigazine.net/news/20200605-concentration-in-workplace/)が、もうこの流れは止められません。フリーアドレスは席を移動して開放的な環境で仕事できるのが大きな特徴ですが、一方、コロナウイルスなどの感染症対策においては「誰が何時にどこに座ったか」を追うことが重要になります。

この相反する二つの潮流をスマートに解決・両立するためにはスマフォアプリなどでの席管理システムの導入が有効ですが、いざ導入するとなると、多額の開発・管理費用が必要になります（開発/購入/インフラコストなど）。

そこで、この緊急時にOSSの力で少しでも世の企業や学校の役に立ちたい。そう思い、__PowerAppsで簡単なフリーアドレスの席管理アプリ（SeMaS: Seat Management System of Non-territorial office ver. 1.0）を作ってみました。誰が・どこを・何時使ったか(Who/Where/When)が全部記録されますので、追跡調査も容易です。PowerAppsが使えるMicrosoftの契約を結んでいる企業/学校/団体の方々、ぜひともお使いください。__

もちろん、__感染症対策のみならず、平時のフリーアドレスの運用でのご利用や、ちょっと内容を変えて備品管理、機器の使用ログなどにもご利用になれます。__

え？サーバー管理費用などが必要だって？
要りません。だって、Microsoftがすべてやってくれますから！
(しかし、MicrosoftとすでにPowerAppsなどが使える契約をしていることが前提です)

noguhiro2002/PowerApps_SeMaS (Github)
https://github.com/noguhiro2002/PowerApps_SeMaS

# 2. History
2021/04/18 ver.2.0.を開発しました。
Ver.1.0で予告していたところから以下の機能を追加しました。

- ちょっと別の席を使う（食堂など）で、”一人が複数席を使用”できる機能
- 誰が何処にいるか（座っているか）を検索する機能
- いろいろと動作を軽くしたい

ついでにPowerAutomate経由のSharePointのList操作を廃止し、

- API使用量の削減

を行いました。

# 3. どうやって動く？

サクッと動作の様子がわかる３分ビデオを御覧ください！

[Power Apps] Working of SeMaS Ver2.0, the seat management system for Non-territorial Office
https://youtu.be/Srx3TOWfrIA
[![Microsoft Power Appsでフリーアドレスの席管理システムを作ってみた Ver.1](http://img.youtube.com/vi/Srx3TOWfrIA/0.jpg)](https://youtu.be/Srx3TOWfrIA)

# 4. どうやって入れればよい？
__-->ご自身のMicrosoft PowerApps/Sharepoint環境に、ご自身で構築ください！__

以下、構築するための情報を記します。

## 4-1. まずは確認。構築に必要なMicrosoftサービス
以下のサービスが使えることが必須です。
- Microsoft Power Apps
- Microsoft SharePoint

なお、いわゆる__”Premiumサービス”は使っていない__ので、多くの方が使えると思います。

## 4-2. SeMaSアプリの全体像

![Microsoft Power Appsでフリーアドレスの席管理システムを作ってみた Ver.2](https://github.com/noguhiro2002/PowerApps_SeMaS/blob/main/describe_imgs/Slide2.PNG?raw=true)

ぱっと見シンプルですが、実際シンプルです。
動画で示させていただいたとおり、

1. QRコードをスマフォやタブレットで読み取ります（2021/2/23現在:PowerAppsはスマホやタブレットからしかQRコード読み取りに対応していません）。
2. PowerAppsがWho/Where/Whenを記録しているSharePoint上のList（SeMaSevents）を参照し、その席を使えるか・使えないかを判断します。
3. その席が使える場合は、SeMaSeventsに”着席”をSharePointのListに記録します。一方、すでに誰かがその席を使っている場合はその旨をアプリ画面に表示します。
4. 席を離れる際は、SeMaSeventsに”離席”を記録するためのPowerAutomateのフロー（updateEndCalendarFromApps）を動かします。
4. なお、ver.2.0では複数席に対応します。

この順序で動きます。

また、

1. オフィスで何処に誰が座っているかをシートマップで表示
1. 誰が何処に座っているか、表示します。

をすることができます。

##  4-3. QRコードの準備
![Preparing QR code](https://github.com/noguhiro2002/PowerApps_SeMaS/blob/main/describe_imgs/Slide3.PNG?raw=true)

動画にさりげなく映っておりましたQRコードのホルダーですが、３Dプリンターで自作しました。そこにラベルプリンターで印刷したQRコード付きのラベルを貼り付けています。

__え？ホルダーを設計するのがめんどくさい？__
ご安心ください！QRコードホルダー設計ファイル(Fusion360)とSTLファイルを以下に置いておきました。もしよければお使いください。
https://github.com/noguhiro2002/PowerApps_SeMaS/tree/main/holder

## 4-4. データソースの準備
![Lists column description](https://github.com/noguhiro2002/PowerApps_SeMaS/blob/main/describe_imgs/Slide4.PNG?raw=true)

さぁ、早速プログラミングです。まずはデータの保存場所を作りましょう！
今回はSharePointのListsを利用します（別に画像のようなEntityが作れて、PowerAppsからアクセスできればData verseでもなんでもOKです！）。

さぁ、上の画像を見つつ2つ

1. seatList
2. SeMaSevents

のListsを作ります。

### 4-4-1. SeatLists

![seatLists](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588752/988342e2-c32b-dcf7-346b-e4c038fe532f.png)

完成後のseatListはこのような感じになります。Excelなどで予め作り、SharePointにListsとしてインポートすると楽です。UUID作ったユニークなIDをseatUuidに書きます。ExcelでもUUIDは作れるのでしょうが、私は面倒なのでOnline UUID Generator(https://www.uuidgenerator.net )を利用しました。

###  4-4-2. SeMaSevents

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588752/b98186cf-5fea-1555-283c-8931f14956f2.png)

完成後(そして少し使用中)のSeMaSeventsはこのような感じになります。


## 4-5. PowerAppsのプログラミング

すべて説明するには内容盛りだくさんで心折れました。下記リンク先にPowerAppsからExportしたファイル（.msapp）をアップしましたので、本ファイルをダウンロードしていただきPowerAppsでOpenしてください。その後、適宜修正し利用ください。

__作業中のSaveと、作業後のPublishは忘れずに！__

（そんなこと言われてもわからん！詳しく説明してくれ！という方は是非ともコメントお願いします）

noguhiro2002/PowerApps_SeMaS/PowerApps
https://github.com/noguhiro2002/PowerApps_SeMaS/tree/main/PowerApps


## 4-6. テスト＆利用開始

お使いのスマフォやタブレット（Android/iOS）のStore（PlayStoreやAppStore）で「Microsoft PowerApps」をダウンロードしていただき、ログイン後、上記で保存したSeMaSを起動してご利用ください。



# 今後の予定
Ver.2.0で実装できなかった機能はVer.3.0で実装したいですね。__使いたいです！などありましたらぜひコメントをください！それがモチベーションとなって製作スピードがアップするかもしれません！__

- 会議席などの”複数人が一つの席を使用”できる機能
- 壁掛けディスプレイなどで、そのオフィスの席使用状況が一覧できるようなView
- 席を予約できる機能
- 席を使う際に、部屋の入り口にあるタブレット端末でできるような機能


# 謝辞＆あとがき
本プログラムは、Microsoft365 Developers Program(https://developer.microsoft.com/ja-JP/microsoft-365/dev-program )に参加し、その権限の範囲内で開発いたしました。Microsoftさん、楽しい時間をありがとうございました。

本ソフトのすべての情報はこのGithubのレポジトリ内の情報が正となります。
noguhiro2002/PowerApps_SeMaS
https://github.com/noguhiro2002/PowerApps_SeMaS

なお、本プログラムはBSD-3ライセンスで配布します。
本ソフトそのもの、及び本ソフトをもとに開発したプログラムにおいて生じた損害等は一切作者はその責任を負いません。すべて利用者の責任においてご利用ください。また、いかなる種類の保証も作者はいたしません。

__本ライセンスでの配布が問題でしたら、コメント欄でご連絡ください。__
（特にMicrosoft様、もしご覧いただきましたらよろしくお願いします）

# 最後に
なにかのコミュニティ（企業・学校含む）で使用する際には、ぜひコメントをください！開発のモチベが上がります！