わずか数ステップで！Power AppsとDataverseでログイン画面を簡単に作る方法

# 記事について
本記事はPowerAppsとDataverseの二つのみで以下のようなログイン画面と機能を簡単に作る方法を書いたものです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/9e863bc3-22c0-14db-d519-f7a402442fb8.png" width="300">

# そもそもPowerApps,Dataverseとは何か
PowerAppsとはMicrosoftが作ったノーコードツールで、
コードを一切書かずにスマホやタブレット端末向けのアプリを作成するためのツールです

https://powerapps.microsoft.com/ja-jp/

DataverseとはPowerAppsやPowerAutomateと簡単に連携できるMicrosoftのデータベースの一種です。詳しい説明は以下の公式ページを見てください。

https://learn.microsoft.com/ja-jp/power-apps/maker/data-platform/data-platform-intro

# どんな問題を解決できるか
PowerAppsでアプリを作ったのはいいものの、スマホを無くし、知らない誰かに拾われてアプリを起動させただけで会社のデータを操作できてしまいます。。
それではセキュリティがガバガバすぎます。
そのためにたとえ社内で使うアプリでもログイン画面は必須です！

# 対象読者
- これからPowerAppsでアプリを作ってみたい人
- PowerAppsでログイン画面の作り方の参考にしたい人

# それでは実際にログイン画面を作っていきましょう！

以下のような流れで作業を進めます！

- 作業1. UI を作る
- 作業2. ログイン情報を格納する場所（＝データベース）の作成
- 作業3. ログインのロジックを作る
## 作業1. UI を作る
### まずは使うオブジェクトの紹介から
ログイン画面は主に以下の四つのオブジェクトから構成されます。
- ロゴ：会社や組織のロゴ、見た目を整えるために使います。
- メールアドレス入力：ログインするためのメールアドレスを入力する場所
- パスワード入力：ログインするためのパスワードを入力するための場所
- ログインボタン：メールアドレスとパスワードを利用してページ遷移を行うためのボタン

### PowerApps側で使うオブジェクトの紹介

PowerAppsではサイドバーがあり、今回使うのは以下の四つです。

- ツリービュー：画面とコンポーネントから構成されていて
- - 画面ではアプリ全体の見た目と機能の設定画面が出てきて
- - コンポーネントでは様々な画面で使いまわしたいヘッダーやサイドバーなどが作れる
- 挿入：ボタンや文字、画像、入力、といったオブジェクトが収納されていて、画面に配置するものが用意されている
- データ：PowerAppsと連携するためのデータベースと接続、更新に使う
- メディア：挿入でアップロードされた画像や映像が格納されている

### 画面にオブジェクトを配置

ツリービューをクリックして、新しい画面ボタンからレイアウト→白を選んで新しい画面を作成しましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/800551b0-d236-b490-6cf9-f7d1dcff61ee.png)

それがあなたがこれから画くキャンパスになります！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/dcf869ac-8053-2502-b778-eb0e985a9074.png" width="300">

#### 実際に入力フォームを作成する
挿入から入力を選んで
その中からテキスト入力を選び、好きなところにドラッグアンドドロップしましょう
これがメールアドレスを入力する所になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/19e770d0-f7be-5497-56c3-d827ff9e3ba3.png" width="300">
このままでは何を入力するものなのか分かりません！なのでプロパティを使って分かりやすくしましょう！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/5c8d008d-7d99-58bb-0183-099baaeccf25.png" width="300">
既定：文字を全部消す
（入力するたびに「テキスト入力」とかが入ってて、それをいちいち消すの邪魔でしょ）

ヒントのテキスト：「メールアドレス」と入力
（これでここにはメールアドレスが入力されるんだな、と伝わるはず！）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/cc3c1121-ff92-b0bb-fb5b-d1ede1379dd9.png)

ほぼ同じ手順で今度はパスワードを入力する場所を作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/4f25fe16-457d-ff17-f13b-5d415fc87804.png)

このようになったあとで規定はさっきと同じように消して、
ヒントのテキスト：「パスワード」と入力
また、パスワードを他の人に覗かれたり、見られたりする事故を防ぐために
プロパティの真ん中あたりにあるモードで「パスワード」を選びましょう

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/1a54f2da-984b-fd44-453c-6a76e9624404.png" width="300">

これでだいぶログイン画面っぽくなったのではないのでしょうか！
試しに入力してみましょう！（試したいときは右上にある）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/400ca6e5-4469-c525-eb4c-f9ca142a3517.png)
このボタン、またはF5ボタンを押せばいいです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/642c72d0-6136-f33d-a8de-877fc8303230.png" width="350">

両方ともtestと打ったがちゃんとパスワードの方は隠れていますね！
次にボタンを追加します。
挿入→入力からボタンを見つけてドラッグアンドドロップでこの下に入れましょう
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/039c1d1b-af54-8687-4f78-a6717c7d5d6e.png" width="350">
だいぶぽくなったのではないのでしょうか

ボタンとだけ表示させておくと何のボタン？となるのでログインと置き換えましょう
これもプロパティのテキストを変更することでできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/6d21fc93-ea65-c1ee-f1d6-d0af19fc0676.png)

## 作業2. ログイン情報を格納する場所（＝データベース）の作成

別画面でDataverseを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/0f01c78c-3ecd-5e0b-a73e-d2cd83561e9a.png)
この「テーブル」ですね。

Employeeテーブルを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/42076ac0-9e21-9aa3-682f-ad653995e4ff.png" width="300">

このテーブルにはまだpasswordを管理する列がないのでパスワード列を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/1163ee1c-8e51-d382-1764-be668a326f6f.png)
ここにある＋を押して新しい列を追加します。
表示名にpasswordを入力し、保存を押します。

:::note warn
表示名はすべて日本語だと対応していなくて
一部でもいいので英語を使わないといけません。
例：
- テスト×
- test〇
- てst〇
:::

そして、
メールアドレスを"test@test.com"
passwordを"pass"
とした行を追加します。

これでログイン情報を格納する場所（＝データベース）の作成が完了しました。

## 作業3. ログインのロジックを作る

### ログイン機能の処理の全体像

さっき作ったボタンに、作りたい機能を付与します。
やりたいことは以下の図のようなことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/10e75888-d238-119e-31ff-063ea9299eaf.png)

メールとパスワードを入力した後にボタンを押して、データベースを参照し、あったら画面遷移を行って、なかったらエラーを表示するといったシンプルなものです。

ボタンが押されたときに動いてほしいのでOnSelectを使います。
javascriptを使ったことがある場合OnClickと同じものだと思えばいいです。

今回の式全体としては
```プラットフォームの名前:Power Platform,Power Apps
If(
  IsEmpty(Filter(Employee, 'Company-providedEmalAddress' = TextInput1.Text && Password = TextInput1_1.Text)),
  Notify("Invalid credentials.", NotificationType.Error),
  Navigate(HomePage, ScreenTransition.UnCoverRight)
)
```
このようになります。

PowerAppsの式はExcelの式をイメージすればわかりやすいかと思います。

### Power Apps の式と関数について

それではこの式と関数について説明をします

If(条件式,trueの場合,falseの場合)

Ifでは最初に条件を入力して、次に条件に合致した場合の動作、その次に条件に合致しなかった場合の動作を記します。詳しくは

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-if

ここを見ましょう
Switchも便利なので、こちらの公式サイトを見て覚えるか、著者の以降の記事を見てください。

IsEmpty（）これは参照してるデータの中身が空の場合true、そうでない場合falseを返すので
今回If（）と組み合わせて使っている場合
```プラットフォームの名前:Power Platform,Power Apps
If(
  IsEmpty(),
　空の場合,
　空じゃない場合
)
```
というようになってます。

Filter()
これは名前の通りフィルターをかけているだけです。
Filter（参照先のテーブル,条件）

:::note info
複数条件を使いたい場合、条件1次に＆＆を使い条件2を書くかAnd関数を使う
例：

```プラットフォームの名前:Power Platform,Power Apps
&&の場合：
条件1 && 条件2
Andの場合：
And(条件1,条件2)
```
:::
### ログイン機能を実現する計算式

```プラットフォームの名前:Power Platform,Power Apps
IsEmpty(Filter(Employee, 'Company-providedEmalAddress' = TextInput1.Text && Password = TextInput1_1.Text)),
```
これはEmployeeテーブルに対してメールアドレスとパスワードの両方が一致した行があるかどうかフィルターをかけて、もしfilterを通ったものがあるかどうかを見ていて、もしある場合false、無い場合trueを返す。
詳しくはこちらを参照してください。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-filter-lookup

SearchとLookup関数もかなり使うので理解しておくことをおすすめします。

Notify()：これは画面の上部に通知を表示するものです。
今回はエラーを表示するために使っています。
詳しくは

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-showerror

を参照

そして
Navigate()
この関数で、違う画面に画面遷移をすることが出来ます。
今回はHomePageという名前の画面に遷移するようにしています。
Navigate（遷移先の画面の名前,遷移時に使用するアニメーション）

:::note info
遷移時に使用するアニメーションに関しては別にいらない場合はScreenTransition.Noneを選べばいい
:::

これでPowerApps上でログイン機能が作れました！

## 最後にUIをブラッシュアップ

挿入→メディア→画像

から画像を引っ張ってきて表示させればそれっぽいログイン画面の完成です！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641616/9e863bc3-22c0-14db-d519-f7a402442fb8.png" width="300">

# 結論
本記事では、PowerAppsとDataverseを使用してログイン画面を簡単に作成する方法を詳細に説明しました。この方法を用いることで、アプリケーションのセキュリティを強化し、外部の人による不正なアクセスから会社のデータを保護することが可能となります。

最後に、本記事がPowerAppsを使用したアプリケーション開発におけるセキュリティ強化の一助となり、より安全なアプリケーション作成の参考になれば幸いです。