アンチパターン回避チェックリスト
このチェックリストを使って、自分のRxJSコードがアンチパターンに該当していないか確認しましょう。各項目をクリックすると、詳しい解説とコード例を確認できます。
チェック項目
🔴 重大な問題の回避
| チェック | 項目 | ポイント |
|---|---|---|
| Subject は asObservable() で公開 | Subject を直接 export せず、asObservable() で Observable として公開状態変更は専用メソッド経由でのみ可能にする | |
| ネストした subscribe を避ける | subscribe 内で別の subscribe を呼ばないswitchMap、mergeMap、concatMap などでフラット化 | |
| 無限ストリームは必ず解除 | イベントリスナーなど無限に続くストリームは必ず購読解除takeUntil パターンまたは Subscription の管理 | |
| shareReplay の設定を明示 | shareReplay({ bufferSize: 1, refCount: true }) の形式を使用メモリリークを防ぐために参照カウントを有効化 | |
| subscribe内のif文ネストを避ける | subscribe 内での複雑な条件分岐(3つ以上のネスト)を避けるfilter、iif、partitionなどのオペレーターで宣言的に記述 |
🟡 注意が必要な問題の回避
| チェック | 項目 | ポイント |
|---|---|---|
| map は純粋関数、副作用は tap | map 内で状態変更やログ出力をしない副作用は tap オペレーターで明示的に分離 | |
| Cold/Hot を適切に使い分け | HTTP リクエストなどは shareReplay で Hot に変換購読ごとに実行されるべきか、共有すべきかを判断 | |
| Promise は from で変換 | Promise と Observable を混在させないfrom() で Observable に変換して統一的に処理 | |
| 高頻度イベントは制御 | 検索入力は debounceTime、スクロールは throttleTime で制御distinctUntilChanged で重複を除外 |
🔵 コード品質の向上
| チェック | 項目 | ポイント |
|---|---|---|
| エラーを適切に処理 | catchError でエラーをキャッチし、適切に処理ユーザーに分かりやすいエラーメッセージを表示 必要に応じて retry / retryWhen で再試行 | |
| DOM イベントを適切に解放 | fromEvent の購読は必ず解除コンポーネント破棄時に takeUntil で自動解除 | |
| 型安全性を確保 | インターフェースや型エイリアスを定義Observable<T> の型パラメータを明示TypeScript の型推論を活用 | |
| 適切なオペレーターを選択 | 検索: switchMap、並列: mergeMap順次: concatMap、連打防止: exhaustMap | |
| シンプルな処理は RxJS 不要 | 配列処理などは通常の JavaScript で十分 RxJS は非同期処理やイベントストリームに使用 | |
| 状態はリアクティブに管理 | BehaviorSubject や scan で状態を管理subscribe は最終的なトリガーとして使用 | |
| テストを書く | TestScheduler でマーブルテストを実施非同期処理を同期的にテスト可能に |
使い方
1. コードレビュー時
新しいコードを書いた後、このチェックリストを使って自己レビューを実施しましょう。
2. プルリクエスト時
プルリクエストのテンプレートにこのチェックリストを含めることで、レビュアーと共通の基準で確認できます。
3. 定期的な見直し
既存のコードベースに対して定期的にこのチェックリストを使い、アンチパターンが混入していないか確認しましょう。
4. チーム内での共有
チームメンバーと共有し、RxJS のベストプラクティスを統一しましょう。
関連リソース
- よくある間違いと対処法 - 各アンチパターンの詳細な解説とコード例
- アンチパターン集トップ - アンチパターン一覧と学習の進め方
- エラーハンドリング - エラー処理のベストプラクティス
- テスト手法 - RxJS コードのテスト方法
チェックリスト活用のコツ
全項目を一度に完璧にしようとしない
- まずは重大な問題(🔴)から優先的に対処
- 段階的に改善していく
チーム内で優先度を決める
- プロジェクトの特性に応じて重要度を調整
- カスタマイズしたチェックリストを作成
自動化を検討
- ESLint などの静的解析ツールで自動チェック
- CI/CD パイプラインに組み込む
定期的に更新
- RxJS のバージョンアップに応じて更新
- チームの経験から得た知見を反映
重要: このチェックリストは完璧なコードを書くためのものではなく、よくある問題を避けるためのガイドです。プロジェクトの文脈に応じて柔軟に活用してください。