コミュニケーション活性化アプリの紹介【Power Apps】

# はじめに
みなさま、こんにちは！
日本マイクロソフトカスタマーサクセス事業本部に所属しております秋山と申します。
今回、社内向けに作成したコミュニケーション活性化を目的としたアプリ「HiGuys」について紹介させていただきます。
![TOP画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/3593ad3c-f516-efc4-4365-886b9afd4444.png)

# 作成背景
新型コロナウイルスの影響でリモートワークが普及したこともあり、弊社では、現在もリモートワークで働く人が多い状況です。働き方を選択できることは個人的に良いこととと考えますが、その一方で、同僚との対面でのコミュニケーション不足を解消すること、社内のコミュニケーションを活性化させることなどが課題となっております。
実際のところ、私自身、1度も対面で会ったことがない人や話したことがない人が多くいます。また、実は、お互い出社していたのですが、顔を合わせたことがないため気づかない、自信がなくて声かけられなかった、挨拶程度しか会話できなかったということもあります。
そこで、アプリを用いることで、初めて会う人やそれほど話したことがない人との会話のきっかけを作ることができないかと思い、今回の「HiGuys」 アプリを作成しました。

# アプリの使い方
次に、アプリ使用の流れを説明します。
このアプリは、対面かオンラインで社内の人に会ったときに使用します。会った相手のQR コードを見せてもらい、カメラで読み込み登録を行なうことでポイントを加算していきます。このポイントは月ごとでの表示が可能になっており、自分が今月どれくらいの人と話したかの記録として利用できます。また、会った人数をもとにポイントを付与することでより積極的なコミュニケーションを促進していきます。
![アプリの流れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/5812cd99-ec85-8a65-7fdc-faadb02cb48f.png)
# アプリの説明
次に、アプリについて説明していきます。
## アプリの全体像
アプリは4つの画面で構成されています。まず、アプリを開いたときに表示されるトップ画面があります。そして相手を検索して登録する手動登録画面があります。そして、過去に会った人一覧を表示する一覧画面、また月ごとに会った人数を表示しそれに応じたポイントを確認できる振り返り画面を用意しました。
![アプリ画面全体.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/86b799d6-63e9-e761-2afd-0fdffd954a85.png)

## アプリの画面説明
次に、実際に各画面のレイアウト及び機能を説明します。
### トップ画面
トップ画面には3つのボタンが配置されています。
![TOP画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/17509998-ae24-0eaf-e176-c479f8394b3c.png)


#### QR コード読み取りボタン
まず、1番上のボタンがQR コード読み取りボタンです。
こちらは挿入タブ→メディア内にあるバーコードリーダーを用いて作成しています。
このボタンを押すだけで自動的にカメラが起動し相手のQR コードを読み取ることができます。
![バーコードスキャナ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/53d43148-0d55-bd48-e3c8-55f2d97b68b7.png)

バーコードスキャナの`[OnScan]` 関数に以下のような関数が設定されています。
```
If(
    IsBlank(Text(QrCodeScanner.Value)),
    Notify(
        "QR コードが読み取れませんでした",
        NotificationType.Error
    ),
    Notify(
        Concatenate(Text(QrCodeScanner.Value),"を登録します"),
        NotificationType.Information
    );
    Register.Run(Text(QrCodeScanner.Value));
Navigate(List)
)
```
バーコードスキャナが何も読み取りを行わなかった場合にはエラー通知が来ます。
QR コードを読み取ることができた場合には成功通知とともに
```
Register.Run(Text(QrCodeScanner.Value));
```
このようなPower Automate フローが走ります。
このRegister フロー以下のような内容を設定しています。
![Power Automate .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/b76ba2fc-1ac0-8b22-ea24-3cebf25f7778.png)
Power Apps から登録相手の名前を受け取り、その名前をSharePoint リストに登録するフローになります。
実際に、SharePoint リスト側には以下のような内容が登録されます。
![sharepoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/7af9b66c-7f27-4a89-1500-22bc1a891b42.png)

登録者 (Created By) と登録日時 (Date) はSharePoint リスト側にデフォルトで入力されます。

#### 手動登録ボタン
中央に配置されているのが手動登録ボタンになります。
こちらは、相手がスマートフォンを持っていなかった場合・その場での登録を忘れてしまった場合に、相手のメールアドレスを検索することで登録でするためのものです。
具体的な画面のレイアウト・機能に関しては下の手動登録画面の章で説明しています。

#### QR コード表示ボタン
1番下のボタンはQRコード表示ボタンになります。
こちらは、QR コードの提示を求められた際にボタンを押すと自らの登録用QR コードを表示できるようにしたものです。
![QRコード表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/c611ea26-d18a-a599-63d2-883ce06ab23f.png)


### 手動登録画面
次に、手動登録画面について説明します。
こちらの画面には、挿入タブ→入力内にあるコンボボックスを用いて作成された検索フィールドが配置されています。
![手動登録画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/d6bfcb11-2b05-87b4-f446-d718e1f8c93c.png)


検索フィールドを押すと、ウィンドウが開いて文字を打ち込むことができるようになります。ここに、検索したい相手のメールアドレスを入力していただき相手を検索します。
Office 365 ユーザーを接続として追加することで、組織内のユーザー プロファイルにアクセスできるようになります (https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/connections/connection-office365-users ) 。今回、Office 365 ユーザーの中のSearchUserV2 という関数を使用することで組織内のユーザを検索します。
検索フィールドの`[Items]`には
```
Office365ユーザー.SearchUserV2({searchTerm:cmb_Search.SearchText,top:10}).value
```
このような関数が設定されています。このように書くことで検索フィールド (cmb_Search) の中に入力されたテキストに当てはまる検索結果トップ10を表示します。これでスマートフォンが手元にない場合、直接会ったがその場での登録を忘れてしまった場合にも人を追加することができるようになりました。

### 会った人一覧表示画面
次に、会った人の一覧を表示する機能について説明します。この画面では、過去にあった人の一覧をSharePoint リストから取得し、表示します。
![一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/0780cc65-fdea-c018-69cc-012596442eb8.png)

挿入タブ→レイアウト内にある垂直ギャラリーを中央に配置し、`[Items]` に以下のような関数を設定しています。SharePoint リストで項目が作成される際には自動的に'Created By' の項目が作成されるため、これを利用しフィルター関数を用いて自分が登録した相手のみを表示しています。今回のSharePoint リストの名前はHiGuys としています。
``` 
Filter(HiGuys,'Created By'.DisplayName=User().FullName)
```

### 月別のポイント確認画面
この画面では、会った人数に応じて付与されたポイントを月別で見ることができるようになっています。
![振り返り.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/6cd6417d-00b7-759e-057d-c4ea00e78526.png)



まず、この画面を開いたときに以下のような変数を定義します。画面の`[OnVisible]` 関数に以下の関数を入力します。
```
Set(showDate, Now());
```
これは、showDate という変数に現在の日付をいれたものです。
具体的には以下のような値が代入されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/2f708363-479a-5208-6718-ab498067a022.png)
次に、画面上部分に配置されている矢印ボタンが押されたときの関数を定義します。今回は右側の月を進めるボタンに定義する関数を説明します。
![矢印.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/990c39ad-cd1e-234e-1711-d95d12383650.png)
以下のような関数を入力してください。
先ほど定義したshowDate 変数に現在の状態から1つ月を進めた値を代入しています。増やす単位を月にするために、TimeUnit.Months としています（https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-dateadd-datediff ）。
```
Set(showDate,DateAdd( showDate, 1, TimeUnit.Months ));
```
次に、会った人数をそれに応じたポイントを表示する部分を説明します。
![会った人数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1999895/968f31e1-e094-e2f8-bcb0-5b55bf94310d.png)
会った人数の具体的な数字の`[Text]` に以下のような関数を入力します。
```
CountRows(Filter(HiGuys,'Created By'.DisplayName=User().FullName,Date >= Date(Year(showDate), Month(showDate), 1), Date < DateAdd(Date(Year(showDate), Month(showDate), 1),1, TimeUnit.Months)))
```
この関数では、まずSharePoint リスト (名前：HiGuys) に作成者が自分というフィルターをかけます。そしてさらに作成日が先ほど定義したshowDateに代入された月の1日目よりも後というフィルターをかけます。最後にshowDate の次の月の1日目未満の作成日という範囲でフィルターをかけます。これにより指定月のみのポイントが確認できるようになります。
コミュニケーションスコアは会った人数を2倍した値を設定しています。
# アプリを使ってみての社内の感想
主に以下のような感想をいただくなど、部署内のコミュニケーションを活性化するきっかけになったというポジティブな声を沢山いただきました。また、他の部署からも使いたいという要望をいただき、今後、機能をアップデートをしたニューバージョンを利用していく予定です。

・普段話さない人と話すきっかけになった
・(期間を決めて) ポイントを競うイベントを実施したが、とても盛り上がった
# 終わりに
今回は、同僚との対面でのコミュニケーション不足を解消すること、社内のコミュニケーションを活性化させることなどの課題を解決するために作成したアプリについて紹介しました。上述の通り、ポジティブな効果が出ており、今後も部署内で利用されていく、また、利用範囲が拡大される予定です。このアプリのアイディアが様々な場面でのコミュニケーションを促進する参考やきっかけとなると嬉しいです。

※本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。