mcpField
A
angular-reactive

angular-reactive

github.com/oguzhan18開発7177 回インストール31 週間前に更新
リポジトリ

angular-reactive について

リアクティブプログラミングと RxJS を扱う Angular 開発者向けのリファレンススキルです。状態サービス、Observable によるデータ取得、テンプレートでの購読、キャッシュ、後処理のパターンを紹介します。

主な機能

  1. 01BehaviorSubject による状態管理
  2. 02Observable ベースのサービス
  3. 03async pipe の利用
  4. 04shareReplay によるキャッシュ
  5. 05takeUntil による後処理

活用シーン

  1. 01サービスを介した状態共有
  2. 02テンプレートでの Observable データ表示
  3. 03HTTP 結果のキャッシュ
  4. 04購読のクリーンアップ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-reactive

インストール後、Claude Code で/angular-reactiveを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/discussions/
_INDEX.md
references/docs/
_INDEX.md
references/issues/
_INDEX.md
references/releases/
_INDEX.md

詳細

Angular リアクティブプログラミング

バージョン: Angular 21(2025) タグ: リアクティブ、Observable、RxJS、BehaviorSubject

参考資料: リアクティブガイド • RxJS

ベストプラクティス

  • 状態には BehaviorSubject を使用します
@Injectable({ providedIn: 'root' })
export class StateService {
  private state = new BehaviorSubject<State>(initialState);
  state$ = this.state.asObservable();
  
  updateState(newState: Partial<State>) {
    this.state.next({ ...this.state.value, ...newState });
  }
}
  • サービスでは Observable を使用します
@Injectable({ providedIn: 'root' })
export class DataService {
  private http = inject(HttpClient);
  
  getData(): Observable<Data[]> {
    return this.http.get<Data[]>('/api/data');
  }
}
  • async パイプを使用します
@Component({
  template: `
    @if (data$ | async; as data) {
      {{ data.name }}
    }
  `
})
export class MyComponent {
  data$ = this.service.getData();
}
  • キャッシュには shareReplay を使用します
data$ = this.http.get('/api/data').pipe(
  shareReplay(1)
);
  • クリーンアップには takeUntil を使用します
@Component({})
export class MyComponent implements OnDestroy {
  private destroy$ = new Subject<void>();
  
  ngOnInit() {
    this.data$.pipe(takeUntil(this.destroy$)).subscribe();
  }
  
  ngOnDestroy() {
    this.destroy$.next();
    this.destroy$.complete();
  }
}

コメント