diff --git a/adev-ja/src/app/features/update/recommendations.en.ts b/adev-ja/src/app/features/update/recommendations.en.ts
index c4038024c6..e1ab7b9d4a 100644
--- a/adev-ja/src/app/features/update/recommendations.en.ts
+++ b/adev-ja/src/app/features/update/recommendations.en.ts
@@ -2592,6 +2592,28 @@ export const RECOMMENDATIONS: Step[] = [
action:
'Adjust code that directly calls functions returning `RedirectFn`. These functions can now also return an `Observable` or `Promise`; ensure your logic correctly handles these asynchronous return types.',
},
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Basic,
+ step: '20.0.0_rename_resource_request_to_param',
+ action: 'Rename the `request` property passed in resources to `params`.',
+ },
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Medium,
+ step: '20.0.0_rename_rxResource_loader_to_stream',
+ action: 'Rename the `loader` property passed in rxResources to `stream`.',
+ },
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Basic,
+ step: '20.0.0_replace_ResourceStatus_by_corresponding_strings',
+ action:
+ '`ResourceStatus` is no longer an enum. Use the corresponding constant string values instead.',
+ },
{
possibleIn: 2000,
necessaryAsOf: 2000,
@@ -2712,4 +2734,12 @@ export const RECOMMENDATIONS: Step[] = [
action:
'Review `DatePipe` usages. Using the `Y` (week-numbering year) formatter without also including `w` (week number) is now detected as suspicious. Use `y` (year) if that was the intent, or include `w` alongside `Y`.',
},
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Medium,
+ step: '20.0.0_handle_uncaught_listener_errors_in_tests',
+ action:
+ 'In templates parentheses are now always respected. This can lead to runtime breakages when nullish coalescing were nested in parathesis. eg `(foo?.bar).baz` will throw if `foo` is nullish as it would in native JavaScript.',
+ },
];
diff --git a/adev-ja/src/app/features/update/recommendations.ts b/adev-ja/src/app/features/update/recommendations.ts
index 55d61609ab..484e177702 100644
--- a/adev-ja/src/app/features/update/recommendations.ts
+++ b/adev-ja/src/app/features/update/recommendations.ts
@@ -2592,6 +2592,28 @@ export const RECOMMENDATIONS: Step[] = [
action:
'`RedirectFn`を返す関数を直接呼び出すコードを調整してください。これらの関数は`Observable`または`Promise`も返すことができるようになりました。ロジックがこれらの非同期戻り値を正しく処理することを確認してください。',
},
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Basic,
+ step: '20.0.0_rename_resource_request_to_param',
+ action: 'リソースで渡される`request`プロパティを`params`にリネームしてください。',
+ },
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Medium,
+ step: '20.0.0_rename_rxResource_loader_to_stream',
+ action: 'rxResourcesで渡される`loader`プロパティを`stream`にリネームしてください。',
+ },
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Basic,
+ step: '20.0.0_replace_ResourceStatus_by_corresponding_strings',
+ action:
+ '`ResourceStatus`はもはやenumではありません。代わりに対応する定数文字列値を使用してください。',
+ },
{
possibleIn: 2000,
necessaryAsOf: 2000,
@@ -2712,4 +2734,12 @@ export const RECOMMENDATIONS: Step[] = [
action:
'`DatePipe`の使用を見直してください。`Y`(週番号付け年)フォーマッターを`w`(週番号)を含めずに使用すると、疑わしいと検出されるようになりました。意図がそうであった場合は`y`(年)を使用するか、`Y`と一緒に`w`を含めてください。',
},
+ {
+ possibleIn: 2000,
+ necessaryAsOf: 2000,
+ level: ApplicationComplexity.Medium,
+ step: '20.0.0_handle_uncaught_listener_errors_in_tests',
+ action:
+ 'テンプレートでは括弧が常に尊重されるようになりました。これは、null合体演算子が括弧内にネストされている場合にランタイムエラーを引き起こす可能性があります。例:`(foo?.bar).baz`は、`foo`がnullishの場合、ネイティブJavaScriptと同様にエラーを投げます。',
+ },
];
diff --git a/adev-ja/src/app/sub-navigation-data.en.ts b/adev-ja/src/app/sub-navigation-data.en.ts
index cf26dc3957..fe20e9ea3c 100644
--- a/adev-ja/src/app/sub-navigation-data.en.ts
+++ b/adev-ja/src/app/sub-navigation-data.en.ts
@@ -351,6 +351,16 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/routing/read-route-state',
contentPath: 'guide/routing/read-route-state',
},
+ {
+ label: 'Redirecting routes',
+ path: 'guide/routing/redirecting-routes',
+ contentPath: 'guide/routing/redirecting-routes',
+ },
+ {
+ label: 'Control route access with guards',
+ path: 'guide/routing/route-guards',
+ contentPath: 'guide/routing/route-guards',
+ },
{
label: 'Other routing tasks',
path: 'guide/routing/common-router-tasks',
@@ -421,6 +431,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/http/making-requests',
contentPath: 'guide/http/making-requests',
},
+ {
+ label: 'Reactive data fetching with httpResource',
+ path: 'guide/http/http-resource',
+ contentPath: 'guide/http/http-resource',
+ },
{
label: 'Intercepting requests and responses',
path: 'guide/http/interceptors',
@@ -623,6 +638,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'ai',
contentPath: 'ai/overview',
},
+ {
+ label: 'LLM prompts and AI IDE setup',
+ path: 'ai/develop-with-ai',
+ contentPath: 'ai/develop-with-ai',
+ },
],
},
{
@@ -763,6 +783,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'best-practices/a11y',
contentPath: 'best-practices/a11y',
},
+ {
+ label: 'Unhandled errors in Angular',
+ path: 'best-practices/error-handling',
+ contentPath: 'best-practices/error-handling',
+ },
{
label: 'Performance',
children: [
@@ -786,6 +811,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'best-practices/skipping-subtrees',
contentPath: 'best-practices/runtime-performance/skipping-subtrees',
},
+ {
+ label: 'Profiling with the Chrome DevTools',
+ path: 'best-practices/profiling-with-chrome-devtools',
+ contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools',
+ },
{label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'},
],
},
diff --git a/adev-ja/src/app/sub-navigation-data.ts b/adev-ja/src/app/sub-navigation-data.ts
index 69ebacad21..9e0dc0e429 100644
--- a/adev-ja/src/app/sub-navigation-data.ts
+++ b/adev-ja/src/app/sub-navigation-data.ts
@@ -351,6 +351,16 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/routing/read-route-state',
contentPath: 'guide/routing/read-route-state',
},
+ {
+ label: 'ルートのリダイレクト',
+ path: 'guide/routing/redirecting-routes',
+ contentPath: 'guide/routing/redirecting-routes',
+ },
+ {
+ label: 'ガードによるルートアクセスの制御',
+ path: 'guide/routing/route-guards',
+ contentPath: 'guide/routing/route-guards',
+ },
{
label: 'その他のルーティングタスク',
path: 'guide/routing/common-router-tasks',
@@ -421,6 +431,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/http/making-requests',
contentPath: 'guide/http/making-requests',
},
+ {
+ label: 'httpResourceを使ったリアクティブなデータ取得',
+ path: 'guide/http/http-resource',
+ contentPath: 'guide/http/http-resource',
+ },
{
label: 'リクエストとレスポンスへの介入',
path: 'guide/http/interceptors',
@@ -623,6 +638,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'ai',
contentPath: 'ai/overview',
},
+ {
+ label: 'LLMプロンプトとAI IDEセットアップ',
+ path: 'ai/develop-with-ai',
+ contentPath: 'ai/develop-with-ai',
+ },
],
},
{
@@ -763,6 +783,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'best-practices/a11y',
contentPath: 'best-practices/a11y',
},
+ {
+ label: 'Angularでの未処理のエラー',
+ path: 'best-practices/error-handling',
+ contentPath: 'best-practices/error-handling',
+ },
{
label: 'パフォーマンス',
children: [
@@ -786,6 +811,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'best-practices/skipping-subtrees',
contentPath: 'best-practices/runtime-performance/skipping-subtrees',
},
+ {
+ label: 'Chrome DevToolsでのプロファイリング',
+ path: 'best-practices/profiling-with-chrome-devtools',
+ contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools',
+ },
{label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'},
],
},
diff --git a/adev-ja/src/content/ai/develop-with-ai.md b/adev-ja/src/content/ai/develop-with-ai.md
new file mode 100644
index 0000000000..8c75f8e4f5
--- /dev/null
+++ b/adev-ja/src/content/ai/develop-with-ai.md
@@ -0,0 +1,36 @@
+# LLM prompts and AI IDE setup
+Generating code with large language models (LLMs) is a rapidly growing area of interest for developers. While LLMs are often capable of generating working code it can be a challenge to generate code for consistently evolving frameworks like Angular.
+
+Advanced instructions and prompting are an emerging standard for supporting modern code generation with domain specific details. This section contains curated content and resources to support more accurate code generation for Angular and LLMs.
+
+## Custom Prompts and System Instructions
+Improve your experience generating code with LLMs by using one of the following custom, domain specific files.
+
+NOTE: These files will be updated on a regular basis staying up to date with Angular's conventions.
+
+Here is a set of instructions to help LLMs generate correct code that follows Angular best practices. This file can be included as system instructions to your AI tooling or included along with your prompt as context.
+
+
Check out our [prompt rules and best practices](/ai/develop-with-ai).
+
Generative AI (GenAI) with large language models (LLMs) enables the creation of sophisticated and engaging application experiences, including personalized content, intelligent recommendations, media generation and comprehension, information summarization, and dynamic functionality.
Developing features like these would have previously required deep domain expertise and significant engineering effort. However, new products and SDKs are lowering the barrier to entry. Angular is well-suited for integrating AI into your web application as a result of:
@@ -11,7 +13,7 @@ Developing features like these would have previously required deep domain expert
* Strong, signal-based architecture designed to dynamically manage data and state
* Angular integrates seamlessly with AI SDKs and APIs
-This guide demonstrates how you can use [Genkit](/ai#build-ai-powered-applications-with-genkit-and-angular), [Firebase AI Logic](https://firebase.google.com/products/firebase-ai-logic), and the [Gemini API](https://ai.google.dev/) to infuse your Angular apps with AI today. This guide will jumpstart your AI-powered web app development journey by explaining how to begin integrating AI into Angular apps. This guide also shares resources, such as starter kits, example code, and recipes for common workflows, you can use to get up to speed quickly.
+This guide demonstrates how you can use [Genkit](/ai#build-ai-powered-applications-with-genkit-and-angular), [Firebase AI Logic](/ai#build-ai-powered-applications-with-firebase-ai-logic-and-angular), and the [Gemini API](/ai#build-ai-powered-applications-with-gemini-api-and-angular) to infuse your Angular apps with AI today. This guide will jumpstart your AI-powered web app development journey by explaining how to begin integrating AI into Angular apps. This guide also shares resources, such as starter kits, example code, and recipes for common workflows, you can use to get up to speed quickly.
To get started, you should have a basic understanding of Angular. New to Angular? Try our [essentials guide](/essentials) or our [getting started tutorials](/tutorials).
@@ -20,20 +22,20 @@ NOTE: While this page features integrations and examples with Google AI products
## Getting Started
Building AI-powered applications is a new and rapidly developing field. It can be challenging to decide where to start and which technologies to choose. The following section provides three options to choose from:
-1. *Genkit* gives you the choice of [supported model and interface with a unified API](https://firebase.google.com/docs/genkit) for building full-stack applications. Ideal for applications requiring sophisticated back-end AI logic, such as personalized recommendations.
+1. *Genkit* gives you the choice of [supported model and interface with a unified API](https://genkit.dev) for building full-stack applications. Ideal for applications requiring sophisticated back-end AI logic, such as personalized recommendations.
1. *Firebase AI Logic* provides a secure client-side API for Google's models to build client-side only applications or mobile apps. Best for interactive AI features directly in the browser, such as real-time text analysis or basic chatbots.
1. *Gemini API* enables you to build an application that uses the methods and functionality exposed through the API surface directly, best for full-stack applications. Suitable for applications needing direct control over AI models, like custom image generation or deep data processing.
### Build AI-powered applications with Genkit and Angular
-[Genkit](https://firebase.google.com/docs/genkit) is an open-source toolkit designed to help you build AI-powered features in web and mobile apps. It offers a unified interface for integrating AI models from Google, OpenAI, Anthropic, Ollama, and more, so you can explore and choose the best models for your needs. As a server-side solution, your web apps need a supported server environment, such as a node-based server in order to integrate with Genkit. Building a full-stack app using Angular SSR gives you the starting server-side code, for example.
+[Genkit](https://genkit.dev) is an open-source toolkit designed to help you build AI-powered features in web and mobile apps. It offers a unified interface for integrating AI models from Google, OpenAI, Anthropic, Ollama, and more, so you can explore and choose the best models for your needs. As a server-side solution, your web apps need a supported server environment, such as a node-based server in order to integrate with Genkit. Building a full-stack app using Angular SSR gives you the starting server-side code, for example.
Here are examples of how to build with Genkit and Angular:
* [Agentic Apps with Genkit and Angular starter-kit](https://github.com/angular/examples/tree/main/genkit-angular-starter-kit)— New to building with AI? Start here with a basic app that features an agentic workflow. Perfect place to start for your first AI building experience.
-* [Use Genkit in an Angular app](https://firebase.google.com/docs/genkit/angular)— Build a basic application that uses Genkit Flows, Angular and Gemini 2.0 Flash. This step-by-step walkthrough guides you through creating a full-stack Angular application with AI features.
+* [Use Genkit in an Angular app](https://genkit.dev/docs/angular/)— Build a basic application that uses Genkit Flows, Angular and Gemini 2.0 Flash. This step-by-step walkthrough guides you through creating a full-stack Angular application with AI features.
* [Dynamic Story Generator app](https://github.com/angular/examples/tree/main/genkit-angular-story-generator)— Learn to build an agentic Angular app powered by Genkit, Gemini and Imagen 3 to dynamically generate a story based on user interaction featuring beautiful image panels to accompany the events that take place. Start here if you'd like to experiment with a more advanced use-case.
diff --git a/adev-ja/src/content/ai/overview.md b/adev-ja/src/content/ai/overview.md
index d689d9381f..903833b8a7 100644
--- a/adev-ja/src/content/ai/overview.md
+++ b/adev-ja/src/content/ai/overview.md
@@ -3,6 +3,8 @@
AI搭載アプリケーションを構築。AIで開発を加速。
+HELPFUL: お気に入りのAIパワードIDEで構築を始めたい方は、[プロンプトルールとベストプラクティス](/ai/develop-with-ai)をご確認ください。
+
生成AI (GenAI)と大規模言語モデル (LLM)は、パーソナライズされたコンテンツ、インテリジェントなレコメンデーション、メディアの生成と理解、情報の要約、動的な機能など、高度で魅力的なアプリケーション体験の作成を可能にします。
このような機能の開発は、これまで深いドメイン知識と多大なエンジニアリング作業を必要としました。しかし、新しい製品とSDKが参入障壁を下げています。Angularは、以下の理由により、AIをウェブアプリケーションに統合するのに非常に適しています。
@@ -11,7 +13,7 @@ AI搭載アプリケーションを構築。AIで開発を加速。
* データと状態を動的に管理するために設計された、強力なシグナルベースのアーキテクチャ
* AngularはAI SDKとAPIにシームレスに統合
-このガイドでは、[Genkit](/ai#build-ai-powered-applications-with-genkit-and-angular)、[Firebase AI Logic](https://firebase.google.com/products/firebase-ai-logic)、および[Gemini API](https://ai.google.dev/)を使用して、AngularアプリケーションにAIを組み込む方法を示します。このガイドは、AngularアプリケーションにAIを統合する方法を説明することで、AI搭載ウェブアプリケーション開発の旅を加速させるでしょう。また、このガイドでは、迅速に習得できるスターターキット、サンプルコード、一般的なワークフローのレシピなどのリソースも共有しています。
+このガイドでは、[Genkit](/ai#build-ai-powered-applications-with-genkit-and-angular)、[Firebase AI Logic](/ai#build-ai-powered-applications-with-firebase-ai-logic-and-angular)、および[Gemini API](/ai#build-ai-powered-applications-with-gemini-api-and-angular)を使用して、AngularアプリケーションにAIを組み込む方法を示します。このガイドは、AngularアプリケーションにAIを統合する方法を説明することで、AI搭載ウェブアプリケーション開発の旅を加速させるでしょう。また、このガイドでは、迅速に習得できるスターターキット、サンプルコード、一般的なワークフローのレシピなどのリソースも共有しています。
始めるには、Angularの基本的な理解が必要です。Angularは初めてですか?[必須ガイド](/essentials)または[入門チュートリアル](/tutorials)をお試しください。
@@ -20,20 +22,20 @@ NOTE: このページではGoogle AI製品との統合と例を紹介してい
## はじめに
AI搭載アプリケーションの構築は、新しく急速に発展している分野です。どこから始め、どの技術を選択するかを決定するのは難しい場合があります。以下のセクションでは、選択できる3つのオプションを提供します。
-1. *Genkit*は、フルスタックアプリケーション構築のために、[サポートされているモデルと統合APIを備えたインターフェース](https://firebase.google.com/docs/genkit)の選択肢を提供します。パーソナライズされたレコメンデーションなど、高度なバックエンドAIロジックを必要とするアプリケーションに最適です。
+1. *Genkit*は、フルスタックアプリケーション構築のために、[サポートされているモデルと統合APIを備えたインターフェース](https://genkit.dev)の選択肢を提供します。パーソナライズされたレコメンデーションなど、高度なバックエンドAIロジックを必要とするアプリケーションに最適です。
1. *Firebase AI Logic*は、Googleのモデル向けに安全なクライアントサイドAPIを提供し、クライアントサイド専用アプリケーションやモバイルアプリケーションを構築できます。リアルタイムテキスト分析や基本的なチャットボットなど、ブラウザで直接インタラクティブなAI機能を利用するのに最適です。
1. *Gemini API*を使用すると、APIサーフェスを通じて直接公開されるメソッドと機能を使用するアプリケーションを構築でき、フルスタックアプリケーションに最適です。カスタム画像生成やディープデータ処理など、AIモデルを直接制御する必要があるアプリケーションに適しています。
### GenkitとAngularでAI搭載アプリケーションを構築する {#build-ai-powered-applications-with-genkit-and-angular}
-[Genkit](https://firebase.google.com/docs/genkit)は、ウェブアプリケーションやモバイルアプリケーションにAI搭載機能を構築するのに役立つように設計されたオープンソースツールキットです。Google、OpenAI、Anthropic、OllamaなどからのAIモデルを統合するための統合インターフェースを提供するため、ニーズに最適なモデルを探索して選択できます。サーバーサイドソリューションであるため、Genkitと統合するには、ウェブアプリケーションにはNode.jsベースのサーバーなどのサポートされているサーバー環境が必要です。たとえば、Angular SSRを使用してフルスタックアプリケーションを構築すると、サーバーサイドの開始コードが得られます。
+[Genkit](https://genkit.dev)は、ウェブアプリケーションやモバイルアプリケーションにAI搭載機能を構築するのに役立つように設計されたオープンソースツールキットです。Google、OpenAI、Anthropic、OllamaなどからのAIモデルを統合するための統合インターフェースを提供するため、ニーズに最適なモデルを探索して選択できます。サーバーサイドソリューションであるため、Genkitと統合するには、ウェブアプリケーションにはNode.jsベースのサーバーなどのサポートされているサーバー環境が必要です。たとえば、Angular SSRを使用してフルスタックアプリケーションを構築すると、サーバーサイドの開始コードが得られます。
GenkitとAngularで構築する方法の例を次に示します。
* [GenkitとAngularのスターターキットを使用したエージェントアプリ](https://github.com/angular/examples/tree/main/genkit-angular-starter-kit)— AIでの構築は初めてですか?エージェントワークフローを備えた基本的なアプリケーションから始めましょう。初めてのAI構築体験に最適な場所です。
-* [AngularアプリでGenkitを使用する](https://firebase.google.com/docs/genkit/angular)— Genkit Flows、Angular、Gemini 2.0 Flashを使用する基本的なアプリケーションを構築します。このステップバイステップのウォークスルーは、AI機能を備えたフルスタックAngularアプリケーションの作成をガイドします。
+* [AngularアプリでGenkitを使用する](https://genkit.dev/docs/angular/)— Genkit Flows、Angular、Gemini 2.0 Flashを使用する基本的なアプリケーションを構築します。このステップバイステップのウォークスルーは、AI機能を備えたフルスタックAngularアプリケーションの作成をガイドします。
* [動的ストーリー生成アプリ](https://github.com/angular/examples/tree/main/genkit-angular-story-generator)— Genkit、Gemini、Imagen 3を搭載したエージェントAngularアプリケーションを構築し、ユーザーインタラクションに基づいてストーリーを動的に生成し、発生するイベントに付随する美しい画像パネルを特徴とする方法を学びます。より高度なユースケースを試したい場合は、ここから始めましょう。
diff --git a/adev-ja/src/content/best-practices/runtime-performance/profiling-with-chrome-devtools.md b/adev-ja/src/content/best-practices/runtime-performance/profiling-with-chrome-devtools.md
new file mode 100644
index 0000000000..c78d6c28ef
--- /dev/null
+++ b/adev-ja/src/content/best-practices/runtime-performance/profiling-with-chrome-devtools.md
@@ -0,0 +1,100 @@
+# Profiling with the Chrome DevTools
+
+Angular integrates with the [Chrome DevTools extensibility API](https://developer.chrome.com/docs/devtools/performance/extension) to present framework-specific data and insights directly in the [Chrome DevTools performance panel](https://developer.chrome.com/docs/devtools/performance/overview).
+
+With the integration enabled, you can [record a performance profile](https://developer.chrome.com/docs/devtools/performance#record) containing two sets of data:
+
+- Standard performance entries based on Chrome's understanding of your code executing in a browser, and
+- Angular-specific entries contributed by the framework's runtime.
+
+Both sets of data are presented together on the same tab, but on separate tracks:
+
+
+
+Angular-specific data are expressed in terms of framework concepts (components, change detection, lifecycle hooks, etc.) alongside lower-level function and method calls captured by a browser. These two data sets are correlated, and you can switch between the different views and level of details.
+
+You can use the Angular track to better understand how your code runs in the browser, including:
+
+- Determining whether a given code block is part of the Angular application, or whether it belongs to another script running on the same page.
+- Identifying performance bottlenecks and attribute those to specific components or services.
+- Gaining deeper insight into Angular's inner working with a visual breakdown of each change detection cycle.
+
+## Recording a profile
+
+### Enable integration
+
+You can enable Angular profiling in one of two ways:
+
+1. Run `ng.enableProfiling()` in Chrome's console panel, or
+1. Include a call to `enableProfiling()` in your application startup code (imported from `@angular/core`).
+
+NOTE:
+Angular profiling works exclusively in development mode.
+
+Here is an example of how you can enable the integration in the application bootstrap to capture all possible events:
+
+```ts
+import { enableProfiling } from '@angular/core';
+import { bootstrapApplication } from '@angular/platform-browser';
+import { MyApp } from './my-app';
+
+// Turn on profiling *before* bootstrapping your application
+// in order to capture all of the code run on start-up.
+enableProfiling();
+bootstrapApplication(MyApp);
+```
+
+### Record a profile
+
+Use the **Record** button in the Chrome DevTools performance panel:
+
+
+
+See the [Chrome DevTools documentation](https://developer.chrome.com/docs/devtools/performance#record) for more details on recording profiles.
+
+## Interpreting a recorded profile
+
+You can use the "Angular" custom track to quickly identify and diagnose performance issues. The following sections describe some common profiling scenarios.
+
+### Differentiating between your Angular application and other tasks on the same page
+
+As Angular and Chrome data are presented on the separate but correlated tracks, you can see when Angular's application code is executed as opposed to some other browser processing (typically layout and paint) or other scripts running on the same page (in this case the custom Angular track does not have any data):
+
+
+
+This allows you to determine whether further investigations should focus on the Angular application code or on other parts of your codebase or dependencies.
+
+### Color-coding
+
+Angular uses colors in the flame chart graph to distinguish tasks types:
+
+- 🟦 Blue represents TypeScript code written by the application developer (for example: services, component constructors and lifecycle hooks, etc.).
+- 🟪 Purple represents templates code written by the application developer and transformed by the Angular compiler.
+- 🟩 Green represents entry points to the application code and identifies _reasons_ for executing code.
+
+The following examples illustrate the described color-coding in various, real-life recordings.
+
+#### Example: Application bootstrapping
+
+The application bootstrap process usually consists of:
+
+- Triggers marked in blue, such as the call to the `bootstrapApplication`, instantiation of the root component, and initial change detection
+- Various DI services instantiated during bootstrap, marked in green.
+
+
+
+#### Example: Component execution
+
+One component processing is typically represented as an entry point (blue) followed by its template execution (purple). A template might, in turn, trigger instantiation of directives and execution of lifecycle hooks (green):
+
+
+
+#### Example: Change detection
+
+A change detection cycle usually consists of one or more data synchronization passes (blue), where each pass traverses a subset of components.
+
+
+
+With this data visualization, it is possible to immediately identify components that were involved in the change detection and which were skipped (typically the `OnPush` components that were not marked dirty).
+
+Additionally, you can inspect the number of synchronization passes for one change detection. Having more than one synchronization pass suggest that state is updated during change detection. You should avoid this, as it slows down page updates and can even result in infinite loops in the worst cases.
diff --git a/adev-ja/src/content/best-practices/style-guide.en.md b/adev-ja/src/content/best-practices/style-guide.en.md
index 1add59bdd6..fe9c8345f3 100644
--- a/adev-ja/src/content/best-practices/style-guide.en.md
+++ b/adev-ja/src/content/best-practices/style-guide.en.md
@@ -222,6 +222,9 @@ Prefer `class` and `style` bindings over using the `NgClass` and `NgStyle` direc
```html