次の方法で共有


コード コンポーネントのデバッグ

この記事では、開発中にコード コンポーネント ロジックをデバッグする方法についての情報を提供します。 コードのユニット テストを作成することは、ロジックを Power Apps component framework ランタイムから独立してテストできるようにするためのグッドプラクティスと見なされます。

この記事では、テスト ハーネスを使用して、Microsoft Dataverse にデプロイした後にコードコンポーネントをデバッグする方法を示します。

ブラウザのテスト ハーネスを使用したデバッグ

コード コンポーネント ロジックを実装している間、npm start または npm start watch がコードコンポーネントをビルドし、新しいブラウザ ウィンドウでローカル テスト ハーネスを開きます。 このテスト ハーネスは Microsoft Power Platform CLI の一部であるため、モデル駆動型アプリ、キャンバスアプリ、またはポータルでコード コンポーネントを使用する予定があるかどうかに関係なく同じです。 詳細: 最初のコンポーネントを作成する

注意

npm start を使用する前に、マシンに npm がインストールされているかどうかを確認する必要があります。

次のイメージは、次のような DataSetGridサンプルの npm start watch を使用する際に Visual Studio Code がどのようになるかを示します。

Visual Studio Code のデバッグ。

watch モードでテスト ハーネスを起動すると、アクションの変化をすばやく確認できます。 次のコンポーネント アセットに加えられた変更は、再起動せずにテスト ハーネスに自動的に反映されます。

  1. index.ts ファイル。
  2. index.ts にインポートされたモジュール (node_modules を除く)。
  3. ControlManifest.Input.xml ファイルにリストされているすべてのリソース。たとえば、css/DataSetGrid.css または strings/DataSetGrid.1033.resx

これらのファイルのいずれかに変更を加えると、Change detectedメッセージが表示され、ブラウザは更新されたコードでリロードします。

変更が検出されました。

次の画像は、新しいブラウザ ウィンドウで開いたテスト ハーネスを示しています。

テストハーネス 1

上の画像が示すように、ブラウザ ウィンドウが開き、4 つの領域が表示されます。 コードコンポーネントは左側のペインにレンダリングされますが、右側のペインには、デバッグされるコンポーネントのタイプに応じて 3 つのセクションがあります。

  • コンテキスト入力 はすべてのコード コンポーネント タイプについて表示されます。

    • フォーム ファクター: フォーム ファクターを指定する方法、フォーム ファクター (Web、タブレット、電話) でコード コンポーネントをテストする方法を提供します。 これは、コード コンポーネントが、コンポーネントのロード場所に応じてレイアウトを変更する場合に役立ちます。 context.client.getFormFactor() を使用して、コード内のフォーム ファクターを検出できます。
    • コンポーネント コンテナの幅と高さ: 最初は、幅と高さは空です。 これにより、コード コンポーネントがコンテナ内に配置されdiv、これは幅も高さ CSS スタイル セットもありません。 幅または高さを指定すると、コンテナdivは、コード コンポーネントが使用可能なスペースにどのように適応するかを確認できるように、寸法が制限されます。 正確な動作はテストハーネスの動作とは異なるため、一度展開すると Power Apps 内部のコードコンポーネントの動作を注意深くテストする必要があります。 さらに、updateView メソッドで context.mode.allocatedHeight``context.mode.allocatedWidth を受け取りたい場合は、コンポーネントは context.mode.trackContainerResize(true) を呼び出す必要がありますが、テストハーネスは、この呼び出しに関係なく、常に高さと幅を提供します。 詳細: trackContainerResize

    注意

    テスト ハーネスを使用する場合、allocatedWidthallocatedHeight は数値ではなくテキストとして提供されます。

  • データの入力 は、マニフェスト ファイルで定義されている、すべてのプロパティと 種別あるいは 種別グループを表示する対話型の UI です。 この領域の内容は、ControlManifest.Input.xml で定義されているプロパティとデータセットによって異なり、テスト目的でモックデータを提供できます。

  • 出力 はコンポーネントの getOutputs メソッドが呼ばれるたびに出力をレンダーします。

注意

ControlManifest.Input.xml ファイルの修正または新規プロパティを作成する場合は、それらを入力セクションにその他のプロパティやデータベースが表示される前にデバッグ プロセスを再起動する必要があります。 コマンドラインで実行中のプロセスで Ctrl + c を使用してこれを行い、npm start watch を再び実行します。

重要

npm startnpm start watch を使うと、開発とデバッグ用に最適化されたコードコンポーネントをビルドします。 このコードは通常、Microsoft Dataverse にデプロイされます。 詳細: コード コンポーネント アプリケーションの ライフサイクル管理

擬似データを使用してコード コンポーネントをテストします。

  • ControlManifest.Input.xmlproperty 要素を持つコンポーネントに対しては、データ入力 セクションには、各値の入力ボックスが表示されます。

    データ入力。

  • データセット タイプのコンポーネントの場合、それぞれの データセット 要素に対してテストデータを含む CSV ファイルを読み込むことができます。 ご利用の環境から直接、 .csv 形式のファイルを手動で作成またはエクスポートします。 CSV ファイルの読み込みが完了したら、ControlManifest.Input.xml で定義された プロパティ セット を CSV ファイルの列にバインドします。 これを行うには、以下のように各プロパティの列を選択します:

    テストハーネス 3。

  • ControlManifest.Input.xml ファイルで定義されているプロパティをまったくもっていない場合は、すべての列が自動的にテスト ハーネスに読み込まれます。 次に、ソース CSV の各列について、以下に示すように、コード コンポーネントに提供された使用するデータ型を割り当てることができます。

    テストハーネス 5.

注意

CSV サンプル データセットを読み込むときは、データがロードされる前に 適用する を選択する必要があります。 データセットにプロパティ セット要素が定義されている場合は、適用する を選択する前に、それぞれを CSV の列にマップする必要があります。 これらの設定は記憶されておらず、テスト ハーネスの再ロード後、コードを変更するたびに設定する必要があります。

テスト ハーネスを使用する際の一般的な制限

テスト ハーネスは単純なコード コンポーネントのテストに適していますが、次のシナリオでは、テスト ハーネスを使用してより複雑なコード コンポーネントをテストできない場合があります。

  1. テスト ハーネス データ入力 セクションを介してプロパティが変更された場合、updateProperties 配列は設定されません。
  2. ControlManifest.Input.xmlfeature-usage セクションに記載されている機能を使用する。 たとえば、context.WebApi.* メソッドは、テスト ハーネス内から例外をスローします。
  3. データセット上で ページング並べ替えフィルタリング API を使用すると、テスト ハーネス内から例外をスローします。
  4. 選択やルックアップなど、追加のメタデータを提供する複雑なデータ型バインディングの使用。 選択列の場合、テストハーネスは、最小限のメタデータで 3 つの簡単な選択を提供します。
  5. モデル駆動型アプリは、フィールド レベルのセキュリティ、読み取り専用の動作、データセット選択 API、モデル駆動型アプリのコマンドバーとの統合などを指定します。
  6. ナビゲーション メソッドや ユーティリティ メソッドなどの他のコンテキスト API。

これらのシナリオをテストするには、最初にコード コンポーネントをデプロイし、Fiddler を使用して Dataverse へデプロイした後のデバッグ で説明されている手法を使用してテストする必要があります

ブラウザ開発ツールを使用してコード コンポーネントをデバッグする

最新のブラウザには、HTML、CSS、現在のページにロードされた JavaScript を検査できる開発者ツールのセットが組み込まれています。 キーボード ショートカット Ctrl+Shift+I を使用して、これらの開発者ツールにアクセスできます。 F12 キーを使用して、開発者ツールを開くための一般的なキーボード ショートカットでもありますが、これは アプリをダウンロード キーボード ショートカットすでに使用されているため Power Apps Studio 内部では機能しません。

webpack を使用したバンドル

TypeScript を使用してコード コンポーネントを作成する場合、コードは、バンドルされたコードコンポーネントの出力に出力される JavaScript とは異なって見える可能性があります。 npm startnpm start watch を実行する場合、(pac pcf init を実行することで packages.json に追加された) pcf-scripts モジュールは、Web パックを使用して、複数の TypeScript ファイルを out フォルダ内の 1 つの bundle.js にビルドします。 このフォルダには、マニフェスト自体を含むが、代わりに単に ControlManifest.xml として名づけられている ControlManifest.Input.xml によって参照される他のリソース (たとえば、html/css) も含まれます。

JavaScript のターゲット標準 (ES5 など) でサポートされていないインポート / エクスポートや非同期 / 承認などの最新の TypeScript 言語機能を使用する場合、ビルドプロセスはこれらの言語機能を使用せずに TypeScript を JavaScript にトランスパイルします。 開発ビルドの一部として出力されるソースマップは、TypeScript のブレークポイントの場所を JavaScript の対応する行にマップできるように、開発者ツールに情報を提供します。 同様に、例外が発生したり、コードをステップ実行したりすると、基になるトランスパイルされた JavaScript ではなく、元の TypeScript 行が表示されます。

バンドルのもう 1 つの機能は、npm install を使って外部モジュールを含める時に、ビルド プロセスは必要なモジュールを、関連する node_modules ディレクトリのコンテンツを使用するコード コンポーネント bundle.js に追加します。 このため、使用する外部モジュールは、バンドルできるようにパッケージ化する必要があります。 詳細: ベスト プラクティス: モジュールのインポート

注意

ソースマップは、ビルトイン開発モードを実行した場合にのみ出力され、本番ビルドよりもはるかに大きなファイルになります。 このため、開発目的でビルドした後にコード コンポーネントをデプロイすることはお勧めしません。 詳細: アプリケーション ライフサイクル管理 (ALM)

開発者ツールをコード コンポーネントと使用する

このセクションでは、Microsoft Edge 開発者ツール内部のコードコンポーネントをデバッグする方法について説明します。

  1. 次のいずれかを使用して、コード コンポーネントをブラウザ セッションにロードします。

    1. npm start watch を使用してテスト ハーネスを開始します。
    2. モデル駆動型、キャンバスアプリ、またはポータル ブラウザ セッションにロードされたコード コンポーネントのローカル開発ビルド。 コード コンポーネントの開発ビルドを Dataverse サーバーにデプロイする必要はありません、代わりに、Fiddlerを使用した Microsoft Dataverse へのデプロイ後のデバッグ で説明されているように Fiddler AutoResponders を使用できます。
  2. Ctrl + Shift + I を選択して、開発者ツールを開きます。

  3. 開発者ツールパネル内の ソース タブを選択します。

  4. Ctrl + P を使用して、ファイルを開く コマンド パレットを表示します。 省略記号 メニューから ファイルを開く を選択することもできます。

  5. コントロールの名前を入力します (これは、pac pcf init で使用したコントロールの名前になります)。

  6. リストされているものと一致する中から webpack://pcf_tools_652ac3f36e1e4bca82eb3c1dc44e6fad/./DataSetGrid/index.ts のようなファイルを選択します

    開発者ツール 1.

  7. updateView 関数を配置し、最初の行にブレーク ポイントを設定します。

  8. コード コンポーネントにバインドされているプロパティを変更します。 テスト ハーネスでは、これはプロパティパネルを使用する、または Power Apps 内部で行うことができ、バインドされたプロパティまたはデータセットに変更を加えることができます。 これにより、updateView への呼び出しがトリガーされます。

  9. ブレーク ポイントがヒットしたことがわかり、コードを調べることができます。

    開発者ツール 2.

  10. 要素タブを使用してコンポーネントによって作成された HTML 要素と CSS を調べることもできます。関心のある特定の相互作用のセット (ルート コンテナ要素) がある場合は、コンテキスト メニュー (ルート要素が選択されている間) >休憩 > サブツリーの変更 を使用して HTML Dom 要素にブレークポイントを設定できます

    開発者ツール 3.

ES5 と ES6

現在、規定では、コードコンポーネントは ES5 JavaScript にトランスパイルするように構成されているため、古いブラウザーがサポートされます。 あなたのプロジェクトの targettsconfig.json から ES6 に設定することで古いブラウザをサポートする必要がない場合は、対称を ES6 に変更できます。

{
  "extends": "./node_modules/pcf-scripts/tsconfig_base.json",
  "compilerOptions": {
    "target": "ES6",
    "typeRoots": ["node_modules/@types"]
  }
}

注意

現時点では、ソースマップは、ソースからではなく、各 TypeScript ファイルの TypeScript トランスパイル出力から生成されます。 ES5 が対象の場合、ES6 言語機能 (クラスなど) が削除されるため、ソースマップが読みにくくなります。 ES6 のサポートが追加されるまで、ES5 を出力する必要がある場合でも、tsconfig.json を更新してソースマップが元の TypeScript に近くなるように、開発中に ES6 をターゲットにします。 ES5 を出力する必要がある場合は、本番デプロイ用のコード コンポーネントをビルドする前に、ES5 を元に戻すことを忘れないでください。

Microsoft Dataverse にデプロイした後のデバッグ

モデル駆動型アプリ、キャンバス アプリ、またはポータルのコンテキスト内でロジックを完全にテストするには、最初にコード コンポーネントを Microsoft Dataverse にデプロイして構成します。次に、Fiddler の AutoResponder 機能または requestly を使用します。 どちらの場合も、コードをデバッグするときに変更を継続的にデプロイすることなく、コード コンポーネントの開発ビルド (ローカルでビルド) をブラウザーに読み込みます。 これにより、最初に開発ビルドをデプロイしなくても、開発以外のダウンストリーム環境に対してデバッグすることもできます。

まず、コンポーネントがで展開および構成されていることを確認しますMicrosoft Dataverse。 理想的には、コード コンポーネントの本番ビルドのみを Microsoft Dataverse に公開する必要があります。 より大きなコードコンポーネントの場合、開発ビルドを公開するとエラー Web リソースのサイズが大きすぎます が発生する可能性があります。 コード コンポーネントの bundle.js をローカルで構築されたバージョンにリダイレクトするので、プロパティ PcfBuildMode を運用に設定することで pac pcf push を使用する際、自分の .pcfproj ファイルを更新して運用モードで常にビルドできます。

<PropertyGroup>
  <Name>ReactStandardControl</Name>
  <ProjectGuid>0df84c56-2f55-4a80-ac9f-85b7a14bf378</ProjectGuid>
  <OutputPath>$(MSBuildThisFileDirectory)out\controls</OutputPath>
  <PcfBuildMode>production</PcfBuildMode>
</PropertyGroup>

Fiddler の使用

Fiddler を使用してコードコンポーネントをデバッグするには:

  1. Fiddler Classic をダウンロードおよびインストールする

  2. Fiddler を開いて、メニュー バーから、ツールに移動し、オプションを選択します。

  3. HTTPS トラフィックをキャプチャして、復号化するように、ダイアログ ボックスで HTTPS タブを選択して、HTTPS 接続をキャプチャおよび HTTPS トラフィックを復号化チェック ボックスをオンにします。

    [HTTP] タブでマークの付いたチェックボックスをオンにする。

  4. OK を選択して、ダイアログ ボックスを閉じます。

    注意

    • この設定を有効にするのが初めての場合は、Fiddler は証明書をインストールするように要求します。 新しい設定が有効になるように、証明書をインストールして、Fiddler を再起動します。
    • 過去に Fiddler を実行しており、NET::ERR_CERT_AUTHORITY_INVALID エラーが発生した場合は、HTTPS タブで 操作 ボタンを選択し、すべての証明書をリセット を選択します。 これによっても、新しい証明書をインストールするよう要求する複数のプロンプトが表示されます。
  5. 右側のパネルで、AutoResponder タブを選択します。

  6. ルールを有効にする一致しないリクエストのパススルー がチェックされていることを確認します。

  7. ルールを追加 を選択して最初に入力します。

    REGEX:(.*?)((?'folder'css|html)(%252f|\/))?YOUR_NAMESPACE\.YOUR_CONTROL_NAME[\.\/](?'fname'[^?]*\.*)(.*?)$
    

    どこで:

    • YOUR_NAMESPACE - ControlManifest.Input.xmlcontrol.namespace 属性に含まれている pac pcf init に提供した名前空間
    • YOUR_CONTROL_NAME - pac pcf init に提供して ControlManifest.Input.xmlcontrol.constructor 属性で設定されたコンポーネント名

    このルールは、コードコンポーネントのリクエストに一致することを目的としていますbundle.jsおよび関連リソース(css/html)モデル駆動型アプリとキャンバスアプリの両方で機能するようにPower Apps Studioとプレイヤー。

    この例は、次の例のようになります。

    AutoResponder ルール。

    もっとシンプルな AutoResponder ルール アプローチを希望する場合、Fiddler AutoResponder を使用したスクリプト Web リソースの開発 を参照してください。

  8. 応答するパスとして次のように入力します。

    C:\COMPONENT_ROOT_FOLDER\out\controls\YOUR_CONTROL_NAME\${folder}\${fname}
    

    たとえば、コード コンポーネントのルート フォルダが C:\src\PowerApps-Samples\component-framework\DataSetGrid でコンポーネント名が DataSetGrid の場合、パスは次のようになります。

    C:\src\PowerApps-Samples\component-framework\DataSetGrid\out\controls\DataSetGrid\${folder}\${fname}
    
  9. 保存を選択します。

  10. フィルタ タブを開いて、フィルタを使用する をチェックします。 応答ヘッダー セクションで、応答ヘッダーを設定する にチェックを入れて、以下を提供します。

ヘッダー: Access-Control-Allow-Origin

値: *

Fiddler フィルター。

重要

この手順は、コード コンポーネントがキャンバス アプリにデプロイされた後にデバッグする場合にのみ必要です、なぜなら、リソースは powerapp.com ドメイン下ではなく Blob Storage に格納されているからです。 そのため、これらのリソースへのリクエストは、ブラウザによって読み込まれるときにクロスドメイン アクセスが必要になります。 アクセスする他のサイトのヘッダーを変更するため、デバッグ中は、この Access-Control-Allow-Origin フィルター ルールのみを有効化します。

  1. AutoResponder ルールを実行できるようにするには、最初にブラウザのキャッシュをクリアして、コード コンポーネントを含むページをリロードする必要があります。 これは、開発者ツール (Ctrl + Shift + I) を開くことで簡単に実行でき、更新 > 空のキャッシュとハードリフレッシュ を右クリックします。

空のキャッシュとハード リフレッシュ。

  1. ローカル マシンからコード コンポーネントをロードしたら、コードに変更を加え (npm start watch の実行中)、ブラウザを更新して、新しくビルドされたバージョンをロードできます。 Fiddler の AutoResponder は、キャッシュ制御ヘッダーを自動的に追加して、ブラウザーによってキャッシュされないようにし、そのため単純な更新で、毎回キャッシュをクリアしなくてもリソースが再ロードされます。

Requestly の使用

Requestly を使用してコード コンポーネントをデバッグするには:

  1. コンピューターでインターネット インフォメーション サービス (IIS) を有効にします。

    1. コントロール パネル を開いて、プログラムと機能 > Windows の切り替え 機能のオンかオフを選択します。
    2. インターネット インフォメーション サービス (IIS) を有効にする。
    3. インターネット インフォメーション サービスを展開し、次のセクションに一覧表示されている Web サーバー コンポーネントが有効になっていることを確認します。
    4. OK を選択します。
  2. ISS のセットアップ

    1. コンピューターの ISS を開く。
    2. 右側のパネル 接続 で、ツリーを展開して サイト を右クリックします。
    3. Web サイトを追加する。
    4. サイト 名を設定する。
    5. 例えば C:\COMPONENT_ROOT_FOLDER\out\controls\YOUR_CONTROL_NAME\ のように、物理パス をカスタム コンポーネント フォルダに設定します
    6. ポート (たとえば任意の数 7777) を設定します。
    7. OK を選択します。 選択したフォルダが http://localhost:<SELECTED_PORT> でホストされるようになりました

    IIS Web サイト。

  3. Requestly をダウンロードしてインストールする

  4. ツールへのオンボードに従ってください。

  5. ルールを開いて (https://app.requestly.io/rules) に移動します。

  6. "ホストの置換" ルールを追加します。

    1. ルール名のセット。
    2. https://[ORG_URL]/[APPLICATION_ID]/webresources/[YOUR_NAMESPACE].[YOUR_CONTROL_NAME]/ で "置換" フィールドを設定する
    3. http://localhost:<SELECTED_PORT> で "With" を設定する
    4. "要求" を "URL" に [YOUR_NAMESPACE].[YOUR_CONTROL_NAME] を含むと設定する
    5. ルールを保存して有効にします。

    Requestly ルール。

  7. 次に、ブラウザーのキャッシュをクリアして、コード コンポーネントを含むページをリロードする必要があります。 これは、開発者ツール (Ctrl + Shift + I) を開くことで簡単に実行でき、更新 > 空のキャッシュとハードリフレッシュ を右クリックします。

    空のキャッシュとハード リフレッシュ。

  8. ローカル マシンからコード コンポーネントをロードしたら、コードに変更を加え (npm start watch の実行中)、ブラウザを更新して、新しくビルドされたバージョンをロードできます。 Requestly は、キャッシュ コントロール ヘッダーを自動的に追加して、ブラウザーがキャッシュしないようにします。そのため、単純な更新で、毎回キャッシュをクリアしなくてもリソースが再ロードされます。

Power Apps Component Framework API の参照
Power Apps Component Framework の概要
アプリケーション ライフサイクル管理 (ALM)
最初のコンポーネントを作成する

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。