Power Apps で作成したアプリが遅いな、起動に時間がかかるな、パフォーマンスが悪いな、と思われたことはありませんか?このシリーズでは、どのように最適化していくか、気をつける点についてご紹介しています。

パフォーマンス最適化シリーズ:

  • 概要編
  • SharePoint 編(本投稿)
  • SQLサーバ 編(公開予定)
  • Microsoft Dataverse 編(公開予定)
  • Excel 編(公開予定)
  • その他編(公開予定)

今回はSharePointオンラインでよくある問題点や改善方法についてご紹介していきます。

SharePoint コネクタからはSharePointリストなどに接続できます。SharePointリストからも、作成者はPower Appsメニューを選択し、ウィザード形式でキャンバスアプリを素早く作成できます。

主な問題

  1. クライアントに返すデータ量は重要です。特にSharePointデータソースが遠い場合は大きく影響します。関数が委任できないものである場合、Power Appsはデータ件数の上限数を取得します。既定では500件までですが、最大で2000件にまで増やすこともできます。ただし、取得するSharePointのリストの列数が多い場合などに2000件に増やしてしまうと、クライアントに戻すデータ量も非常に多くなり、取得するまでの時間が長くなります。
  2. 動的に取得する列数が多すぎる: SharePointは様々なデータの種類をサポートしています。動的参照や、人・グループ、計算列などがあります。Sharepointリスト上でこれらのように動的に変化する列を追加しすぎた場合には、SharePoint側の処理として、内部で計算結果を返すための時間がかかってしまいます。影響度合いはSharepointリスト上で格納しているアイテム数に依存します。

  3. 画像と添付の列:すべての列を読み込むようにしている場合、画像や添付ファイルのサイズによって反応が遅くなります。

推奨事項

  1. Sharepoint は委任可能な関数が豊富に存在するので、一度作成前に関数が委任可能かどうかを確認されることを推奨します。考慮せずに作成した場合、Power Appsは自動でデータの上限値(既定では500件)まで取得し、その後、関数の処理をクライアント側で実行しようとします。委任可能な関数を使うことでSharepoint側で計算されるためアプリのパフォーマンスは改善します。委任不可の関数をどうしても必要とする場合は、件数の上限値を最小限に抑えるか、少なくとも既定のままにすることを推奨します。
    例えば、IDの列を「数値型」としてリストに設定していたとします。以下の数式のいずれも同じ結果をもたらしますが、1つ目の式は委任可能なのに対し、2つ目は委任可能ではありません。
    委任可能な関数:Filter (‘SharePoint list data source’, ID = 123 )
    委任不可の関数:Filter(‘SharePoint list data source’, ID =”123″)
    SharePoint上でIDの列は数値である前提にできるため、このようにフィルターを適用する場合には文字列としてではなく、値でフィルターを適用する必要があります。そうしなければ、型が違うため委任不可な関数となってしまいます。
  2. SharePointリストを再度確認し、本当に設定した列が必要かを精査し、確認してください。列が増えるにつれて、データ取得時のパフォーマンスにも影響します。その理由として、実際にアプリで利用する列が少なかったとした場合でも、実際にアプリから取得されるデータとしては全ての列を取得しにいきます。そのため、列が多すぎると、取得に時間がかかってしまいます。
    どうしてもリスト上で多くの列を必要とする場合には、ファイル>設定>近日公開の機能にある「明示的な列の選択」を有効化することで必要となる列の情報のみを取得することが可能となります。
  3. Sharepoint の参照列や人、グループのタイプの列を追加しすぎないようにしましょう。これらを追加することで、FilterやSearch関数の適用を実行する前にSharePointサービス側での処理により多くの時間がかかってしまいます。代わりにメールアドレスやユーザーID等を文字列で保存することを推奨します。
  4. 数百、数千のアイテムが存在するリストを利用する代わりに、カテゴリー別や年別、月別で分けることを検討してください。データ取得時にその対象となる範囲のもののみを取得できるようになります。製品チームで検証した特定の環境下でのベンチマークでは、リストに設定されている列の数やデータのアイテム数によって大きくSharePointリストへのOData処理時間が影響を受けることがわかりました。実際みなさんが利用される環境では、列を減らしたり取得するデータ数を減らすことが難しいと思われます。そのため、モニター機能を活用し、列数やデータ件数の設定を変更してみてチューニングを行ってください。