Skip to content

RxJSアンチパターン集

RxJSは強力なリアクティブプログラミングのライブラリですが、誤った使い方をすると、バグの温床や保守性の低下を招きます。このセクションでは、TypeScriptでRxJSを使う際によくある間違いと、それを避けるためのベストプラクティスを紹介します。

このセクションの目的

  • バグを未然に防ぐ: よくある間違いを事前に理解することで、実装時のトラブルを回避
  • 保守性を向上させる: 読みやすく、テストしやすいコードパターンを習得
  • パフォーマンスを最適化: メモリリークや不要な処理を防ぐテクニックを学習

アンチパターン一覧

このセクションでは、以下の15のアンチパターンを取り上げています。

🔴 重大な問題

これらのパターンは、アプリケーションに深刻な影響を与える可能性があります。

パターン問題影響
Subject の外部公開Subject をそのまま公開し、外部から next() を呼べる状態にする状態管理の予測不可能性、デバッグ困難
ネストした subscribesubscribe の中でさらに subscribe を呼ぶコールバック地獄、エラー処理の複雑化
unsubscribe 忘れ無限ストリームの購読を解除しないメモリリーク、リソース浪費
shareReplay の誤用shareReplay の動作を理解せずに使う古いデータの参照、メモリリーク

🟡 注意が必要な問題

これらは特定の状況で問題になる可能性があります。

パターン問題影響
map での副作用map オペレーター内で状態を変更する予測不可能な動作、テスト困難
Cold/Hot の無視Observable の性質を考慮しない重複実行、予期しない動作
Promise との混在Promise と Observable を適切に変換しないエラーハンドリングの不備
バックプレッシャー無視高頻度イベントの制御を怠るパフォーマンス低下、UI のフリーズ

🔵 コード品質に関する問題

これらは直接的なバグではありませんが、コードの品質を下げる要因です。

パターン問題影響
エラーの握りつぶしエラーを適切に処理しないデバッグ困難、ユーザー体験の低下
DOM イベントリークDOM イベントリスナーを解放しないメモリリーク、パフォーマンス低下
型安全性の欠如any を多用する実行時エラー、リファクタリング困難
不適切なオペレーター選択目的に合わないオペレーターを使う非効率、予期しない動作
過度な複雑化シンプルに書ける処理を複雑にする可読性低下、保守困難
subscribe 内での状態変更subscribe 内で直接状態を変更するテスト困難、バグの原因
テストの欠如RxJS コードのテストを書かないリグレッション、リファクタリング困難

学習の進め方

  1. よくある間違いと対処法 で15のアンチパターンを詳しく学習
  2. 各アンチパターンには「悪い例」と「良い例」のコードを掲載
  3. アンチパターン回避チェックリスト で自分のコードを見直し
  4. ベストプラクティスを実践し、チーム内で共有

関連セクション

アンチパターンを学んだ後は、以下のセクションも参照してください。

次のステップ

  1. まずは よくある間違いと対処法 から始めて、実践的なアンチパターンとその解決策を学びましょう。
  2. 学習後は アンチパターン回避チェックリスト で実際のコードをレビューしましょう。

重要: これらのアンチパターンは、実際のプロジェクトで頻繁に見られるものです。早い段階で理解することで、品質の高いRxJSコードを書けるようになります。

Released under the CC-BY-4.0 license.