android-rxjava-to-coroutines-migration について
android-rxjava-to-coroutines-migrationは、AndroidコードをRxJavaからKotlinコルーチンとFlowへ移行するスキルです。利用状況を先に調査し、段階的な変更でライフサイクル、ストリーム、リプレイ、スレッドの動作を保ちます。
主な機能
- 01RxJavaの型とオペレーターを調査
- 02単発処理をsuspend関数に対応
- 03ストリームとホット状態を慎重に移行
- 04Disposableをライフサイクル対応スコープに置換
- 05要確認のオペレーターを明示
活用シーン
- 01既存アプリの移行チェックリストを作成
- 02RepositoryとUIの段階的な変更を計画
- 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.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/generate_migration_checklist.pyrun_examples.shscan_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-upgradeandroid-coroutines-flow
ワークフロー
- API の表面を変更する前に、コードベースをスキャンして RxJava のインポート、基底型、サブジェクト、スケジューラーの使用箇所を確認します。
- 各使用箇所を、単発処理、ストリーム処理、ホットな状態、ホットなイベント、コールバックのブリッジ、またはバックプレッシャーの影響を受ける処理に分類します。
- まずリポジトリとドメインの API を置き換え、その後、UI レイヤーのサブスクリプションをライフサイクルに対応したコレクションへ移行します。
- スケジューラーとディスポーザブルの管理を、ディスパッチャー、スコープ、構造化並行性の所有権、および
repeatOnLifecycleなどのライフサイクルに対応したコレクションに置き換えます。 - すべてのチェーンを安全に自動変換できるかのように扱わず、演算子が曖昧な場合やカスタムブリッジについてはチェックリストを残します。
ガードレール
- 単発処理には
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
- https://developer.android.com/kotlin/coroutines
- https://developer.android.com/kotlin/flow
- https://developer.android.com/kotlin/coroutines/coroutines-best-practices
- https://developer.android.com/topic/libraries/architecture/coroutines
- https://developer.android.com/kotlin/flow/stateflow-and-sharedflow
- https://kotlinlang.org/docs/flow.html
コメント
Markdown 対応