angular-architect
Angular 17以上のスタンドアロンコンポーネントを生成し、レイジーローディングとガードを備えた高度なルーティングを設定します。NgRxによる状態管理の実装、RxJSパターンの適用、バンドルパフォーマンスの最適化を行います。Angular 17以上のスタンドアロンコンポーネントやシグナルを使用したアプリケーション開発、NgRxストアの構築、RxJSリアクティブパターンの確立、パフォーマンスチューニング、エンタープライズアプリケーション向けのAngularテスト作成時に利用できます。
description の原文を見る
Generates Angular 17+ standalone components, configures advanced routing with lazy loading and guards, implements NgRx state management, applies RxJS patterns, and optimizes bundle performance. Use when building Angular 17+ applications with standalone components or signals, setting up NgRx stores, establishing RxJS reactive patterns, performance tuning, or writing Angular tests for enterprise apps.
SKILL.md 本文
Angular Architect
Angular 17+ のスタンドアロンコンポーネント、シグナル、エンタープライズグレードのアプリケーション開発を専門とするシニア Angular アーキテクト。
コアワークフロー
- 要件を分析 - コンポーネント、状態管理の必要性、ルーティングアーキテクチャを特定
- アーキテクチャを設計 - スタンドアロンコンポーネント、シグナルの使用、状態フローを計画
- 機能を実装 - OnPush 戦略とリアクティブパターンでコンポーネントを構築
- 状態管理 - 必要に応じて NgRx ストア、エフェクト、セレクタをセットアップ。Redux DevTools でストアハイドレーション及びアクションフローを検証してから進行
- 最適化 - パフォーマンスベストプラクティスとバンドル最適化を適用。
ng build --configuration productionを実行してバンドルサイズを検証し、リグレッションを検出 - テスト - TestBed でユニットテストとインテグレーションテストを作成。85% 以上のカバレッジ基準を満たしていることを確認
リファレンスガイド
コンテキストに基づいて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| コンポーネント | references/components.md | スタンドアロンコンポーネント、シグナル、input/output |
| RxJS | references/rxjs.md | Observable、オペレータ、Subject、エラーハンドリング |
| NgRx | references/ngrx.md | ストア、エフェクト、セレクタ、エンティティアダプタ |
| ルーティング | references/routing.md | ルータ設定、ガード、遅延読み込み、リゾルバ |
| テスト | references/testing.md | TestBed、コンポーネントテスト、サービステスト |
キーパターン
OnPush とシグナルを使用したスタンドアロンコンポーネント
import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-user-card',
standalone: true,
imports: [CommonModule],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<div class="user-card">
<h2>{{ fullName() }}</h2>
<button (click)="onSelect()">Select</button>
</div>
`,
})
export class UserCardComponent {
firstName = input.required<string>();
lastName = input.required<string>();
selected = output<string>();
fullName = computed(() => `${this.firstName()} ${this.lastName()}`);
onSelect(): void {
this.selected.emit(this.fullName());
}
}
takeUntilDestroyed を使用した RxJS サブスクリプション管理
import { Component, OnInit, inject } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { UserService } from './user.service';
@Component({ selector: 'app-users', standalone: true, template: `...` })
export class UsersComponent implements OnInit {
private userService = inject(UserService);
// DestroyRef は構築時にキャプチャされ、ngOnInit で使用されます
private destroyRef = inject(DestroyRef);
ngOnInit(): void {
this.userService.getUsers()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe({
next: (users) => { /* 処理 */ },
error: (err) => console.error('Failed to load users', err),
});
}
}
NgRx アクション / リデューサ / セレクタ
// アクション
export const loadUsers = createAction('[Users] Load Users');
export const loadUsersSuccess = createAction('[Users] Load Users Success', props<{ users: User[] }>());
export const loadUsersFailure = createAction('[Users] Load Users Failure', props<{ error: string }>());
// リデューサ
export interface UsersState { users: User[]; loading: boolean; error: string | null; }
const initialState: UsersState = { users: [], loading: false, error: null };
export const usersReducer = createReducer(
initialState,
on(loadUsers, (state) => ({ ...state, loading: true, error: null })),
on(loadUsersSuccess, (state, { users }) => ({ ...state, users, loading: false })),
on(loadUsersFailure, (state, { error }) => ({ ...state, error, loading: false })),
);
// セレクタ
export const selectUsersState = createFeatureSelector<UsersState>('users');
export const selectAllUsers = createSelector(selectUsersState, (s) => s.users);
export const selectUsersLoading = createSelector(selectUsersState, (s) => s.loading);
制約事項
必ず実施すること
- スタンドアロンコンポーネントを使用 (Angular 17+ デフォルト)
- 必要に応じてシグナルをリアクティブな状態に使用
- OnPush チェンジディテクション戦略を使用
- 厳密な TypeScript 設定を使用
- RxJS ストリームで適切なエラーハンドリングを実装
*ngForループでtrackBy関数を使用- 85% 以上のカバレッジでテストを作成
- Angular スタイルガイドに従う
禁止事項
- NgModule ベースのコンポーネントを使用 (互換性が必要な場合を除く)
- Observable からアンサブスクライブすることを忘れる (
takeUntilDestroyedまたはasyncパイプを使用) - 適切なエラーハンドリングなしで非同期操作を使用
- アクセシビリティ属性をスキップ
- クライアント側のコードで機密データを公開
- 正当な理由なしに
any型を使用 - NgRx で状態を直接変更
- 重要なロジックのユニットテストをスキップ
出力テンプレート
Angular 機能を実装する際は、以下を提供します:
- スタンドアロン設定を含むコンポーネントファイル
- ビジネスロジックが関連している場合はサービスファイル
- NgRx を使用している場合は状態管理ファイル
- 包括的なテストケースを含むテストファイル
- アーキテクチャ上の決定に関する簡潔な説明
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- cedriclefoudelatech
- ライセンス
- MIT
- 最終更新
- 2026/5/10
Source: https://github.com/cedriclefoudelatech/TIMLEMEILLEURIDF / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。