mcpField
A
android-rxjava-to-coroutines-migration

android-rxjava-to-coroutines-migration

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

android-rxjava-to-coroutines-migration について

android-rxjava-to-coroutines-migrationは、AndroidコードをRxJavaからKotlinコルーチンとFlowへ移行するスキルです。利用状況を先に調査し、段階的な変更でライフサイクル、ストリーム、リプレイ、スレッドの動作を保ちます。

主な機能

  1. 01RxJavaの型とオペレーターを調査
  2. 02単発処理をsuspend関数に対応
  3. 03ストリームとホット状態を慎重に移行
  4. 04Disposableをライフサイクル対応スコープに置換
  5. 05要確認のオペレーターを明示

活用シーン

  1. 01既存アプリの移行チェックリストを作成
  2. 02RepositoryとUIの段階的な変更を計画
  3. 03Subject、リプレイ、スケジューラーの挙動を確認

インストール

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

$npx skills add https://github.com/krutikjain/android-agent-skills --skill android-rxjava-to-coroutines-migration

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

同梱ファイル

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

agents/
openai.yaml
references/
official-links.md
patterns.md
scenarios.md
scripts/
generate_migration_checklist.py
run_examples.sh
scan_rxjava_usage.py

詳細

Android RxJava からコルーチンへの移行

使用する場面

  • 次のような依頼でこのスキルを使用します:Android で RxJava からコルーチンへの移行、Android で Observable から Flow への移行、Android で Composite Disposable を置き換える。
  • 主な成果:ライフサイクルに安全に対応した置き換え方法を用いて、Android の RxJava コードを Kotlin コルーチンと Flow に移行します。
  • コードベースで引き続き Single、Observable、スケジューラー、またはディスポーザブルが公開されていて、suspend、Flow、StateFlow、または SharedFlow への移行が目的である場合に、このスキルを使用します。
  • 型のマッピング表と演算子の要注意項目チェックリストについては、references/patterns.md を参照してください。
  • 段階的な移行と、インベントリを最初に行うワークフローについては、references/scenarios.md を参照してください。
  • 対象範囲が広がる場合は、次のスキルに引き継ぎます:
  • android-modernization-upgrade
  • android-coroutines-flow

ワークフロー

  1. API の表面を変更する前に、コードベースをスキャンして RxJava のインポート、基底型、サブジェクト、スケジューラーの使用箇所を確認します。
  2. 各使用箇所を、単発処理、ストリーム処理、ホットな状態、ホットなイベント、コールバックのブリッジ、またはバックプレッシャーの影響を受ける処理に分類します。
  3. まずリポジトリとドメインの API を置き換え、その後、UI レイヤーのサブスクリプションをライフサイクルに対応したコレクションへ移行します。
  4. スケジューラーとディスポーザブルの管理を、ディスパッチャー、スコープ、構造化並行性の所有権、および repeatOnLifecycle などのライフサイクルに対応したコレクションに置き換えます。
  5. すべてのチェーンを安全に自動変換できるかのように扱わず、演算子が曖昧な場合やカスタムブリッジについてはチェックリストを残します。

ガードレール

  • 単発処理には suspend 関数、ストリームには Flow を優先します。すべてを無理に Flow にしないでください。
  • CompositeDisposable と手動のサブスクリプションチェーンを置き換える際は、ライフサイクル上の所有権を維持します。
  • 特に flatMap、switchMap、リプレイ、スレッドに関する前提など、人による確認が必要な演算子のセマンティクスを明示します。
  • コールドな Flow が同等だと決めつけず、StateFlow、SharedFlow、shareIn、または stateIn を使ってホットな状態とリプレイのセマンティクスを明示的に維持します。
  • 移行は動作を維持するリファクタリングとして扱い、無関係なビジネスロジックを再設計する機会にしないでください。

アンチパターン

  • suspend 関数のほうが適切な場合でも、すべての Rx 型を Flow に変換する。
  • サブジェクトの移行中に、リプレイ、バッファリング、またはホットストリームのセマンティクスを失う。
  • ディスパッチャーに移行した後、observeOn と subscribeOn に関する前提を文書化しない。
  • 段階的な検証を行わず、リポジトリ、ViewModel、UI の各レイヤーを一度に書き換える。

レビューの焦点

  • 型のマッピング:Single、Maybe、Completable、Observable、Flowable、および Subjects。
  • ホットとコールドのセマンティクス、リプレイの動作、バックプレッシャーへの期待。
  • ディスパッチャーの所有権、viewModelScope、ライフサイクルに応じたコレクション。
  • コルーチンのタイミング、キャンセル、ストリームのアサーションに関するテストへの影響。

例

代表的なケース
  • シナリオ:レガシーな RxJava のサンプルをスキャンし、リポジトリ、ViewModel、UI サブスクリプションの移行チェックリストを生成します。
  • コマンド:bash skills/android-rxjava-to-coroutines-migration/scripts/run_examples.sh
エッジケース
  • シナリオ:状態や単発イベントを変換する前に、サブジェクト、ディスポーザブル、スケジューラーの使用箇所を一覧化します。
  • コマンド:python3 skills/android-rxjava-to-coroutines-migration/scripts/scan_rxjava_usage.py examples/fixtures/rxjava-legacy-sample --json
失敗からの復旧
  • シナリオ:チェーンの一部で演算子の手動確認が必要な場合に、再現性のあるチェックリストを生成します。
  • コマンド:python3 skills/android-rxjava-to-coroutines-migration/scripts/generate_migration_checklist.py examples/fixtures/rxjava-legacy-sample

完了チェックリスト

  • コード変更を提案する前に、RxJava の型と演算子を一覧化しました。
  • 単発 API、ストリーム、ホットな状態、ホットなイベントを、適切なコルーチンのプリミティブにマッピングしました。
  • ライフサイクル上の所有権とディスパッチャーに関する前提を明確にしました。
  • 曖昧な演算子やブリッジのケースを、手動で対応するフォローアップ作業として記録しました。

Official References

コメント