Power Platform 開発で気をつけること

ローコードで開発ができる Power Platform 便利ですよね。サクッと個人や少人数だけで使う小さな規模ものを作るのは簡単です。
この記事ではそれより大きな規模の開発をして気をつけること、改善してくれると嬉しいなと思うことなどを箇条書きでまとめたのでご紹介します。こうすれば解決できるよ、こういうことが困ったよ、などがあったらぜひコメントください 🐔

※ Power BI, Power Apps Portal, Power Automate UI Flow は使わなかったため対象外です。

## Power Apps

- ライセンスが簡単そうに見えて複雑。 ※契約前に Microsoft に問い合わせてください。
  - おそらく殆どの企業に入っているであろう M365 E3 ライセンスの場合だとキャンバスアプリのみ可能。
     - ただしキャンバスアプリでも CDS やプレミアムコネクタ (SQL Server 接続など) は E3 ライセンスでは使えない。
     - Sharepoint のリストや Excel のみデータソースとして扱える（はず）。
  - CDS やプレミアムコネクタを使える Power Apps ライセンスの場合はアプリごとのプランと、ユーザーごとのプランがある。
     - アプリごとのプランはアプリごとではなくて、ユーザーのアプリごとのため利用するユーザーの数だけ必要。プラン名だけで判断してはいけない。
     - アプリごとのプランを使うには、ユーザーごとのライセンスが必ず一つは必要（だったはず）。
     - ユーザーごとのプランはユーザーごとに必要。基本的に開発者はこっちのほうがよい。
     - アプリごとプランとの違いはアプリを作れる数と CDS の容量。
- 発行の回数が多く、忘れやすい。
  - とりあえず何かを修正して完成したら保存、発行を押し忘れないようにしましょう。
- コード管理ができない。
  - 修正が完了したら zip にしてエクスポートしておいて保存するしかない？ Diff できず修正箇所がわからないため、取っておくと壊れたときに戻せます。
  - コードレビューという概念がないので、複雑なものは素直に Web app にしましょう。

### キャンバスアプリ

- 複数人で同時に同じアプリを編集（開発）できない。
  - 画面やコンポーネントごとに別アプリで開発して最後にまとめるか、アプリを開発者ごとコピーして開発し、その後コピー元のアプリに内容をコピーするしかない。
  - どちらにしてもコンポーネントのコピーが一つでも失敗したり、位置の上位関係がおかしくなると正しく動かないので注意。
  - キャンバスアプリは複数人での開発を想定していないのかもしれない。対応してくれると嬉しい。
- コンポーネントを増やしすぎると画面描画が遅くなる。
  - 一つの画面に色々な機能を詰め込みすぎないようにしましょう。
  - データテーブルのカラムが多すぎても遅くなります。
- 画面のポップアップ表示が機能ない。
  - コンポーネントを非表示にして、ボタンで表示非表示を切り替えることは可能。位置の上位関係に注意。
  - コンポーネントが隠れていると編集が複雑になってしまうため、可能な限りポップアップではなく画面遷移で対応しましょう。
- 変数を作りすぎたり、処理をたくさん書くとコードが複雑怪奇の魔法になってしまう。
  - Excel の数式バーに大量のコードが書かれていると思ってください。
  - プロパティやデータの変更は自動で読み込んでくれるため、可能な限り変数ではなくコンポーネントのプロパティを参照すると可読性が上がります。
- コンポーネントのプロパティを選択した状態で Flow (Automate) を追加すると、そのプロパティが `Run()` で消されてしまう。
  - Flow を追加するときは実際に処理をするボタンの `OnSelect` を選択した状態にするか、処理を消されても大丈夫コンポーネントを選択した状態で追加しましょう。
- Flow の結果を待つ場合は 120 秒を超えると自動的に Flow を再度コールしてしまう。
  - 処理が長い Flow の場合は結果を待たないようにするか、 Flow の処理を短くする＆再度コールされても問題ないような作りにしましょう。
- データの読み込みはデフォルト 500 レコードまで。
  - 最大 2000 レコードまで設定で増やせますが、基本的にそういう要件がある場合は Power Apps は向いていないと思います。
  - 大量にレコードがあったとしても Gallery やデータテーブルを使って少ない件数を表示するだけなら大丈夫。
- データソースを検索するときに Filter などは正しく使えるけど、データの文字列を切り取る関数などは正しく動かない可能性がある。
  - 正しい結果にならない可能性があるよという警告が出たはずです。
  - 詳しくは委任で調べてください。どれが大丈夫な関数化かどうかわかります。
- データの大量同時更新のパフォーマンスはよくない。
  - おそらく早いであろう CDS でも 100 レコード 12 秒かかります。（他のデータソースはどうなんでしょう？）
  - 一件の更新なら早いので、データソースの見直しをして大量更新がないような作りにしましょう。

### モデル駆動型アプリ

- 画面のカスタマイズができない。
  - 正確に言うとプログラミングでレイアウトを作ってインポートできるようなのですが、それをするなら普通の Web app でよいと思います。
- 画面上部のメニュー（リボン？）の表示、非表示設定が難しい。
  - Microsoft さん、これを簡単に選択できるようにしてほしいです。 Excel テンプレートとか、レポートの実行など使わないです。
- 階層表示をするためには詳細設定（クラシックな画面）を開いて CDS の設定を変更する必要がある。
  - これも新しい CDS の画面から設定できるようにしてほしいです。たどり着くのが結構難しかった。

## Power Automate

- コール可能なアクション数に制限はあるけど、制限を超えても勝手に止まることはない。
  - 一応これくらいにしてねという紳士協定があります。超えそうな場合は Microsoft に相談してください。
- アクションによっては 1 分間に 60 回までなどという制限がある。
  - Excel コールしすぎて一時的に 429 エラーが返ってきたり、外部サービスアクションは一ヶ月終わるまで延々とエラーになったりしてしまう。
  - アクションのはてなマークをクリックするとアクションの詳細ページを表示できるはずなので、ループなどで大量にアクションしそうなときは必ず見ましょう。
- 大量レコードの読み込み、書き込みは上限設定がある。
  - 上限を超えないレコードのみ読み込み、書き込みされるので気をつけましょう。
- 大量のアクションを含むフローのメンテナンスは難しい。
  - if else, for が大量に含まれて GUI で表示されるコードだと思ってください。
  - Microsoft さん、専用アクションをまとめて、フローの一つとして読み込める機能などがあればよいと思いました。
- 外部サービスをコールするためのプレミアムな HTTP アクションがなぜか E3 ライセンスで使える。
  - よく使いたいと思うけどプレミアムなのでライセンスが必要なはずです。
  - Microsoft に問い合わせたところ、なぜ使えるのかわからないけど、急に使えなくなる可能性があるからライセンスがないなら使わないほうがよいとのこと。
- CDS を一度に更新するアクションはない。
  - 一つづつループで更新してください。もちろん速度に限界があるため、大量更新しない作りのほうがよいです。
- Excel はセル操作はできず、テーブル操作のみ。
  - 例えば B5 に特定の値を入れる、みたいなことはできない。 B5 の数式にテーブルの値を参照するように設定するか、 Graph API を使いましょう。