Angular DevToolsは、Angularアプリケーションのデバッグとプロファイリング機能を提供するブラウザ拡張機能です。
Angular DevToolsは、Chrome Web StoreまたはFirefox Addonsからインストールできます。
F12またはCtrl+Shift+I(WindowsまたはLinux)およびFn+F12またはCmd+Option+I(Mac)を押して、任意のWebページでChromeまたはFirefoxのDevToolsを開くことができます。 ブラウザのDevToolsが開いていてAngular DevToolsがインストールされている場合は、「Angular」タブで見つけることができます。
HELPFUL: Chromeの新しいタブページではインストールされている拡張機能は実行されないため、DevToolsに「Angular」タブは表示されません。表示するには、他のページにアクセスしてください。

アプリケーションを開く
拡張機能を開くと、次の2つの追加タブが表示されます。
タブ | 詳細 |
---|---|
Components | アプリケーション内のコンポーネントとディレクティブを探索し、それらの状態をプレビューまたは編集できます。 |
Profiler | アプリケーションをプロファイルし、変更検知の実行中のパフォーマンスのボトルネックがどこにあるかを理解できます。 |

Angular DevToolsの右上隅には、ページで実行されているAngularのバージョンと、拡張機能の最新のコミットハッシュが表示されます。
Angularアプリケーションが検出されません
Angular DevToolsを開くと、「Angularアプリケーションが検出されませんでした」というエラーメッセージが表示される場合、これはページ上のAngularアプリケーションと通信できないことを意味します。 これは、検査しているWebページにAngularアプリケーションが含まれていないためです。 適切なWebページを検査していること、およびAngularアプリケーションが実行されていることを確認してください。
プロダクション構成でビルドされたアプリケーションが検出されました
「プロダクション構成でビルドされたアプリケーションが検出されました。Angular DevToolsは開発ビルドのみサポートしています。」というエラーメッセージが表示される場合、ページにAngularアプリケーションが見つかりましたが、プロダクション最適化でコンパイルされたことを意味します。 プロダクション用にコンパイルすると、Angular CLIはパフォーマンスを向上させるために、ページ上のJavaScriptの量を最小限に抑えるために、さまざまなデバッグ機能を削除します。これには、DevToolsと通信するために必要な機能も含まれます。
DevToolsを実行するには、最適化を無効にしてアプリケーションをコンパイルする必要があります。ng serve
は、デフォルトでこれを実行します。
デプロイされたアプリケーションをデバッグする必要がある場合は、optimization
構成オプション ({"optimization": false}
)を使用して、ビルドの最適化を無効にします。
アプリケーションのデバッグ
Componentsタブでは、アプリケーションの構造を探索できます。 DOM内のコンポーネントとディレクティブのインスタンスを視覚化し、それらの状態を検査または変更できます。
アプリケーション構造の探索
コンポーネントツリーは、アプリケーション内のコンポーネントとディレクティブの階層的な関係を表示します。

コンポーネントエクスプローラ内の個々のコンポーネントまたはディレクティブをクリックして選択し、それらのプロパティをプレビューします。 Angular DevToolsは、コンポーネントツリーの右側で、プロパティとメタデータを表示します。
コンポーネントツリーの上にある検索ボックスを使用して、名前でコンポーネントまたはディレクティブを検索します。

ホストノードに移動
特定のコンポーネントやディレクティブのホスト要素に移動するには、コンポーネントエクスプローラでダブルクリックします。 Angular DevToolsはChromeのElementsタブまたはFirefoxのInspectorタブを開き、関連するDOMノードを選択します。
ソースに移動
コンポーネントの場合、Angular DevToolsはSourcesタブ(Chrome)とDebuggerタブ(Firefox)でコンポーネント定義に移動できます。 特定のコンポーネントを選択したら、プロパティビューの右上にあるアイコンをクリックします。

プロパティ値の更新
ブラウザのDevToolsと同様に、プロパティビューでは入力と出力、またはその他のプロパティの値を編集できます。
プロパティ値を右クリックし、この値の種類で編集機能が利用可能な場合は、テキスト入力フィールドが表示されます。
新しい値を入力してEnter
キーを押すと、この値がプロパティに適用されます。

コンソールで選択したコンポーネントまたはディレクティブにアクセス
コンソールのショートカットとして、Angular DevToolsは、最近選択したコンポーネントやディレクティブのインスタンスへのアクセスを提供します。
現在選択されているコンポーネントやディレクティブのインスタンスを参照するには$ng0
と入力し、以前に選択したインスタンスを参照するには$ng1
と入力し、さらに前に選択したインスタンスを参照するには$ng2
と入力するなどします。

ディレクティブまたはコンポーネントの選択
ブラウザのDevToolsと同様にページを検査して、特定のコンポーネントやディレクティブを選択できます。 Angular DevToolsの左上隅にある Inspect element アイコンをクリックし、ページ上のDOM要素の上にマウスを置きます。 拡張機能は関連するディレクティブやコンポーネントを認識し、コンポーネントツリーで対応する要素を選択できます。

アプリケーションのプロファイリング
Profilerタブでは、Angularの変更検知の実行を視覚化できます。 これは、変更検知がいつどのようにアプリケーションのパフォーマンスに影響を与えるかを判断するのに役立ちます。

プロファイラタブでは、現在のアプリケーションのプロファイリングを開始したり、以前の実行からの既存のプロファイルをインポートしたりできます。 アプリケーションのプロファイリングを開始するには、Profilerタブの左上隅にある丸の上にマウスを置いて、Start recordingをクリックします。
プロファイリング中は、Angular DevToolsは、変更検知やライフサイクルフックの実行などの実行イベントをキャプチャします。 変更検知をトリガーしてAngular DevToolsが使用できるデータを作成するために、アプリケーションと対話してください。 記録を終了するには、丸を再びクリックしてStop recordingします。
既存の記録のインポートもできます。 この機能の詳細については、記録のインポートセクションをご覧ください。
アプリケーションの実行の理解
プロファイルを記録またはインポートした後、Angular DevToolsは変更検知サイクルの視覚化を表示します。

シーケンスの各バーは、アプリケーションの変更検知サイクルを表しています。 バーが高いほど、アプリケーションは変更検知をこのサイクルで実行するのに時間がかかっています。 バーを選択すると、DevToolsは次のような役立つ情報を表示します。
- このサイクルでキャプチャされたすべてのコンポーネントとディレクティブを含むバーチャート
- Angularが変更検知をこのサイクルで実行するのにかかった時間。
- ユーザーが経験した推定フレームレート。
- 変更検知をトリガーしたソース。

コンポーネント実行の理解
変更検知サイクルをクリックすると表示されるバーチャートは、アプリケーションがその特定のコンポーネントまたはディレクティブで変更検知を実行するのにどれだけ時間がかかったかを示す詳細ビューを表示します。
この例では、NgForOf
ディレクティブでかかった合計時間と、そのディレクティブで呼び出されたメソッドが表示されています。

階層ビュー
![「Profiler」タブのスクリーンショット。ユーザーによって単一のバーが選択されており、近くのドロップダウンメニューに「フレームグラフ」が表示され、その下にフレームグラフが表示されています。フレームグラフは、「Entire application」という行と「AppComponent」という行から始まります。その下は、3行目で「[RouterOutlet]」と「DemoAppComponent」から始まり、複数のアイテムに分割され始めます。数層深く、1つのセルが赤で強調表示されています。](assets/images/guide/devtools/flame-graph-view.png)
変更検知の実行をフレームグラフのようなビューで視覚化できます。
グラフの各タイルは、レンダリングツリーの特定の位置にある画面上の要素を表します。
たとえば、LoggedOutUserComponent
が削除され、その代わりにAngularがLoggedInUserComponent
をレンダリングした変更検知サイクルを考えます。このシナリオでは、両方のコンポーネントは同じタイルに表示されます。
X軸は、この変更検知サイクルのレンダリングにかかった合計時間を表します。 Y軸は要素階層を表します。要素の変更検知を実行するには、そのディレクティブと子コンポーネントをレンダリングする必要があります。 これらを組み合わせると、どのコンポーネントのレンダリングに時間がかかっているのか、その時間がどこに使われているのかが視覚化されます。
各タイルは、Angularがそこでかかった時間に依存して色が付けられます。 Angular DevToolsは、レンダリングに最も時間がかかったタイルに対するかかった時間によって、色の濃淡を決定します。
特定のタイルをクリックすると、右側のパネルにそのタイルに関する詳細が表示されます。 タイルをダブルクリックすると、タイルが拡大され、ネストされた子要素をより簡単に表示できます。
変更検知とOnPush
コンポーネントのデバッグ
通常、グラフは、特定の変更検知フレームの、アプリケーションのレンダリングにかかる時間を視覚化します。しかし、OnPush
コンポーネントなど、入力プロパティが変更された場合にのみ再レンダリングされるコンポーネントもあります。特定のフレームのこれらのコンポーネントなしでフレームグラフを視覚化すると役立つ場合があります。
変更検知フレーム内で変更検知プロセスを経たコンポーネントのみを視覚化するには、フレームグラフの上部にある変更検知チェックボックスをオンにします。
このビューでは、変更検知を経たすべてのコンポーネントが強調表示され、再レンダリングされなかったOnPush
コンポーネントなど、変更検知を経なかったコンポーネントが灰色で表示されます。
![変更検出サイクルのフレームチャート視覚化を表示する「Profiler」タブのスクリーンショット。「Show only change detection」というラベルの付いたチェックボックスがオンになっています。フレームグラフは以前と非常によく似ていますが、コンポーネントの色がオレンジから青に変わっています。`[RouterOutlet]`というラベルの付いたいくつかのタイルは、もうどの色でも強調表示されていません。](assets/images/guide/devtools/debugging-onpush.png)
記録のインポートとエクスポート
記録されたプロファイリングセッションの右上にあるSave Profileボタンをクリックして、JSONファイルとしてエクスポートし、ディスクに保存します。 後で、プロファイラの初期ビューで、Choose file入力をクリックしてファイルをインポートします。

インジェクターの検査
Note: インジェクターツリーは、バージョン17以降を使ってビルドされたAngularアプリケーションで使用できます。
アプリケーションのインジェクター階層を表示
Injector Treeタブでは、アプリケーションに構成されたインジェクターの構造を探索できます。ここでは、アプリケーションのインジェクタ階層を表す2つのツリーが表示されます。1つのツリーは環境階層、もう1つのツリーは要素階層です。

解決パスを視覚化する
特定のインジェクターが選択されると、そのインジェクターからルートへのAngularの依存性の注入アルゴリズムがたどるパスが強調表示されます。要素インジェクターの場合、これには、依存関係が要素階層で解決できない場合に依存性の注入アルゴリズムがジャンプする環境インジェクターの強調表示も含まれます。
Angularが解決パスをどのように解決するかについての詳細は、解決ルールを参照してください。

インジェクタープロバイダーを表示
プロバイダーが構成されているインジェクターをクリックすると、右側にあるインジェクターツリービューにプロバイダーのリストが表示されます。ここでは、提供されたトークンとそのタイプを表示できます。
