5月29日、Angular Blog - Mediumで「Angular v20の発表 (Announcing Angular v20)」と題した記事が公開された。この記事では、Angular v20の新機能と開発者体験の改善点について詳しく紹介されている。以下に、その内容を簡潔にまとめて紹介する。
v20 の概要とハイライト
effect・linkedSignal・toSignalなどリアクティビティ関連 API を安定版へ昇格- インクリメンタルハイドレーションとルート単位レンダリングモード設定を安定版へ
 - Zoneless 検出を Developer Preview に更新し、SSR 例外処理を強化
 - Chrome DevTools に Angular 専用パフォーマンストラックを統合
 resource/httpResourceなど非同期・ストリーミング API を実験的に公開NgIf・NgFor・NgSwitchを非推奨とし、内蔵制御フローへの移行を宣言- 公式マスコットの RFC を開始し、コミュニティ参加を促進
 
リアクティビティ機能を安定版へ昇格
Angular v16 で導入した Signals の採用が広がり、v20 では signal・computed・input・view queries に続き、effect・linkedSignal・toSignal も安定版となった。
const count = signal(0);
const doubled = computed(() => count() * 2);
effect(() => console.log(doubled()));
YouTube は Signals を用いて Living Room アプリの入力遅延を 35 % 改善した事例を公表しており、TC39 でも Signals の標準化調査が進んでいる。
新しい実験的 API ― resource と httpResource
v19 で導入された resource API が拡張され、ストリーミング対応と HTTP 要求向け httpResource が追加された。
// ユーザー ID が変わるたびに GET する例
const userId = signal(1);
const userResource = httpResource<User>(() =>
  `https://example.com/v1/users/${userId()}`
);
両 API はシグナルベースで非同期結果や isLoading 状態を管理でき、GenAI を利用するアプリのデータ取得にも応用できる。
Zoneless を Developer Preview に
provideZonelessChangeDetection() と provideBrowserGlobalErrorListeners() を追加すれば、Zone.js なしで変更検出と例外捕捉を行える。SSR では unhandledRejection / uncaughtException を防ぎ、クライアント側は angular.json から Zone.js を除去するだけで移行できる。
bootstrapApplication(AppComponent, {
  providers: [
    provideZonelessChangeDetection(),
    provideBrowserGlobalErrorListeners()
  ]
});
サーバー機能の強化
インクリメンタルハイドレーション
provideClientHydration(withIncrementalHydration());
@defer (hydrate on viewport) { <shopping-cart/> }
ページ内の必要部分のみ段階的にハイドレートし、初期ロードを高速化する。
ルート単位レンダリングモード
export const routeConfig: ServerRoute = [
  { path: '/login',      mode: RenderMode.Server },
  { path: '/dashboard',  mode: RenderMode.Client },
  { path: '/product/:id',mode: RenderMode.Prerender, /* … */ }
];
SSR・CSR・プリレンダーをルートごとに選択できる。
開発者体験 (DX) の磨き込み
Chrome DevTools 連携
ng.enableProfiling() を実行すると、Performance パネルに Angular のライフサイクルが色分け表示され、フレームワーク内外のコールを一望できる。
createComponent の拡張
createComponent(MyDialog, {
  bindings: [
    inputBinding('canClose', canClose),
    outputBinding('onClose', r => console.log(r)),
    twoWayBinding('title', title),
  ],
  directives: [
    FocusTrap,
    { type: HasColor, bindings:[inputBinding('color', () => 'red')] }
  ]
});
動的生成時に入力・出力・双方向バインディングとディレクティブ適用を一括指定できる。
テンプレート式の拡張
- べき乗 
**とin演算子に対応 - タグなしテンプレートリテラルをサポート
 
{{ n ** 2 }}  <!-- べき乗 -->
{{ 'name' in person }}  <!-- プロパティ存在確認 -->
<div [class]=\"`layout col-${colWidth}`\"></div>
型安全ホストバインディング
host オブジェクトの式に型チェックを追加し、@HostBinding より安全で簡潔になった。
スタイルガイド刷新
ファイル名/クラス名のサフィックス生成をデフォルトで無効化し、記述量を削減。NgModule 依存のガイドを整理し、最新構成に合わせたベストプラクティスへ更新した。
公式マスコット RFC
Dart や Firebase のマスコットを手掛けたデザイナーと協力し、Angular らしさを表現する公式マスコット案を公開。コミュニティは RFC で投票や提案を行える。
未来へ
v20 ではリアクティビティ、ゾーンレス、SSR、フォーム API など過去数年の大型プロジェクトを磨き上げた。今後は selectorless コンポーネント、signal-forms、ユニットテストランナーなどを計画しており、v22 での構造ディレクティブ削除に備えて内蔵制御フローへの移行が推奨される。
  
詳細は[Announcing Angular v20」を参照していただきたい。