ソリューションは、アプリ、テーブル、フロー、Web リソース、プラグインなどの Power Platform オブジェクトを配布する目的で使用されます。 この記事では、ソリューション オブジェクトを一連のベスト プラクティス ルールに照らして包括的に静的解析する強力なツール、ソリューション チェッカー機能を紹介します。 ソリューション チェッカーを使用すると、コンポーネント内の問題のあるパターンをすばやく特定し、問題や影響を受けるコンポーネントを強調し、各問題の解決方法に関するドキュメントへのリンクを提供する詳細なレポートを受け取ることができます。 これにより、ソリューションのパフォーマンス、安定性、信頼性が最適化されます。
ソリューション チェッカーは、環境からエクスポートできるアンマネージド ソリューションを使用します。
ソリューション チェッカーは、Power Apps (make.powerapps.com) から、または PowerShell を使用して実行できます。
ソリューション チェッカー がどのように役立つか
複雑なビジネス要件を満たすため、作成者は Power Platform をカスタマイズして拡張できるという非常に高度なソリューションを作成することになる傾向があります。 高度な実装により、パフォーマンス、安定性、信頼性の問題が生じるリスクが増加し、ユーザーの作業に悪影響を与える可能性があります。 これらの問題を解決する方法を特定して理解することは、複雑で時間がかかることがあります。 ソリューションチェッカー機能を使用すると、ベスト プラクティスのルールセットを使用して、ソリューションの問題のあるパターンを迅速に特定するチェックを数秒で実行できます。 チェックが完了すると、Power Apps とメールメッセージで、特定された問題、影響を受けるコンポーネントおよびコード、各問題の解決方法を説明するドキュメントへのリンクが記載された詳細なレポートが届きます。
ソリューション チェッカーは、これらのソリューション コンポーネントを分析します:
- Dataverseユーザー定義のワークフロー活動
- Dataverse Web リソース (HTML および JavaScript)
- SDK メッセージ手順などの Dataverse 構成
- Power Automate フロー (フローチェッカーを使用する)
- Power Fx 式 (アプリ チェッカーを使用する)
注意
- ソリューション チェッカーは、ECMAScript 2015 (ES6) 以降、ECMAScript 2018 (ES9) 構文までのグローバル変数をサポートします。 ES6 以降のグローバル変数、または ES9 以降の構文を使用して JavaScript を検出する場合、Web リソースの Web 非サポート構文の問題が報告されます。
- ソリューション チェッカーを使用しても、ソリューションのインポートが成功することは保証されません。 ソリューションに対して実行される静的分析チェックは、宛先環境の構成済み状態を認識しておらず、インポートの成功は、環境内の他のソリューションまたは構成に依存している可能性があります。
ソリューション チェッカーを実行する
Power Apps にサインインします。
左ウィンドウで、ソリューション を選択します。 項目がサイド パネル ウィンドウに表示されない場合は、…さらに表示 を選択して、目的の項目を選択します。
分析するアンマネージド ソリューションの横で、...を選択し、ソリューション チェッカーをポイントして実行を選択します。
ソリューション チェッカー コマンドボタンには読み込みインジケーターがあり、実行中... 状態が ソリューション チェック 列の ソリューション リストに表示されます。
注意
- ソリューション チェッカーが分析を完了するまで、数分間かかる場合があります。
- チェックが完了したら、電子メール通知を受け取り、Power Apps サイトの 通知 領域に通知が表示されます。
- チェックが完了したら、レポートを表示します。
チェックを取り消す
環境でソリューション チェックを送信すると、ソリューションページの右上領域の状態ウィンドウでチェックを取り消すことができます。
チェックを取り消すと、ソリューション チェックが実行を停止し、ソリューション チェック状態が以前の状態に戻ります。
ソリューション チェッカーの状態
環境にソリューション チェッカーをインストールすると、ソリューション チェック 列が ソリューション リストで使用可能になります。 この列には、ソリューションのソリューション分析状態が表示されます。
都道府県 | 説明 |
---|---|
実行されていない | ソリューションはまったく分析されていません。 |
実行中 | ソリューションが分析されています。 |
完了できなかった | ソリューションの分析が要求されましたが、分析が正常に完了しませんでした。 |
日時 現在の結果 | ソリューションの分析が完了し、結果をダウンロードできます。 |
完了できなかった。 日時 現在の結果 | 最新の分析要求が正常に完了しませんでした。 最後の正常な結果をダウンロードできます。 |
Microsoft がチェック | これは、Microsoft の管理ソリューションです。 ソリューションの分析は、これらのソリューションで使用できません。 |
発行元がチェック | これは、Microsoft が管理していないソリューションです。 現在、ソリューション分析は、これらのソリューションで利用できません。 |
ソリューション チェッカー レポートを確認
解析チェックが完了すると、ポータルで解析レポートを表示したり、Webブラウザからレポートをダウンロードすることができます。 ポータルでは、問題、場所、重大度 別に結果を並べ替え、ソリューションで検出された問題の詳細情報を表示することができます。
左ウィンドウで、ソリューション を選択します。 項目がサイド パネル ウィンドウに表示されない場合は、…さらに表示 を選択して、目的の項目を選択します。
ソリューション チェッカーレポートを表示する非管理ソリューションの横に配置されている、 ... を選択し、 ソリューション チェッカー をポイントして 結果を表示する を選択します。
問題を選択すると、解決方法の詳細およびガイダンスが表示されます。
ソリューションチェックの結果は、ダウンロードすることも可能です。 ソリューション チェッカーの ZIP ファイルは、Web ブラウザーによって指定されたフォルダーにダウンロードされます。 ダウンロードレポートは Excel 形式であり、ソリューションで検出された各問題の影響、種類、場所を特定する際に役立つ、いくつかの視覚化と列が含まれています。 問題の解決方法に関する詳細なガイダンスへのリンクも提供されます。
- 左ウィンドウで、ソリューション を選択します。 項目がサイド パネル ウィンドウに表示されない場合は、…さらに表示 を選択して、目的の項目を選択します。
- ソリューション チェッカー レポートをダウンロードするアンマネージドソリューションの横に配置されている、 ... を選択し、 ソリューション チェッカー をポイントして 結果のダウンロード を選択します。
- ソリューション チェッカーの ZIP ファイルは、Web ブラウザーによって指定されたフォルダーにダウンロードされます。
レポート内の各列の概要を以下に示します。
レポート列 | 内容 | コンポーネントに適用 |
---|---|---|
問題点 | ソリューションで識別される問題のタイトル。 | すべて |
カテゴリ | 識別される問題の分類: パフォーマンス、メンテナンス性、使用法、サポート性、設計、安全、アクセシビリティ、またアップグレードの準備状況。 | All |
重大度 | 検出された問題の潜在的な影響を表します。 使用可能な影響の種類は、重大、高、中、下、および情報です。 | All |
ガイダンス | 問題、影響、推奨されるアクションの詳細が記載された記事へのリンク。 | すべて |
コンポーネント | 問題が特定されたソリューション コンポーネントです。 | すべて |
Location | アセンブリや JavaScript ファイル名など、特定された問題が発生したコンポーネントの場所やソース ファイルです。 | すべて |
行番号 | 影響を受ける Web リソース コンポーネントの問題の行番号参照。 | Web リソース |
モジュール | アセンブリで特定された問題が検出されたモジュール名。 | ユーザー定義ワークフロー活動 |
タイプ | アセンブリで識別された問題の種類。 | ユーザー定義ワークフロー活動 |
メンバー | アセンブリで識別された問題のメンバー。 | ユーザー定義ワークフロー活動 |
ステートメント | 問題が発生したコード ステートメントまたは構成。 | すべて |
コメント | 高レベルな解決手順が含まれる問題に関する詳細。 | All |
ソリューション チェッカー ルールをローカルで実行する
開発環境でソリューション チェッカー ルールを実行すると、ソリューション リソースを作成するときに問題をより早く検出できます。 これは現在、Web リソース (JavaScript および TypeScript) をサポートしています。 詳細については、NPM パッケージ@microsoft/eslint-plugin-power-apps にアクセスしてください。
PowerShell を使用して ソリューション チェッカー を実行する
サービスと直接やりとりしても使用できる PowerShell モジュールも使用可能です。 Microsoft.PowerApps.Checker.PowerShell モジュールは、Power Apps 環境に関するアンマネージド ソリューションの分析用途でのみ使用でき、自動化またはサービスをお使いのビルドに統合してパイプラインを解放することができます。 詳細: Microsoft.PowerApps.Checker.PowerShell の概要
ソリューション チェッカーにより使用される推奨事項ルール
次の表に、コンポーネントの種類、ルールの説明、重要度、カテゴリを示します。 マネージド環境でのソリューション チェッカーが強制されるように構成されている場合、重大な違反はブロックまたは警告されます。 詳細情報: マネージド環境でソリューション チェッカーを使用する
ソリューション コンポーネント | ルール名 | ルールの説明 | 重大度 | カテゴリー |
---|---|---|---|---|
プラグインまたはワークフロー活動 | meta-remove-dup-reg | 重複する Dataverse プラグインの登録を避けてください。 | 重大 | 実績 |
プラグインまたはワークフロー活動 | meta-avoid-reg-no-attribute | Dataverse プラグイン登録にフィルター属性を含めます。 | ミディアム | 実績 |
プラグインまたはワークフロー活動 | meta-avoid-reg-retrieve | Retrieve および RetrieveMultiple メッセージ用に登録された Dataverse プラグインを使用するときは注意してください。 | ミディアム | 実績 |
プラグインまたはワークフロー活動 | meta-remove-inactive | Dataverse で非アクティブ構成を削除します。 | 安 | メンテナンス性 |
プラグインまたはワークフロー活動 | meta-avoid-crm4-event | Microsoft Dynamics CRM 4.0 プラグイン登録ステージを使用しないでください。 | ミディアム | アップグレードの準備状況 |
プラグインまたはワークフロー活動 | meta-avoid-retrievemultiple-annotation | アノテーションの RetrieveMultiple でプラグインを登録しないでください。 | 高 | 使い方 |
モデル駆動型アプリ | meta-license-sales-entity-operations | ソリューションには、有効な Dynamics 365 ライセンスを必要とする制限付き SDK メッセージと操作のエンティティが含まれています。 | 安 | ライセンス |
モデル駆動型アプリ | meta-license-fieldservice-customcontrols | ソリューションには、有効な Dynamics 365 Field Service ライセンスを必要とするカスタム コントロールが含まれています。 | 安 | ライセンス |
モデル駆動型アプリ | meta-license-fieldservice-entity-operations | ソリューションには、有効な Dynamics 365 Field Service ライセンスを必要とする制限された SDK メッセージと操作を持つエンティティが含まれています。 | 安 | ライセンス |
Web リソース | use-async | HTTP および HTTPS リソースを非同期に操作します。 | 重大 | 実績 |
Web リソース | avoid-modals | モーダル ダイアログを使用しないでください。 | 高 | サポート性 |
Web リソース | avoid-dom-form | 高 | サポート性 | |
Web リソース | avoid-dom-form-event | 高 | サポート性 | |
Web リソース | avoid-crm2011-service-odata | Microsoft Dynamics CRM 2011 OData 2.0 エンドポイントをターゲットにしないでください。 | 重大 | アップグレードの準備状況 |
Web リソース | avoid-crm2011-service-soap | Microsoft Dynamics CRM 2011 SOAP サービスをターゲットにしないでください。 | 重大 | アップグレードの準備状況 |
Web リソース | avoid-loadtheme |
loadTheme Fluent v8 API は使用しないでください。 |
安 | サポート性 |
Web リソース | avoid-browser-specific-api | Internet Explorer レガシー API またはブラウザーのプラグインを使用しないでください。 | 重大 | アップグレードの準備状況 |
Web リソース | avoid-unpub-api | 高 | サポート性 | |
Web リソース | avoid-window-top | 高 | サポート性 | |
Web リソース | avoid-2011-api | 廃止された Microsoft Dynamics CRM 2011 オブジェクト モデルを使用しないでください。 代わりに、Dataverse Web API の説明書に従ってください。 | 高 | アップグレードの準備状況 |
Web リソース | use-relative-uri | 絶対 Dataverse エンドポイント URL を使用しないでください。 | ミディアム | メンテナンス性 |
Web リソース | use-cached-webresource | ミディアム | 実績 | |
Web リソース | use-client-context | クライアント コンテキストを使用してください。 | ミディアム | アップグレードの準備状況 |
Web リソース | use-navigation-api | ナビゲーション API パラメーターを使用します。 | ミディアム | アップグレードの準備状況 |
Web リソース | use-offline | ミディアム | アップグレードの準備状況 | |
Web リソース | do-not-make-parent-assumption | 高 | 設計 | |
Web リソース | use-org-setting | 組織設定を使用します。 | ミディアム | アップグレードの準備状況 |
Web リソース | use-global-context | ミディアム | アップグレードの準備状況 | |
Web リソース | use-grid-api | グリッド API を使用します。 | ミディアム | アップグレードの準備状況 |
Web リソース | use-utility-dialogs | ミディアム | 使い方 | |
Web リソース | avoid-isActivityType | Xrm.Utility.isActivityType メソッドを新しい Xrm.Utility.gettableMetadata に置き換えます。リボン ルールは使用しないでください。 | ミディアム | アップグレードの準備状況 |
Web リソース | meta-avoid-silverlight | Silverlight Web リソースの使用は廃止されました。 | ミディアム | アップグレードの準備状況 |
Web リソース | remove-debug-script | 非開発環境にデバッグのスクリプトを追加することは避けてください。 | ミディアム | 使い方 |
Web リソース | use-strict-mode | 可能な場合は厳密なモードを使用します。 | ミディアム | 使い方 |
Web リソース | use-strict-equality-operators | 厳密等価演算子の使用。 | ミディアム | 使い方 |
Web リソース | avoid-eval |
eval 関数または同等の機能を使用しないでください。 |
重大 | セキュリティ |
Web リソース | avoid-with | 'with' オペレーターを使用しないでください。 | 高 | 実績 |
Web リソース | remove-alert | 'alert' 関数、またはその機能に相当するものは使用しないでください。 | ミディアム | 使い方 |
Web リソース | remove-console | コンソールでメソッドを使用しないでください。 | ミディアム | 使い方 |
Web リソース | avoid-ui-refreshribbon | フォーム onload および EnableRule で refreshRibbon を使用することは避けてください。 | 重大 | 実績 |
Web リソース | use-getsecurityroleprivilegesinfo | userSettings.securityRolePrivileges は使用しないでください。 代わりに userSettings.getSecurityRolePrivilegesInfo 使用してください。 | 高 | 実績 |
Web リソース | use-appsidepane-api | Xrm.Panels.loadPanel の代わりに Xrm.App.sidePanes.createPane を使用します。 | ミディアム | アップグレードの準備状況 |
Web リソース | web-sdl-no-cookies | HTTP Cookie は、内在するリスクと制限を伴う旧クライアント側のストレージ メカニズムです。 代わりに、Web Storage、IndexedDB、またはその他の最新の方法を使用してください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-document-domain | 送信元が同じチェックのバイパスを避けるために、document.domain プロパティへの書き込みを確認する必要があります。 azurewebsites.net などのトップレベルのドメインの使用は固く禁止されています。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-document-write | document.write または document.writeln の呼び出しは、サニタイズなしで DOM を直接操作するため、避ける必要があります。 代わりに document.createElement() または同様のメソッドを使用してください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-html-method | html() メソッドを (たとえば jQuery フレームワークで) 直接何度も呼び出すと、DOM がサニタイズなしで操作されるため、呼び出さないでください。 代わりに document.createElement() または同様のメソッドを使用してください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-inner-html | innerHTML または outerHTML プロパティの割り当ては、サニタイズなしで DOM を直接操作するため、避ける必要があります。 代わりに document.createElement() または同様のメソッドを使用してください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-insecure-url | セキュリティが脆弱な HTTP や FTP などのプロトコルは、暗号化プロトコル (HTTPS、FTPS) に置き換えることで、機密データがプレーンテキストの状態で、信頼性の低いネットワークで送信されるのを防いでください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-msapp-exec-unsafe | MSApp.execUnsafeLocalFunction() を呼び出すと、スクリプト インジェクションの検証が省略されるため、呼び出さないでください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-postmessage-star-origin | postMessage を使用して他のウィンドウにデータを送信する場合は、データが信頼境界線の外部に漏れるのを防ぐために、(* ではなく) ターゲットの生成元を必ず指定してください。 | ミディアム | セキュリティ |
Web リソース | web-sdl-no-winjs-html-unsafe | WinJS.Utilities.setInnerHTMLUnsafe() および類似のメソッドの呼び出しは、入力の検証を行いませんので、使用しないでください。 代わりに WinJS.Utilities.setInnerHTML() を使用してください。 | ミディアム | セキュリティ |
キャンバス アプリ | app-formula-issues-high | 追加の詳細については、Power Apps 計算式リファレンスを参照してください。 | 重大 | 設計 |
キャンバス アプリ | app-formula-issues-medium | 追加の詳細については、Power Apps 計算式リファレンスを参照してください。 | ミディアム | 設計 |
キャンバス アプリ | app-formula-issues-low | 追加の詳細については、Power Apps 計算式リファレンスを参照してください。 | 安 | 設計 |
キャンバス アプリ | app-use-delayoutput-text-input | 一部のシナリオでは、遅延ロードを使用してパフォーマンスを向上させます。 | ミディアム | 実績 |
キャンバス アプリ | app-reduce-screen-controls | パフォーマンスを向上させるために、アプリ コントロールの数を制限します。 | ミディアム | 実績 |
キャンバス アプリ | app-include-accessible-label | 明示的なラベルを使用して、アプリのアクセシビリティを向上させます。 | ミディアム | アクセシビリティ |
キャンバス アプリ | app-include-alternative-input | すべてのインタラクティブ要素が代替入力にアクセスできることを確認します。 | ミディアム | アクセシビリティ |
キャンバス アプリ | app-avoid-autostart | アプリ内のプレーヤーで自動起動を使用することは避けてください。 | ミディアム | アクセシビリティ |
デスクトップ フロー | desktopflow-avoid-unsafe-password | このフローでパスワードがセキュアに管理されていません。 | 高 | セキュリティ |
デスクトップ フロー | desktopflow-avoid-subflow-recursion | サブフロー間の再帰呼び出しが検出されました。これは無限ループが発生する原因になります。 | ミディアム | 設計 |
デスクトップ フロー | desktopflow-avoid-infinite-loop | フローで無限ループが検出されました。これはフローが無限に実行される原因になります。 | ミディアム | 設計 |
デスクトップ フロー | desktopflow-avoid-incomplete-if-branch | 不完全な If アクションが検出されました。コンテンツが不足しているか、または Else 分岐のみにアクションが含まれています。 | 安 | 設計 |
デスクトップ フロー | desktopflow-avoid-excessive-nested-ifs | 5 階層を超えて入れ子になった if 節が存在します。 | 安 | メンテナンス性 |
デスクトップ フロー | desktopflow-avoid-empty-on-error-block | "ブロック エラー発生時" のアクションが空であり、エラーが処理されません。 | 安 | 設計 |
デスクトップ フロー | desktopflow-limit-argument-count | 入力/出力変数の合計が上限である 25 を超過しています。 | 安 | メンテナンス性 |
デスクトップ フロー | desktopflow-input-argument-default-value | 入力/出力の変数が既定値を使用していません。 | 安 | メンテナンス性 |
デスクトップ フロー | desktopflow-limit-variable-name-length | 変数の名前が上限である 25 文字を超過しています。 | 安 | メンテナンス性 |
デスクトップ フロー | desktopflow-avoid-excessive-wait-actions | 待機アクションの不適切な使用が検出されました。待機アクションが 10 を超えており、潜在的なボトルネックの原因になります。 | 安 | 実績 |
デスクトップ フロー | desktopflow-avoid-immense-wait-duration | ハードコードされた待機アクションで 600 秒の制限を超える非常に長い待機時間が検出されました。 | 安 | 実績 |
参照
Dataverseに関するベスト プラクティスとガイダンス
モデル駆動型アプリのベスト プラクティスとガイダンス
ソリューション チェッカーの一般的な問題と解決策