フォーム読み込み中
前回 AppSheet を使ってメルマガ配信アプリをノーコードで作ってみた という記事を書きました。
その後、Google AppSheet の競合製品、Microsoft Power Appsに対して興味を持ったので、Microsoft Power Appsを使って、Google AppSheetで一度作ったメルマガ配信アプリのクローンを作ってみました。
作っている中で、Power AppsとAppSheetのさまざまな違いがわかったので、本記事ではPower Appsを使ってアプリを作る過程、Power Appsの使い心地、AppSheetとの違いなどについて書きたいと思います。
Microsoftが開発した、Power Platformと呼ばれるローコード自動化ツール群があります。その中で、アプリ開発に特化したものはPower Appsです。
Microsoftによると、「技術や開発の経験を必要としないPower Appsで、あらゆるビジネスニーズに対応するモバイルアプリや Web アプリを簡単に開発しましょう」ということで、アプリ開発経験がない人でも短時間でビジネス用アプリを開発できるサービスとなります。
但し、ここで注意したいのは、Power Appsは「ノーコード」ツールではなく、「ローコード」ツールです。どうしても最低限のコーディングが必要になる場面が出てくるので、完全なIT初心者にとっては、少しハードルがあります。
前回のAppSheetの記事と同様に、今回もいきなり出来上がったメルマガ配信アプリの様子を紹介したいと思います。
今回PowerAppsを使って作ったアプリのユーザー操作は、基本的に前回AppSheetを使って作ったアプリと同じです。
まずは、メルマガ送信先候補を登録する画面です。個人のメールアドレスも、グループメールアドレスも登録できます。
こちらも前回と同じく、送りたいメルマガのタイトル、本文、添付画像を追加する画面です。
こちらも前回と同じ操作方法となります。作成した送信先メールアドレスと、メルマガのテンプレートを選択し、「Save」を押すと、自動で選択されたメールアドレスにメルマガを送信します。
今回のコンセプトは、できるだけ前回作成したアプリのクローンを作るということで、見た目はともかく、利用方法が全く同じのアプリを作成できました。これで、PowerAppsを使っても、AppSheet同等機能のアプリを作成できることが分かりました。
それでは、引き続きこのアプリを実際に作成するための手順を見てみましょう。
前回の記事でも触れましたが、アプリの本質とは「データに対する特定の操作を行うツール」です。故に、新しいアプリを設計する際に、まずこのアプリが扱う予定のデータの設計から着手するのが一般的です。
PowerAppsではSharepoint、Onedrive、Excel Onlineなどの情報を取り扱いできますが、今回はDataverseというデータベースサービスを使いたいと思います。
ここで1つ注意点として、Dataverseを使ったPowerAppsを公開するには、プレミアムコネクター機能が使えるライセンスが必要です(参考資料)。E3、E5などのライセンスだけでPowerAppsを使いたい場合、Excel Onlineをデータ保存先としてお勧めします。
前回のアプリのクローンを目指していますので、全く同じデータテーブルを用意しました:
Dataverseでは、テーブルの名前と列の名前を日本語に設定しても大丈夫ですが、列名は日本語に設定した際に、別途で英語のスキーマ名を設定する必要があり、ご注意ください。
Power Appsを使って作成できるアプリは、大きく「キャンバスアプリ」「モデル駆動型アプリ」と「カードアプリ(プレビュー)」の3種類が存在します。
今回は一番広く使われている「キャンバスアプリ」の方を作成します。
「キャンバスアプリ」とは、空白のキャンバス上に、自分がカスタマイズしたUIを作成し、「ボタンをクリックしたら、記入したデータをデータベースに保存する」などのロジックをコーディングして加えて出来上がるアプリです。
とは言え、ある程度の機能性と綺麗さを揃えたアプリを開発したい場合、1からUIを作成し、コーディングするには結構大変です。例えば、今回のアプリの1画面のほんの一部だけをピックアップしても、以下の図のように複雑な構成となっています。
そのため、PowerAppsを使ったアプリ開発において、テンプレートの利用と自動生成機能を活用することを強くお勧めします。
今回のアプリUI作成には、データテーブルからUIを自動生成する方法を使いました。
まず新しい空白の画面を作成します。
次に、データテーブルを選択します。
すると、データのプレビュー、新規データの追加、既存データの編集と削除ができるUIが自動的に生成されます。
このUI自動生成機能を使って、「メールアドレス」テーブルから「送信先管理」画面、「メルマガ」テーブルから「メルマガ管理」画面、「メルマガ送信履歴」テーブルから「送信管理」画面を別々に生成します。
以上の方法で自動生成された画面では、データを操作する機能が最初から使えるようになり、自分で実装する手間を大きく減らせますが、1つ大きな問題があります。それは、作成された3画面の間を、ユーザが自由に切り替えることができないことです。自由生成されたUIでは、画面間の遷移を考えていない様子です。そのため、画面間遷移機能を自ら実装する必要があります。
追加する方法は簡単です。まず、画面遷移用のボタンをUI上に、好きなところを追加します。筆者は、画面上部タイトルバーのところに追加しました。タイトルバーが選択された状態で、「挿入」→「ボタン」を順番にクリックすると、ボタンを追加できます。
追加されたボタンの高さ、幅、テキスト文字などを、画面右のプロパティ編集画面で細かくカスタマイズできます。
調整済みのボタンは以下のようになります。
次に、ボタンをクリックした後、別の画面に遷移する挙動を実装します。
例えば、「送信先管理」というボタンをクリックしたあと、「送信先管理」の画面を遷移したい場合、このボタンが選択された状態で、画面上方の関数編集画面で、このボタンの「OnSelect」値を、
Navigate(送信先管理, Fade)
に変更します。この関数の意味をより詳しく知りたい場合、こちらの公式ドキュメントを参照してください。
以上の方法で、1画面につき2ボタン、計6ボタンを全部実装すると、任意の画面で、任意の別2画面に遷移することができます。
最後に、実際にメルマガを送信する機能を実装します。前回のAppSheetアプリでは、AppSheetの「Automation」機能を使って実装しました。Power Platformにおいて、「Automation」と同等な機能をもつものは、「Power Automate」というサービスとなります。
しかし、「Power Automate」は「Power Apps」の一部ではなく、利用するには「Power Apps」の外から設定する必要があります。本文は、あくまで「Power Apps」を紹介することが目的であるため、今回は「Power Automate」を利用しなく、「Power Apps」内で完結する実装方法を採用しました。
まず、「送信管理」画面の、「送信先」を選択するドロップダウンリストを選択し、「OnSelect」の関数値を入れます。
If(
!IsBlankOrError(Self.Selected.'メールアドレス (cr0ff_email)'),
Set(
sendto,
Self.Selected.'メールアドレス (cr0ff_email)'
)
)
この関数の意味は、このドロップダウンリストが何か空白ではないものが選択された時、選択された送信先のメールアドレスを、「sendto」というグローバル関数に一時的に保存するという意味です。グローバル関数について詳しく知りたい場合、公式ドキュメントを参照してください。
なぜデータをグローバル関数に一時的に保存するかというと、メールを実際に送信する際に、何らかの原因で、本来選択されていた内容がリセットされ、送信エラーが発生する状況を避けるためです。
同じ理由で、「送信内容」のドロップダウンリストの「OnSelect」にも、以下の関数を入れます。
If(
!IsBlankOrError(Self.Selected.メールタイトル),
Set(
content,
Self.Selected
)
)
この関数の意味は、何らかの空白ではないものが選択された場合、選択された内容を「content」というグローバル変数に一時保存するという意味です。
最後に、実際にメールを送信する挙動を実装します。そのために、事前にPower Appsに「Office 365 Outlook」というコネクターを追加する必要があります。
コネクター追加しましたら、新規データの追加の確定ボタンに、メール送信するためのコードを追加したいと思います。若干探しにくいが、新規データの追加を確認するボタンは、UIの自動生成機能を利用する場合、以下の位置で見つけてください。
すると、このボタンの「OnSelect」に、1行目の
SubmitForm(XXXX);
を残して(SubmitForm内の値は人によって違います)、2行目以後以下の関数を追加します。
Office365Outlook.SendEmailV2(
sendto,
content.メールタイトル,
content.本文,
{
Attachments: Table(
{
Name: "画像.jpg",
ContentBytes: content.挿絵.Full,
'@odata.type': ""
}
)
}
)
この関数の意味は、データベースへデータ追加した後、「Office365 Outlook」コネクターを使って、「sendto」に保存された送信先に、「content」に保存された「content.メールタイトル」をタイトルとし、「content.本文」を本文とし、「content.挿絵.Full」を添付ファイルとしたメールを送信するという意味です。メール送信用関数「Office365 Outlook」を詳しく知りたい場合、公式ドキュメントを参照してください。(本文が使った関数と若干違いがあります)
以上で、本アプリの開発が完了しました。
Power AppsとAppSheet両方を使って、同じアプリを開発してみましたが、Power AppsとAppSheetを比較してみたいと思います。
| Power Apps | AppSheet | |
|---|---|---|
| ライセンス | Office/Microsoft 365ライセンスに含まれますが、Dataverseを含めるプレミアム機能を使うには、別途ライセンスが必要。 | ほとんどのGoogle Workspaceライセンスに、AppSheet Coreライセンスが含まれて、十分に使える |
| 開発難易度 | 中~高難易度 ある程度のWebデザイン、コーディングの知識を求める | 低難易度 ほとんどアプリ開発関連知識を求めない |
| 開発スピード | 遅い ほとんどの基本挙動がユーザー自身で実装する必要がある。 | 早い ほとんどの基本挙動が実装されている。 |
| カスタム性 | 高 UI、ロジックなどを自由にカスタマイズできる | 中 用意された選択肢の中でカスタマイズする必要がある |
| ドキュメント | 難しい Microsoftドキュメント一貫とした、詳しすぎる問題 | 簡単 AppSheetの仕様自体も簡単なため、ドキュメントも理解しやすい |
| コミュニティリソース | チュートリアルなどのリソースが多い | 仕様自体が簡単なため、チュートリアルの需要自体が低い |
個人的な感想として、Power Appsは「ローコードツール」ではありますが、よく使われる一般的な機能を実装するにも、わりと時間がかかってしまうというイメージでした。
そのため、最低限のシンプルな機能だけを実現したいアプリ開発に、Power Appsが向いていますが、それ以上の機能を求める場合、Power Appsではなく、ゴリゴリのコーディングが必要な本格的なアプリ開発をお勧めします。
今回は、Power Appsを使って、メルマガ送信アプリを開発してみました。少しだけコーディングが必要ですが、本文に従って比較的簡単に類似アプリを開発できると思います。
又、Power Appsとの競合製品、AppSheetとの比較を行いました。カスタマイズ性がAppSheetより上である代わりに、開発のハードルがPower Appsの方が高いという感想でした。
本文を通じて、Power Appsができること、使い心地などをより理解できましたら幸いです。
条件に該当するページがございません