Angular 20 Signalsによる状態管理(Reduxパターンの実例)

Web

概要

このリポジトリは「Angular Signals」を使ってAngular 20上で状態管理を行う方法を、Reduxの考え方に沿って示したサンプル実装です。Zoneless(Zone.js未依存)やStandaloneコンポーネントの利用、Signalsの計算済みシグナル(computed signals)を使ったセレクタ設計、ストアの分割、アクション相当の更新関数といった実践的手法を含み、スケールするWebアプリケーションでのベストプラクティスを学べます。コードはTypeScriptで書かれており、Angular 20の新機能を活用したモダンな状態管理パターンを分かりやすく実装・説明しています。

GitHub

リポジトリの統計情報

  • スター数: 2
  • フォーク数: 0
  • ウォッチャー数: 2
  • コミット数: 30
  • ファイル数: 16
  • メインの言語: TypeScript

主な特徴

  • Angular 20 Signalsを中心に置いたシンプルな状態管理ストアの実装例
  • Reduxの概念(単一のソース・オブ・トゥルース、アクション、セレクタ)をSignalsで表現
  • Zoneless・Standalone対応の設計で最新のAngularパターンに適合
  • 大規模化を見据えたストアの分割と型安全な更新方針

技術的なポイント

このプロジェクトの技術的な核は「Signalsを用いてRedux的な状態管理を実現する」点です。Signalsは従来のObservableベースな流れ(RxJS)と比べて同期的で軽量なリアクティビティを提供し、コンポーネントの再描画は依存するシグナルが変化したときに限定されるためパフォーマンスに優れます。リポジトリでは次の点が特に注目できます。

  • ストア設計: 単一のグローバルストアではなく、機能ごとにスライス化したストアをSignalsで表現しています。各スライスはsignal(状態本体)と、状態を変更するための関数群(伝統的なアクションに相当)から構成され、更新はsignal.updateやsetで行われます。これによりImmutable風の更新や局所的な変更の反映が容易になります。

  • セレクタ(Computed Signals): セレクタはcomputedシグナルで実装され、必要な派生データを効率的に計算します。computedは依存するシグナルが変化した場合のみ再評価されるため、コストの高い計算を無駄なく扱えます。

  • サイドエフェクトと非同期処理: Reduxでいうミドルウェアの役割は、Signalsと組み合わせた関数やAngularのDIで注入するサービスで担います。非同期処理はPromiseやfetch、必要に応じてRxJSを混合して扱うことが想定されており、結果をストアのsignalに反映するパターンが示されています。

  • ZonelessとStandalone: Zone.jsに依存しない設定やStandaloneコンポーネントの利用例があるため、Angular 20の軽量化・起動時間短縮と相性が良い設計です。テストやSSR(サーバーサイドレンダリング)への適用も配慮されています。

  • 型安全・可読性: TypeScriptの型を活かしたインターフェース定義や、ストアAPIの分離により可読性とテスト容易性を確保しています。Reduxから移行する際のパターンマッピング(アクション→更新関数、リデューサ→updateロジック、セレクタ→computed)は実務での導入を助けます。

総じて、このリポジトリはAngular 20のSignalsを用いた状態管理を学ぶための実践サンプルであり、既存のNgRx/RxJSベースのコードベースからの移行指針や、パフォーマンス改善、Zoneless化のヒントを与えてくれます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .prettierignore: file
  • .prettierrc: file
  • .vscode: dir
  • README.md: file

…他 11 ファイル

まとめ

Signalsでの状態管理を試したい開発者にとって実践的で移行の指針になるリポジトリです(50字程度)。

リポジトリ情報:

READMEの抜粋:

Angular Signals State Management

Example shows how to use Angular Signals to manage state in Angular 20, following the Redux pattern.

Table of Contents