次の方法で共有


ロジック最適化のための推奨事項

この Power Platform Well-Architected パフォーマンス効率チェックリストのレコメンデーションに適用されます:

PE:06 パフォーマンスに優れたロジックを使用して、プラットフォームへの責任を確実にオフロードします。 ロジックは、意図した目的にのみ、必要な場合にのみ使用してください。

このガイドでは、コードとインフラストラクチャのパフォーマンスを最適化するための推奨事項について説明します。 コードとインフラストラクチャを最適化するには、コンポーネントを主要な目的にのみ使用し、必要な場合にのみ使用する必要があります。 コードとインフラストラクチャを使いすぎると、不要なリソース消費、ボトルネック、応答の遅延が発生します。 これらの非効率性を補うには、同じタスクを実行するリソースを追加する必要があります。

定義

任期 説明
同時実行 複数のタスクまたはプロセスが一度に実行されるが、必ずしもまったく同時に実行されるとは限らない場合。
並列性 複数のタスクまたはプロセスが同時に実行される場合。

主要な設計戦略

ロジックとインフラストラクチャを最適化するには、ロジックとサポートするインフラストラクチャを微調整して、パフォーマンス効率を向上させる必要があります。 タスクを迅速に実行し、リソースを浪費しない高性能なロジックが必要です。 これには、不必要な複雑さを避けるために合理化された、適切に設計されたインフラストラクチャが必要です。 ワークロードでは、プラットフォーム固有の機能を使用する必要があります。 このアプローチにより、ロジックとインフラストラクチャの両方が、主に主要な目的に使用され、必要な場合にのみ使用されるようになります。

ロジックのパフォーマンスの最適化

ロジックのパフォーマンスを最適化するには、コードを変更してリソース使用量を減らし、実行時間を最小化し、パフォーマンスを向上させます。 ロジックを変更して、アプリまたはフローの効率と速度を向上させることができます。 パフォーマンスの問題をブルートフォースで覆い隠してはいけません。 ブルートフォースとは、コードのパフォーマンスを補うためにコンピューティングリソースを追加することで、ソースをアドレス指定する代わりに容量を追加するようなものです。 最適化によってパフォーマンスの問題を修正する必要があります。 ロジック性能を最適化すると、システム リソースの使用率が最大化され、応答時間が短縮され、レイテンシーが短縮され、ユーザー エクスペリエンスが向上します。

ロジックのインストルメント化

ロジックのインストゥルメント化とは、実行時にデータを収集し、ロジックのパフォーマンスを監視するために、カスタムイベントログを追加する方法を指します。 ロジックのインストゥルメント化を使用すると、開発者は実行時間などの主要なメトリックに関する情報を収集できます。 ロジックをインストルメント化することで、開発者はロジックのホットパスに関する分析情報を得て、パフォーマンスのボトルネックを特定し、パフォーマンス効率を高めるためにロジックを最適化することができます。

理想的には、ソフトウェア開発ライフサイクルの早い段階で論理解析を実行する必要があります。 論理的な問題を早期に発見すればするほど、修正コストは安くなります。 このロジック分析をできるだけ自動化する必要があります。 動的、静的なコード解析ツールを使用して、手作業を減らします。 たとえば、Flow Checker は、フィルター条件を指定していないクエリなど、パフォーマンスが期待できないロジックをハイライトすることができます。 ただし、このテストはあくまでも運用環境のシミュレーションであることに注意してください。 プロダクションでは、ロジック最適化を最も明確に理解できます。

トレードオフ: ロジック監視ツールはコストを増加させる可能性があります。

ホット パスの特定

ロジックをインストルメント化することで、さまざまなロジックパスのリソース消費を測定できます。 これらの測定値は、ホット パスを特定する際に役立ちます。 ホットパスは、パフォーマンスとリソース使用量に大きく影響します。 これらは、高いパフォーマンスと低待機時間を必要とするプログラムの重要なセクションまたは頻繁に実行されるセクションです。

コードのホット パスを特定するには、次の手順を検討してください。

  • ランタイム データの分析: ランタイム データを収集して分析し、最も経過時間を消費するロジックの領域を特定します。 頻繁に実行されるロジックや、完了までに時間がかかるパターンやロジックのセクションを探します。

  • パフォーマンスの測定: プロファイリング ツールまたはパフォーマンス テスト フレームワークを使用して、さまざまなロジックパスの実行時間とリソース消費を測定します。 このプロセスは、ボトルネックと改善すべき領域を特定するのに役立ちます。 たとえば、Power Apps の 監視を使用すると、アプリのイベントや数式がどのように動作するかをより深く理解でき、パフォーマンスを向上させることができます。

  • ビジネス ロジックとユーザーへの影響を考慮する: アプリケーションの機能または重要なビジネス オペレーションとの関連性に基づいて、さまざまなロジック パスの重要性を評価します。 ユーザーに価値を提供したり、パフォーマンス要件を満たしたりするために、どのロジックパスが重要であるかを判断します。

ロジックの最適化

ロジックの最適化とは、ロジックの構造と設計を改良して、より少ないリソースでタスクを実行することです。 ロジックの改善により、不要な操作が削減されます。 これにより、より少ないリソース消費でより高速な実行が可能になります。 パフォーマンスに影響を与える可能性のある不要な操作をロジック パス内で削除する必要があります。 ホット パスの最適化を優先して、パフォーマンス効率を最大限に向上させることができます。

ロジックを最適化するには、次の戦略を検討してください。

  • 不要な関数呼び出しを削除する: ロジックをレビューし、目的の機能に不可欠ではなく、パフォーマンスに悪影響を与える可能性のある関数を特定します。 たとえば、コードの前半で完了した検証を関数呼び出しが実行する場合、不要な検証関数呼び出しを削除できます。

  • ログ操作を最小限に抑える: ログ記録はデバッグと分析に役立ちますが、過剰なログ記録はパフォーマンスに影響を与える可能性があります。 各ログ操作の必要性を評価し、パフォーマンス分析にとって重要ではない不要なログ呼び出しを削除します。 ログ記録のオンとオフを切り替えられるようにしておくと、デバッグを支援しつつ、運用のパフォーマンスに問題を生じさせないようにすることができます。

  • ループと条件の最適化: ロジックのループと条件を分析し、排除できる不要な反復や条件を特定します。 これらの構造を単純化して最適化することで、コードのパフォーマンスを向上させることができます。 ループ内の関数呼び出しを最小限に抑え、冗長な計算を排除します。 計算をループの外側に移動することを検討します。

  • 不要なデータ処理を減らす: 冗長な計算や変換など、不要なデータ処理操作がないかロジックを確認します。 これらの不要な操作を排除して、ロジックの効率を向上させます。 たとえば、コードで値を計算して保存操作で保存する代わりに、Dataverse 計算列、ロールアップフィールド、またはPower Fx 列を使用します。

  • データ構造を最適化します。 データを効率的に格納して取得するには、適切なデータ構造を選択し、必要なデータ列のみを選択します。 特定の問題に最適なデータ構造を選択します。 データ構造が適切であれば、アプリケーションのパフォーマンスが向上します。

  • ネットワーク要求の最小化: ロジックにネットワーク リクエストの実行が含まれる場合 (たとえば、コネクタ アクションを使用する場合)、リクエストの数を最小限に抑え、その使用を最適化します。 可能な場合は要求をバッチ処理し、不要なラウンド トリップを回避してパフォーマンスを向上させます。

  • データ構造のサイズを小さくする: データ要件を確認し、不要なフィールドやプロパティを削除します。 適切なデータ型を選択し、データを効率的にパックすることで、メモリ使用量を最適化します。

  • 非同期的に作業する: ロジックで作業を同期ではなく非同期に実行できるかどうかを評価します。 たとえば、操作をインラインで実行する代わりに、Power Automate フローを実装して作業を非同期的に処理することを検討してください。

  • カスタマイズ前に構成します。 可能であれば、標準のアプリケーション コンポーネントを使用します。 プラグインや JavaScript などのカスタマイズは、パフォーマンスに影響を与える可能性があります。

  • コントロールを最小化します。 フォームに必要なフィールドのみを表示します。フィールドが多すぎると、ユーザー インターフェイスが煩雑になり、パフォーマンスに影響を与える可能性があります。 コマンド バー、キャンバス アプリ、またはカスタム ページのコントロールの数を最小限に抑えます。 ギャラリーを入れ子にしたり、ギャラリーにコンポーネントを追加しすぎないようにしてください。

  • データ クエリを最適化します。 アプリまたはフローに必要なデータのみを読み込みます。 サーバー側のビューを使用してデータを事前にフィルター処理し、クエリに関連するデータを絞り込みます。

ご利用の Power Platform 製品に固有のパフォーマンスに関する推奨事項をご確認ください。 これらの推奨事項に照らしてロジックを評価し、改善の余地がある領域を特定します。

トレードオフ: ロジックとホット パスの最適化には専門知識が必要です。 ロジックの非効率性を特定するのは主観的な作業であり、高度なスキルを持つ人材が必要になる可能性があります。

同時実行と並列処理を使用する

同時実行と並列処理を使用するには、コンピューティング リソースを効率的に使用するために、複数のタスクまたはプロセスを同時または重複して実行する必要があります。 これらの手法により、ワークロードが処理できる全体的なスループットとタスクの数が増加します。 タスクを同時にまたは並行して実行すると、アプリケーションの実行時間を短縮し、応答時間を向上させることができます。

同時実行と並列処理により、コンピューティング リソース間でワークロードが効果的に分散されます。 並行処理や並列処理を増やす場合は、他のシステムへの影響を考慮してください。 たとえば、Power Automate のフローで各品目を順に処理する並列ループは、そのループのロジックで使用されるコネクタのリクエスト制限を超える可能性があります。

並列性を使用します。 並列処理とは、システムが複数のコンピューティング リソースで複数のタスクまたはプロセスを同時にトリガーする機能です。 並列処理では、作業負荷をより小さなタスクに分割し、それらを並行して実行します。 ロジックを並行して実行すると、ワークロードが複数のブランチに分散されるため、パフォーマンスが向上します。

コンカレンシーを使用します。 同時実行性とは、システムが複数のタスクまたはプロセスを実行する機能です。 同時実行により、ワークロードのさまざまな部分が独立して進行できるため、全体的なパフォーマンスを向上させることができます。

  • 同時実行: 同時実行では、同じロジックを同時に実行できます。 同時実行を 1 つに制限すると、ロジックが直列化され、一度に 1 つの品目を処理することになります。 ワークロード項目の同時実行量を制御すると、処理中のリソース使用量の管理に役立ちます。 たとえば、Power Automate フロー ループは、同時制御プロパティを使用して複数のアクションを並行して処理するように構成できます。

    ヒント

    同時実行を有効にする前に、複数のアクションが同時に実行されることに注意してください。ループの一部としてデータを書き込む場合は、データの宛先が同時要求を処理できることを確認してください。

  • キュー: キューとは、ワークロードのリクエストを送信するコンポーネント (プロデューサー) と処理を行うコンポーネント (コンシューマー) の間に位置するストレージ バッファです。 1 つのキューに複数のコンシューマが存在する可能性があります。 タスクが増えたら、需要に合わせてコンシューマーをスケーリングする必要があります。 プロデューサーはタスクをキューに入れます。 キューは、コンシューマのキャパシティが確保されるまでタスクを保存します。 キューはしばしば、需要のピークを経験する処理サービスに仕事を引き渡す最良の方法です。 詳細については、キュー ベースの負荷分散パターンおよびストレージ キューとサービス バス キューを参照してください。

バックグラウンド ジョブの最適化

多くのアプリケーションでは、ユーザー インターフェースとは独立して実行されるバックグラウンド タスクが必要です。 アプリケーションはジョブを開始し、ユーザーからの対話式要求の処理を続行できます。 バックグラウンド ジョブの例としては、バッチ ジョブ、プロセッサを集中的に使用するタスク、ワークフローなどの実行時間の長いプロセスなどがあります。 バックグラウンド タスクがアプリケーションをブロックしたり、システムに負荷がかかっているときに動作が遅れて不整合を起こしたりしないようにする必要があります。 バックグラウンド ジョブの最適化の詳細については、バックグラウンド ジョブの開発に関する推奨事項を参照してください。

Power Platform の促進

コードのインストゥルメント化: キャンバス アプリを構築する際には、アプリの効率を高めるためにパフォーマンスの高いパターンを使用すべきであり、一方でアンチ パターンは避けるべきです。 詳細は、パフォーマンスの高い Power Apps の作成の概要を参照してください。 Power Apps の 監視 を使用して、開発中にパフォーマンスの問題を診断し、トラブルシューティングします。

エンゲージメントと成果を測定する: エージェントを構築する際には、会話への関与結果を追跡することが、エージェントのパフォーマンス指標を測定し、改善すべき領域を発見するために不可欠です。

コード ロジックの最適化: ソリューション チェッカー機能を使用すると、ベストプラクティスルールセットに対するソリューションの静的解析チェックを詳細に行い、問題のあるパターンを迅速に特定することができます。 フロー チェッカーを使用すると、フローの実装のどの領域がパフォーマンス リスクをもたらすかについての分析情報を得ることができます。

同時実行と並列処理の使用: Power Automate クラウド フローは、ループとトリガーでの同時実行をサポートします。 同時実行、ループ、バッチ解除の制限 が適用され、パフォーマンス プロファイルに基づいていることに注意してください。 Power Apps は、Concurrent 関数を使用して同時実行をサポートします。

Dataverse パフォーマンスの最適化: Microsoft Dataverse は、開発者が高度にカスタマイズされた、またニーズに合わせたエクスペリエンスを構築できる拡張可能なフレームワークを提供します。 Dataverse をカスタマイズ、拡張、または統合する場合は、確立されたガイダンスとベスト プラクティスに注意してください。 Microsoft Dataverse を使用する際のベスト プラクティスとガイダンス を参照してください。

パフォーマンス効率チェックリスト

完全なレコメンデーションのセットを参照してください。