Skip to content

RxJSアンチパターン集 ​

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

このセクションの目的 ​

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

アンチパターン一覧 ​

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

🔴 重大な問題 ​

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

パターン問題影響
Subject の外部公開Subject をそのまま公開し、外部から next() を呼べる状態にする状態管理の予測不可能性、デバッグ困難
ネストした subscribesubscribe の中でさらに subscribe を呼ぶコールバック地獄、エラー処理の複雑化
状態管理フラグの乱立17個のbooleanフラグで状態を管理、命令型思考の残存可読性低下、保守困難、バグの温床
subscribe内のif文ネストsubscribe 内での複雑な条件分岐(3つ以上のネスト)可読性低下、テスト困難、宣言的思想に反する
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.