mcpField
R
rxjs

rxjs

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

rxjs について

JavaScript と TypeScript の開発者向けに、Observable や非同期処理、RxJS の実践方法を扱うスキルです。RxJS 8 の API 変更と Angular Signals との連携も説明します。

主な機能

  1. 01RxJS 8 の API 変更情報
  2. 02Observable と非同期処理の実践
  3. 03フラット化オペレーターの選択指針
  4. 04購読解除とエラー処理
  5. 05Signal 変換の相互運用

活用シーン

  1. 01非同期データストリームの合成
  2. 02キャンセル可能な検索リクエストの実装
  3. 03購読に起因するメモリリークの防止
  4. 04Angular での Observable と Signal の変換

インストール

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

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

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

同梱ファイル

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

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

詳細

RxJS(JavaScript 向けリアクティブ拡張機能)

バージョン: 8.x(2025) タグ: リアクティブプログラミング、オブザーバブル、非同期

参考資料: ドキュメント — オペレーター、API • Angular RxJS • GitHub

API の変更点

このセクションでは、最近のバージョン固有の API 変更について説明します。

  • 新機能:RxJS 8 — 最新の TypeScript 型、小さなバンドル、より優れたツリーシェイキング ソース

  • 新機能:相互運用ヘルパーの改善 — toSignal と toObservable による Signals との変換がより簡単になりました

  • 新機能:RxJS 8 の使いやすさ — 簡潔なオペレーターシグネチャと、より安全なデフォルト設定

  • 非推奨:従来のインポート形式 — パッチインポートではなく、RxJS 7 以降のパイプ可能なオペレーターを使用してください

ベストプラクティス

  • テンプレートでは AsyncPipe を使用します — サブスクリプションとサブスクリプション解除を自動的に処理し、メモリーリークを防ぎます
@Component({
  template: `
    <div *ngIf="data$ | async as data">
      {{ data.name }}
    </div>
  `
})
export class MyComponent {
  data$ = this.service.getData();
}
  • 適切なフラット化オペレーターを使用します — ユースケースに応じて選択してください:
// switchMap - cancel previous, keep latest (search)
search(term: string): Observable<SearchResult[]> {
  return this.searchService.search(term).pipe(
    debounceTime(300),
    distinctUntilChanged(),
    switchMap(term => term ? this.http.get(...) : of([]))
  );
}

// mergeMap - run concurrently (multiple API calls)
this.items$.pipe(
  mergeMap(item => this.save(item))
);

// concatMap - run sequentially (order matters)
this.orders$.pipe(
  concatMap(order => this.processOrder(order))
);

// exhaustMap - ignore while running (form submit)
this.submit$.pipe(
  exhaustMap(() => this.submitForm())
);
  • 必ずサブスクリプションを解除します — メモリーリークを防ぎます
// Use takeUntil pattern
private destroy$ = new Subject<void>();

ngOnInit() {
  this.data$.pipe(takeUntil(this.destroy$)).subscribe();
}

ngOnDestroy() {
  this.destroy$.next();
  this.destroy$.complete();
}

// Or use takeUntilDestroyed (Angular 16+)
private destroy$ = takeUntilDestroyed();
  • エラー処理には catchError を使用します
this.http.get('/api/data').pipe(
  catchError(error => {
    console.error(error);
    return of([]); // Return fallback value
  })
);
  • 共有オブザーバブルのキャッシュには shareReplay(1) を使用します
this.data$ = this.http.get('/api/data').pipe(
  shareReplay(1)
);
  • オブザーバブルの名前には $ 接尾辞を付けます — 可読性が向上します

  • UI の状態には Signals、イベントには RxJS を使用します — Angular の最新のパターンです

// Convert Observable to Signal
users = toSignal(this.users$, { initialValue: [] });

// Convert Signal to Observable (if needed)
name$ = toObservable(this.name);

コメント