jpskill.com
💬 コミュニケーション コミュニティ

angular-architect

Angular 16以降の最新機能やRxJS/NgRxを駆使し、大規模なエンタープライズ向けAngular開発を専門的に行うSkill。

📜 元の英語説明(参考)

Enterprise Angular development expert specializing in Angular 16+ features, Signals, Standalone Components, and RxJS/NgRx at scale.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Angular 16以降の最新機能やRxJS/NgRxを駆使し、大規模なエンタープライズ向けAngular開発を専門的に行うSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o angular-architect.zip https://jpskill.com/download/6612.zip && unzip -o angular-architect.zip && rm angular-architect.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6612.zip -OutFile "$d\angular-architect.zip"; Expand-Archive "$d\angular-architect.zip" -DestinationPath $d -Force; ri "$d\angular-architect.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して angular-architect.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → angular-architect フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Angular Architect

目的

Angular 16+ の機能(Signals、Standalone Components)、RxJS リアクティブプログラミング、NgRx スケールでの状態管理に特化した、エンタープライズ Angular 開発の専門知識を提供します。パフォーマンス最適化と最新のアーキテクチャパターンを用いて、大規模な Angular アプリケーションを設計します。

使用する場面

  • 大規模な Angular アプリケーション(Monorepo、Micro-frontends)のアーキテクチャ設計
  • きめ細やかなリアクティビティのための Signals の実装(Angular 16+)
  • レガシーな Modules (NgModule) から Standalone Components への移行
  • NgRx または NgRx Signal Store を用いた複雑な状態管理の設計
  • パフォーマンスの最適化(Zoneless、OnPush、Hydration)
  • Nx または Turborepo を用いたエンタープライズ CI/CD のセットアップ


2. 意思決定フレームワーク

状態管理戦略

What is the complexity level?
│
├─ **Local State (Component)**
│  ├─ Simple? → **Signals (`signal`, `computed`)**
│  └─ Complex streams? → **RxJS (`BehaviorSubject`)**
│
├─ **Global Shared State**
│  ├─ Lightweight? → **NgRx Signal Store** (Modern, functional)
│  ├─ Enterprise/Complex? → **NgRx Store (Redux)** (Strict actions/reducers)
│  └─ Entity Collections? → **NgRx Entity**
│
└─ **Server State**
   └─ Caching/Deduplication? → **TanStack Query (Angular)** or **RxJS + Cache Operator**

アーキテクチャパターン

パターン ユースケース 利点 欠点
Standalone 15+ のデフォルト ボイラープレートが少ない、ツリーシェイク可能 レガシー開発者にとって学習曲線がある
Nx Monorepo マルチアプリのエンタープライズ 共有ライブラリ、影響を受けるビルド ツーリングの複雑さ
Micro-Frontends 異なるチーム/スタック 独立したデプロイ ランタイムの複雑さ、共有依存関係の地獄
Zoneless 高パフォーマンス Zone.js のオーバーヘッドがない 明示的な変更検知が必要

危険信号 → performance-engineer にエスカレート:

  • "ExpressionChangedAfterItHasBeenCheckedError" が頻繁に発生する
  • 初期ロード時のバンドルサイズが 5MB を超える
  • 変更検知サイクルが常に実行されている(Zone.js のスラッシング)
  • RxJS サブスクリプションでのメモリリーク(takeUntilDestroyed の忘れ)


ワークフロー 2: NgRx Signal Store (モダンな状態)

目標: Redux よりも少ないボイラープレートで機能の状態を管理します。

手順:

  1. ストアの定義

    import { signalStore, withState, withMethods, patchState } from '@ngrx/signals';
    
    export const UserStore = signalStore(
      { providedIn: 'root' },
      withState({ users: [], loading: false, query: '' }),
      withMethods((store) => ({
        setQuery(query: string) {
          patchState(store, { query });
        },
        async loadUsers() {
          patchState(store, { loading: true });
          const users = await fetchUsers(store.query());
          patchState(store, { users, loading: false });
        }
      }))
    );
  2. コンポーネントでの使用

    export class UserListComponent {
      readonly store = inject(UserStore);
    
      constructor() {
        // Auto-load when query changes (Effect)
        effect(() => {
          this.store.loadUsers();
        });
      }
    }


ワークフロー 4: Zoneless アプリケーション (Angular 18+)

目標: Zone.js を削除して、バンドルサイズを小さくし、デバッグを改善します。

手順:

  1. ブートストラップ設定

    // main.ts
    bootstrapApplication(AppComponent, {
      providers: [
        provideExperimentalZonelessChangeDetection()
      ]
    });
  2. 状態管理 (Signals のみ)

    • ApplicationRef.tick() を手動で使用しないでください。
    • すべての状態に signal() を使用してください。
    • イベントは自動的に変更検知をトリガーします。
  3. 統合

    • RxJS: AsyncPipe (引き続き機能します) または toSignal を使用してください。
    • タイマー: setInterval は自動的に CD をトリガーしません。タイマー内で signal の更新を使用してください。


コア機能

エンタープライズ Angular アーキテクチャ

  • 大規模な Angular アプリケーションアーキテクチャを設計します
  • モジュラー設計パターン(Nx モノレポ、マイクロフロントエンド)を実装します
  • チームのコーディング標準とベストプラクティスを確立します
  • スケーラブルなフォルダ構造とモジュール構成を作成します

モダン Angular 開発

  • きめ細やかなリアクティビティのために Signals を実装します(Angular 16+)
  • レガシーな NgModule ベースのコードを Standalone Components に移行します
  • OnPush および Zoneless 戦略で変更検知を最適化します
  • 新しい Angular 機能(deferrable views、hydration)を活用します

状態管理

  • エンタープライズアプリケーション向けに NgRx Store アーキテクチャを設計します
  • 軽量な状態管理のために NgRx Signal Store を実装します
  • 複雑な要件のためにカスタム状態管理ソリューションを作成します
  • TanStack Query または RxJS パターンでサーバーの状態を統合します

パフォーマンスエンジニアリング

  • ツリーシェイキングと遅延ロードでバンドルサイズを最適化します
  • コード分割と差分ロードを実装します
  • パフォーマンス監視とメトリクス収集を作成します
  • 大規模な Angular アプリケーションの最適化戦略を開発します


5. アンチパターンと落とし穴

❌ アンチパターン 1: ネストされたサブスクリプション(「コールバック地獄」)

どのようなものか:

this.route.params.subscribe(params => {
  this.service.getData(params.id).subscribe(data => {
    this.data = data; // Manual assignment
  });
});

なぜ失敗するのか:

  • 競合状態(パラメーターが速く変更された場合)。
  • メモリリーク(購読解除されない場合)。

正しいアプローチ:

  • SwitchMap:
    this.data$ = this.route.params.pipe(
      switchMap(params => this.service.getData(params.id))
    );
  • テンプレートで AsyncPipe または toSignal を使用します。

❌ アンチパターン 2: テンプレート内のロジック

どのようなものか:

<div *ngIf="user.roles.includes('ADMIN') && user.active && !isLoading">

なぜ失敗するのか:

  • テストが難しい。
  • すべての変更検知サイクルで実行される。

正しいアプローチ:

  • Computed Signal / Getter:
    isAdmin = computed(() => this.user().roles.includes('ADMIN'));
    <div *n
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Angular Architect

Purpose

Provides enterprise Angular development expertise specializing in Angular 16+ features (Signals, Standalone Components), RxJS reactive programming, and NgRx state management at scale. Designs large-scale Angular applications with performance optimization and modern architectural patterns.

When to Use

  • Architecting a large-scale Angular application (Monorepo, Micro-frontends)
  • Implementing Signals for fine-grained reactivity (Angular 16+)
  • Migrating legacy Modules (NgModule) to Standalone Components
  • Designing complex state management with NgRx or NgRx Signal Store
  • Optimizing performance (Zoneless, OnPush, Hydration)
  • Setting up enterprise CI/CD with Nx or Turborepo


2. Decision Framework

State Management Strategy

What is the complexity level?
│
├─ **Local State (Component)**
│  ├─ Simple? → **Signals (`signal`, `computed`)**
│  └─ Complex streams? → **RxJS (`BehaviorSubject`)**
│
├─ **Global Shared State**
│  ├─ Lightweight? → **NgRx Signal Store** (Modern, functional)
│  ├─ Enterprise/Complex? → **NgRx Store (Redux)** (Strict actions/reducers)
│  └─ Entity Collections? → **NgRx Entity**
│
└─ **Server State**
   └─ Caching/Deduplication? → **TanStack Query (Angular)** or **RxJS + Cache Operator**

Architecture Patterns

Pattern Use Case Pros Cons
Standalone Default for 15+ Less boilerplate, tree-shakable Learning curve for legacy devs
Nx Monorepo Multi-app enterprise Shared libs, affected builds Tooling complexity
Micro-Frontends Different teams/stacks Independent deployment Runtime complexity, shared deps hell
Zoneless High performance No Zone.js overhead Requires explicit Change Detection

Red Flags → Escalate to performance-engineer:

  • "ExpressionChangedAfterItHasBeenCheckedError" appearing frequently
  • Bundle size > 5MB initial load
  • Change detection cycles running constantly (Zone.js thrashing)
  • Memory leaks in RxJS subscriptions (forgotten takeUntilDestroyed)


Workflow 2: NgRx Signal Store (Modern State)

Goal: Manage feature state with less boilerplate than Redux.

Steps:

  1. Define Store

    import { signalStore, withState, withMethods, patchState } from '@ngrx/signals';
    
    export const UserStore = signalStore(
      { providedIn: 'root' },
      withState({ users: [], loading: false, query: '' }),
      withMethods((store) => ({
        setQuery(query: string) {
          patchState(store, { query });
        },
        async loadUsers() {
          patchState(store, { loading: true });
          const users = await fetchUsers(store.query());
          patchState(store, { users, loading: false });
        }
      }))
    );
  2. Use in Component

    export class UserListComponent {
      readonly store = inject(UserStore);
    
      constructor() {
        // Auto-load when query changes (Effect)
        effect(() => {
          this.store.loadUsers();
        });
      }
    }


Workflow 4: Zoneless Applications (Angular 18+)

Goal: Remove Zone.js for smaller bundles and better debugging.

Steps:

  1. Bootstrap Config

    // main.ts
    bootstrapApplication(AppComponent, {
      providers: [
        provideExperimentalZonelessChangeDetection()
      ]
    });
  2. State Management (Signals Only)

    • Do NOT use ApplicationRef.tick() manually.
    • Use signal() for all state.
    • Events automatically trigger change detection.
  3. Integrations

    • RxJS: Use AsyncPipe (still works) or toSignal.
    • Timers: setInterval does NOT trigger CD automatically. Use signal updates inside the timer.


Core Capabilities

Enterprise Angular Architecture

  • Designs large-scale Angular application architectures
  • Implements modular design patterns (Nx monorepos, micro-frontends)
  • Establishes coding standards and best practices for teams
  • Creates scalable folder structures and module organization

Modern Angular Development

  • Implements Signals for fine-grained reactivity (Angular 16+)
  • Migrates legacy NgModule-based code to Standalone Components
  • Optimizes Change Detection with OnPush and Zoneless strategies
  • Leverages new Angular features (deferrable views, hydration)

State Management

  • Designs NgRx Store architectures for enterprise applications
  • Implements NgRx Signal Store for lightweight state management
  • Creates custom state management solutions for complex requirements
  • Integrates server state with TanStack Query or RxJS patterns

Performance Engineering

  • Optimizes bundle size with tree-shaking and lazy loading
  • Implements code splitting and differential loading
  • Creates performance monitoring and metrics collection
  • Develops optimization strategies for large Angular applications


5. Anti-Patterns & Gotchas

❌ Anti-Pattern 1: Nested Subscriptions ("Callback Hell")

What it looks like:

this.route.params.subscribe(params => {
  this.service.getData(params.id).subscribe(data => {
    this.data = data; // Manual assignment
  });
});

Why it fails:

  • Race conditions (if params change fast).
  • Memory leaks (if not unsubscribed).

Correct approach:

  • SwitchMap:
    this.data$ = this.route.params.pipe(
      switchMap(params => this.service.getData(params.id))
    );
  • Use AsyncPipe or toSignal in template.

❌ Anti-Pattern 2: Logic in Templates

What it looks like:

<div *ngIf="user.roles.includes('ADMIN') && user.active && !isLoading">

Why it fails:

  • Hard to test.
  • Runs on every change detection cycle.

Correct approach:

  • Computed Signal / Getter:
    isAdmin = computed(() => this.user().roles.includes('ADMIN'));
    <div *ngIf="isAdmin()">

❌ Anti-Pattern 3: Shared Module Bloat

What it looks like:

  • One massive SharedModule importing everything (Material, Utils, Components).

Why it fails:

  • Breaks tree-shaking.
  • Increases initial bundle size.

Correct approach:

  • Standalone Components: Import exactly what you need in the component's imports: [] array.


7. Quality Checklist

Architecture:

  • [ ] Standalone: No NgModules for new features.
  • [ ] Lazy Loading: All feature routes are lazy loaded (loadComponent).
  • [ ] State: Local state uses Signals, Shared state uses Store.

Performance:

  • [ ] Change Detection: OnPush enabled everywhere.
  • [ ] Bundle: Initial bundle < 200KB.
  • [ ] Defer: @defer used for heavy components below the fold.

Code Quality:

  • [ ] Strict Mode: strict: true in tsconfig.
  • [ ] No Subscriptions: AsyncPipe or toSignal used instead of .subscribe().
  • [ ] Security: Inputs verified, no innerHTML without sanitization.

Examples

Example 1: Enterprise E-Commerce Platform Architecture

Scenario: A retail company needs to architect a large-scale e-commerce platform handling 100K+ concurrent users, with separate modules for catalog, cart, checkout, and user management.

Architecture Decisions:

  1. Nx Monorepo Structure: Split into apps (storefront, admin, api) and shared libraries (ui, utilities, data-access)
  2. State Management: NgRx Signal Store for cart/user state, TanStack Query for server state
  3. Performance Strategy: Deferrable views for below-fold content, OnPush everywhere, lazy loading for feature modules
  4. Micro-frontend Ready: Module Federation configured for potential future separation

Key Implementation Details:

  • Cart Service using Signals with computed totals and persisted state
  • Product Catalog with TanStack Query caching and optimistic updates
  • Checkout flow with multi-step wizard and form validation
  • Admin panel with separate build and deployment pipeline

Example 2: Legacy NgModule to Standalone Migration

Scenario: A financial services company has a 5-year-old Angular application using NgModules and wants to modernize to Angular 18 with Standalone Components.

Migration Strategy:

  1. Incremental Approach: Migrate one feature module at a time, never breaking the app
  2. Dependency Analysis: Use ng-dompurify to find all module dependencies
  3. Component Conversion: Convert components to standalone with proper imports
  4. Service Refactoring: Remove module-level providedIn, use root or feature-level injection

Migration Results:

  • Reduced initial bundle size by 40% through tree-shaking
  • Eliminated 200+ lines of boilerplate NgModule code
  • Improved change detection performance by 60%
  • Enabled adoption of new Angular features (defer blocks, zoneless)

Example 3: Real-Time Dashboard with Signals

Scenario: A SaaS company needs a monitoring dashboard showing real-time metrics with 1-second updates, requiring fine-grained reactivity without Zone.js overhead.

Implementation Approach:

  1. Zoneless Bootstrap: Enable experimental zoneless change detection
  2. Signal-Based State: All dashboard state managed through Signals
  3. RxJS Interop: Use toSignal for converting Observables to Signals
  4. WebSocket Integration: Push updates directly to Signals

Performance Results:

  • 30% reduction in bundle size (no Zone.js)
  • 50% improvement in change detection cycles
  • Smooth 60fps updates with complex data visualizations
  • Improved debugging with clearer change detection logs

Best Practices

Architecture Design

  • Design for Scale: Plan folder structures and module boundaries before writing code
  • Embrace Standalone: Default to Standalone Components for all new development
  • Lazy Load Everything: Feature modules, routes, and heavy components
  • Separate Concerns: Smart containers vs. dumb presentational components
  • Define Boundaries: Clear interfaces between layers (data, domain, presentation)

State Management

  • Local State = Signals: Use signal() and computed() for component-level state
  • Global State = Signal Store: NgRx Signal Store for shared feature state
  • Server State = TanStack Query: Never manually manage server state caching
  • Avoid Subscriptions: Use AsyncPipe, toSignal, or takeUntilDestroyed pattern
  • Immutable Updates: Always create new references for state changes

Performance Engineering

  • OnPush Everywhere: Default ChangeDetectionStrategy.OnPush for all components
  • Defer Loading: Use @defer blocks for heavy components and dependencies
  • Optimize Images: Lazy load images, use modern formats (WebP, AVIF)
  • Bundle Analysis: Regular webpack bundle analysis to identify bloat
  • Preload Strategically: Preload critical routes, lazy load everything else

Code Quality

  • Strict Mode: Enable and maintain TypeScript strict mode
  • Strict Null Checks: Never allow undefined/null without explicit handling
  • Document APIs: Clear JSDoc for public methods and interfaces
  • Centralize Configuration: Feature flags, environment configs in one place
  • Automated Linting: ESLint with angular-specific rules and auto-fix

Testing Strategy

  • Unit Tests: Jest or Vitest for component and service testing
  • Integration Tests: Cypress or Playwright for critical user flows
  • Test Coverage: Target 80%+ coverage for business logic
  • Component Testing: Angular Testing Library for behavioral tests
  • E2E Smoke Tests: Automated smoke tests on every deployment