【PowerPlatform】社内アプリ作って社内備品管理を自動化してみたよ



# 社内の座席や備品の管理どうしてますか?
社内で座席の予約や備品の利用をしたいとき，どこに利用や予約を記録していますか?
「SaaSサービスで管理してるよー」っていう会社もあれば「Excelでやっています」っていう会社もあると思います。私の会社は後者ですね。社風としてExcelが浸透しているからだと思います。

SaaSサービスであればメールで通知が入ったり，カレンダーで誰がいつまで利用・予約しているか一目瞭然だったり，利用状況を自動で管理してくれて便利です。一方，Excelは自分たちでファイル内容を自分で更新しなければいけません。

# アプリ開発に至るまで
私の部署では機器などの備品を利用する際にExcelファイルに「利用者」「利用期間」を記入していました。しかし，備品を使い終わった時Excelファイルを更新し忘れる人が続出し，誰が備品を使っているか分からなくなる時がありました。最終的には「備品を使い終わったらExcelファイルを更新するように」という注意が部署内で出ました。

# 導入後間もないPowerPlatformを使ってみた
ちょうどその時は社内のグループウェアがGWSからMS365に切り替わった直後でした。部署内でもMS365をどう使っていくか模索中でしたが，思うようにサービスの利用が進んでいませんでした。そこで，「MS365を使いこなす」「脱Excelを推進する」「自動化を推進する」の3つを目標に備品管理アプリの開発を上司に提案し，開発に着手しました。

アプリケーションはフロントエンドをPowerApps，バックエンドをPowerAutomate，データストアをMicrosoft Listsで作成しました。

# ローコード最高!
PowerAppsは独自の言語を使用するので構文を新たに学ぶ必要があったのですが，思ったよりすんなりいきました。型の宣言がないのに型の概念があるのに気づいたときは驚きました。Pythonみたいですね。
編集画面に画面パーツを配置すると，そのパーツにどんなプロパティがあるか確認できます。例えば，チェックボックスであればチェックを入れたときの動作「OnCheck」やチェックを外したときの動作「OnUncheck」を設定できるのがわかります。「そのパーツにどんな設定を追加できるか?」が分かるので便利でした。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3182201/5b478938-cca0-fc18-e24f-a0743a0a20f6.png)
アプリを作る際はコーディングも必要になります。しかし，ソートや検索などは関数化されているので基本的には関数の構文と制御構文，論理演算子を押さえれば大丈夫でした。例えば，複数選択した備品(「カート」に格納)の利用状況「貸出中」，利用者，利用期間を備品一覧に書き込むコードは以下のようになります。

```
ForAll(
   カート,
   Patch(
         備品一覧,
                LookUp(備品一覧 As Item,Item.ID= ThisRecord.ID),
                {
                 Status:{
                                Value:"貸出中",
                                '@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"
                                },
                 User:{//ユーザー登録
                                Value:User().Email,
                                '@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
                                Claims:  "i:0#.f|membership|" & Lower(User().Email),
                                Department: "",
                                DisplayName: "",
                                Email: "",
                                JobTitle: "",
                                Picture: ""        
                                },
                UseStartDate:利用開始.SelectedDate,
                UseEndDate:利用終了.SelectedDate                              
                 }
        )
)
```

PwerAutomateはほぼGUIでフロー作成するだけで完成しました。しかし，備品一覧のユーザー名を削除する際にREST APIを学ぶ必要がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3182201/5b0a3aae-40c6-5f65-382d-669f89b656a7.png)
PowerAutomateを使用するとサービス間で自動化ができます。今回の備品管理アプリであれば，「予約した備品が利用可能になったら備品一覧を更新し，メールを送信する」みたいなことができます。自動化が捗りますね。

実は私自身仕事でソフトウェア開発した経験はありません。プログラミング言語というと，大学の講義でCを，卒業研究ではシミュレーションプログラム開発にPythonを使った経験があります。最近はUnityを触るためにC#を勉強中です。
PowerPlatformでのアプリ開発は初めてだったにもかかわらず，アプリ開発開始から2週間でベータ版完成までいけたのでローコードはの恩恵を大分受けれたと思います。

# PowerAutomateの外部連携サービスは可能性無限大
PowerAppsではMS365以外のサービスにも接続できる機能があります。例えば，グループウェアにMS365を使用していてコードをGitHubで管理している環境であれば，「GitHubにPushしたらTeamsに通知を送る」みたいなことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3182201/9b221265-b90a-bfb6-5eb5-fb8f9206a190.png)
利用可能なアプリが多いのでできることもかなり多そうです!


# 終わりに
Excelによる手動更新からPowerPlatformによる自動化で，社員がする操作が「備品の利用・予約登録をするだけ」になって利便性が向上しました。他にも脱Excel化，自動化できそうなことを見つけたら実践してみようと思います!