【Microsoft Power Platform】Power AppsでNoCodeでアプリ作成

#はじめに
以前、記事として書いた「[ノーコード・ローコードのあれこれ](https://qiita.com/kento_gm/items/34c46a9bc6b3017c9345)」の続きとなります。
今回は、実際にNoCodeでアプリを作成します。
今回使用するサービスは「Microsoft Power Platform」です。
選択理由としては、Power Apps、Power Automate、Power BIとアプリケーションを作成するサービスが整っているためです。また、大手ベンダーサービスとしてノーコディングでどこまでできるのかという点でMicrosoft社のサービスを選択しました。
#Microsoft Power Platform とは
以前の記事に記載しているのでそこを参照してください。
→[Microsoft Power Platform](https://qiita.com/kento_gm/items/34c46a9bc6b3017c9345#microsoft-power-platform)
## PowerApps とは
[PowerAppsの概要](https://docs.microsoft.com/ja-jp/powerapps/powerapps-overview)はこちら
Power Appsは4つの主要コンポーネントを備えている。
 
- キャンバスアプリ　→　[概要](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/getting-started)  
空白のキャンバスを使用して高度にカスタマイズされたインターフェイスを作成し、200種類のデータソース（[Microsoftとサードパーティソース](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/getting-started)）のいずれかに接続することでWeb、モバイル、タブレット用のキャンバスアプリを構築できます。**主にユーザが利用するアプリを作成できます。**

- モデル駆動アプリ　→　[概要](https://docs.microsoft.com/ja-jp/powerapps/maker/model-driven-apps/model-driven-app-overview)  
Common Data Serviceのコアビジネスデータとプロセスを基に構築し、フォーム、ビューなどのコンポーネントUIを自動的に生成できます。モデル駆動型アプリでは、データモデルから構築することでデバイス間の応答性が高くなっています。**Webベースとなっており、主に管理者向けのアプリを作成できます。**

- ポータル　→　[概要](https://docs.microsoft.com/ja-jp/powerapps/maker/portals/overview)  
外部向けのWebサイトの作成できます。これにより、組織外のユーザーがさまざまなIDでサインインしたり、Common Data Serviceでデータを作成および表示したり、匿名でコンテンツを参照することができます。**主にB to B(もしくはC)向けのWebサイト形式のアプリを作成できます。**

- Common Data Service　→　[概要](https://docs.microsoft.com/ja-jp/powerapps/maker/common-data-service/data-platform-intro)  
Power Appsに付属しているデータプラットフォームです。Dynamics365アプリが構築されているプラットフォームではビジネスデータの格納とモデリングを行うことができます。Dynamicsをご利用の場合、お客様のデータは既にCommon Data Serviceに格納されています。
また外部システムとの統合をスケジューリングすることでPower Appsでその他アプリケーションデータを活用できます。
Power Automateのフロー等でCommon Data Serviceに統合したデータをPower Apps、Power BI等で活用することができます。

**【Common Data Serviceアーキテクチャ図】**
![Common Data Serviceアーキテクチャ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/ced48370-db69-e6b5-a4af-2ab95102665f.png)　
※今回はPower Automate、Power BIは使用していませんので説明は割愛とさせてください。
## プランと料金
Power Appsの基本的な利用条件としては、以下のいずれか1つが満たされていることです。

- Power Appsのプラン（per Appプラン/per Userプラン）を定価料金（月額）で購入していること
- Dynamics 365のプランを購入していること
- Office 365 E1以上のプランを購入していること

詳細なPower Appsライセンス表(プラン)は以下のサイトに分かりやすくまとめらていたので参考にしてください。
https://memo.tyoshida.me/power-platform/powerapps/unofficial-powerapps-flow-license-chart/
**※注意※**上記は2019年10月11日付の非公式の内容ですので公式は[こちら](https://powerapps.microsoft.com/ja-jp/pricing/)を参照してください！！

また、Office365やDynamics365をお使いのユーザーは、`Common Data Service`を利用せずにキャンバスアプリのみの作成となっています。`Common Data Service`を利用してモデル駆動型やポータルを作成したい場合、前述の通り別の有償プランが必要です。

その他に、無料でPowerAppsを試すことができる、[30日間の試用版](https://docs.microsoft.com/ja-jp/powerapps/maker/signup-for-powerapps)か[コミュニティプラン](https://docs.microsoft.com/ja-jp/powerapps/maker/dev-community-plan)があります。

今回は有償プランと同等の機能が利用できる30日間の試用版ライセンスである`Power Apps Per User Plan trial`でサンプルアプリケーションを作成します。

#作成するアプリケーション
今回作成するサンプルアプリケーションはGoogleスプレッドシートをデータソースとした`出欠確認アプリケーション`となります。
下記記事を参考にして同じようなものを作成します。
https://qiita.com/tsumasakky/items/9cd84c0d9b86009493eb

違いとしては以下の3点
・データソースがExcelではなくGoogleスプレッドシートである
・入力フォームをテキストボックスだけではなくチェックボックスも対応させる
・デプロイ、その他ユーザとの共有についても試したこと

#開発手順
## 環境ついて
以下の公式サイトにシステム要件、制限、構成値の説明があります。
[キャンバスアプリのシステム要件、制限、構成値](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/limits-and-config)
また、本記記事では`macOS`、`Google Chrome (最新バージョン)`で実装しています。

## 実装準備
1. [MicrosoftのPower Appsサイト](https://powerapps.microsoft.com/ja-jp/)から`無料で始める`をクリックします。
2. 次のPageで職場または学校のアカウントのメールアドレスで`Sign Up`します
3. Sign Upしたメールアドレスが職場のアドレスなのかを尋ねられたら`YES`を選択
4. 入力したメールアドレスに6桁の認証コードが届いているので以下３つを入力して`Start`をクリック  
`氏名`、`パスワード`、`認証コード`
5. 作成したアカウントでhttps://make.powerapps.com/ にアクセスし、歯車マークでプランを確認すると`Power Apps Per User Plan trial`となっていればOK

Sign Upで既にメールアドレスを使用していればアカウントを持っているので5.でアクセスしてください。
## 実装
1. 出欠確認のデータソースであるスプレッドシートを準備  
以下のようなシートを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/f4a014ae-68d9-dae7-0500-d5f4486f5a7f.png)  

2. [Power Apps](https://web.powerapps.com/home)を開き、「アプリ」→「アプリの作成」で新規作成する

3. Power Apps Studioの画面へ移動するので「データを使用して開始」の利用するデータサービス(スプレッドシート)を選択する。
※利用したいデータサービスが無ければ、以下の画像で一番右側の矢印をクリックすることで他のデータサービスを表示できます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/20d8e041-bfcc-7703-68bc-d8cb7dad4404.png)
4. スプレッドシートを選択して作成をするとGoogleのアクセス確認の画面が出るので自身のアカウントでアクセス許可をする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d82cb15b-c883-e166-cac3-fb77ebe9ab7e.png)
5. データセット接続で`1`で作成したスプレッドシートを検索して選択する。
6. スプレッドシートを選択後、テーブルの選択でシート名を選択して右下にある`接続`ボタンをクリックする。
↓↓↓接続完了すると以下の画像の様に自動でアプリを生成してくれる↓↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/8b93d2db-708d-50b4-65bf-5ad570e84c94.png)

### 自動生成したアプリの微調整
自動生成した瞬間でアプリとして動きますが、完全に意図したものになっていないのでデザインの調整が必要となる。
以下3点の対応していく。

・ 各画面の部品の配置や名前を修正
・ チェックボックス等の独自カスタマイズ

1. 各画面の部品等の修正   
**①ツリービューの画面タブでBrowseGallery1のSubtitle1の詳細設定変更**  
Subtitle1をクリックして、右側の詳細設定内にあるTextを`ThisItem.備考`から`ThisItem.集金`に変更する。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/8c09dfa3-7a63-64b8-65c3-99d9be5b7b84.png)  
**②Subtitle1の詳細設定変更**  
①と同じようにTitle1のTextを`ThisItem.No`から`ThisItem.名前`に変更する。   
**③Subtitle1を右クリックでコピーして同じ配下に貼り付け**  
貼り付けたら詳細設定のTextを`ThisItem.集金`を`”集金”`に変更する  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/ea7e46f0-6a92-0c5f-b8f1-be4b23f200bb.png)  
**④Body1も③と同じ用にコピーして貼り付け**  
貼り付けたら詳細設定のTextを`ThisItem.出欠`を`”出欠”`に変更する  
**⑤画面の配置を変更する。**  
③、④で作成した部品が`”集金”`、`”出欠”`と表示されているので良い感じに配置を修正 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/1b5f53ae-138d-01bc-1bf1-706f4b9f14a4.png)  
**⑥`DetailScreen1`と`EditScreen1`で各画面の表示順が微妙なので修正**  
表示している各Screenの`○○Form1`内にある`○○_DataCard1`で表示順を変更します。  
変更方法は、各`○○_DataCard1`の詳細設定のデザインのYの数値を変更することで各DataCard1の順番が変わります。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/a421b117-d88c-73e2-10e1-f625c296a86a.png)  
↓こんな感じに表示順を変更。`DetailScreen1`、`EditScreen1`両方行う。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/5158c886-78c7-10d8-f6a0-3ebcb6b7f199.png)  
**⑦ツリービューの画面タブにあるそれぞれの部品名を変更**  
 可読性の為なので名前は適当でいいです。以下のように変更します。  
 基本的には、変更すると自動で各部品で使用している紐づく名前も更新されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/ed676d96-eda4-888b-8250-c52b1ea4b893.png)  
2. チェックボックス等の独自カスタマイズ  
EditScreenの`出欠_DataCard2`,`集金_DataCard2`をテキストボックスからチェックボックスに変更する。  
**①ロック解除後、`挿入`の`入力`でチェックボックスを`集金_DataCard2`に追加する**  
※追加したチェックボックスの詳細設定`Text`は空文字に変更  
・ロック解除 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/cf37d6f6-df39-af5f-7745-e85644d6d9a5.png) 
・チェックボックス追加 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/61fcc171-8823-1289-af81-cc14ed1cbcae.png)  
**②集金__DataCard2の `DataCardValue12`、`ErrorMessage6`は不要なので削除**  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/e404b1af-cc1c-1df5-09a6-300bbcd863af.png)  
**③集金__DataCard2の詳細設定で`Update`を以下のように修正** 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/89df16f0-db8b-c36c-5c9a-7865a04e12ab.png)  
**④追加したチェックボックスの詳細設定`Default`を以下のように変更**  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/045107c8-9b1c-9ca1-549f-b347116816d9.png)  
**④`出欠_DataCard2`も①〜④のように実装する**  

以上で、実装完了。 

###アプリの確認  
右上にある再生ボタンでプレビューできます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/f1b4e96a-24c9-f5ab-5061-a25f4a528e80.png) 

##デプロイ 
デプロイはすごく簡単でした。 
保存して使用する人を共有するだけ。 
###保存→共有 
アプリケーション作成画面から左上の`ファイル`をクリックして開くと以下画面が表示されるので保存を行う 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/4fa969b1-2cfb-c72f-c214-e02bc482103b.png) 
保存後の画面で発行をクリックすると以下画面が出るので`バージョン発行を行う` 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/eda6a8f4-4daf-14c9-1ab8-bc1479f15e06.png) 

そしてバージョン管理しているので、いつでもバージョン変更ができる。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/27d726f8-59de-6a77-d2f0-5645b539f7f4.png) 

共有方法としては、アプリの`・・・`をクリックして共有を選択すると以下画面が表示するので、ユーザを検索して共有する。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dbfe75d0-5e4e-5af6-19a8-5d2ce14599a8.png)

共有できるユーザは同じ職場または学校のアカウントのメールアドレスであるユーザーのみです。 
※すべての同じ職場または学校のアカウントユーザー共有も可能です。 
また、共有画面ではアプリの編集権限も管理できます。 
**共有する際は、アプリに紐付いていているデータソース(スプレッドシート)も別途共有する必要があります。** 
**30日間の試用版は共有できますが、コミュニティプランはできません。** 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/021131ea-5e8a-5c4f-1f22-9a6f6370debd.png) 
###アプリケーション利用方法 
以下を参考 
[アプリの検索と実行の方法](https://docs.microsoft.com/ja-jp/powerapps/user/open-app-embedded-in-teams)
アプリケーションの管理画面でWebリンクがあるのでアクセスすることで利用できます。 
また、モバイルでは、Power AppsアプリをApp Store、Google PlayからインストールしてPowerAppsアプリで利用できます。 
##成果物
ホーム画面 
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/9fc5ea02-445e-c028-6870-fc0d1d9fd8a5.png"> 
TEST4をクリックするとTEST４の詳細画面が表示 
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/4b675c0a-ebdd-565e-29e2-ac026335a741.png"> 
右上の編集ボタンをクリックで編集画面が表示されるので適当に入力 
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/2ccdea03-2814-31ba-0eef-f13b975289aa.png"> 
右上の更新ボタンをクリックで詳細画面に戻り更新される。 
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dc704f75-1141-2804-d3c1-e2362562816f.png"> 
データソースであるスプレッドシートを確認すると更新されていることが分かる。 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/2f1664c7-eca4-e4cf-4097-e82de21662e3.png"> 

#感想
今回は、簡単なサンプルアプリを作成しました。調査しながらでしたので作成には3〜4時間ぐらいかかりましたが、機能や使い方を理解していれば今回のサンプルアプリ程度なら30分〜1時間程で作成可能だと思います。
また、今回使っていませんが`カメラ`、`画像`、`バーコード`、`マイク`、`オーディオ`等の部品も準備されているので柔軟なアプリケーションを作成できそうだと感じました。
ただ、勤務先または学校のアカウント内でしか利用をすることが出来ないので業務改善アプリなどで活躍できるサービスだと思います。
そして、料金とプランが少し複雑で選択したプランでできることを理解する必要があると思いました。
[コミュニティプラン](https://docs.microsoft.com/ja-jp/powerapps/maker/dev-community-plan)であれば、他の人へ共有まではできませんが無料でアプリケーションを実装できますので是非試してみてはいかがでしょうか。