android-di-hilt について
Android の Hilt による依存性注入を扱うエージェント向けスキルです。バインディング、コンポーネントのスコープ、モジュール境界、テスト時の置き換えを整理できます。
主な機能
- 01コンポーネントと依存関係のスコープ設計
- 02バインディングと注入方式の選択
- 03テスト用の置き換えとフェイクの設定
- 04モジュール所有境界の確認
活用シーン
- 01ViewModel への Repository 注入
- 02依存関係に適した Hilt スコープの選択
- 03テストでの依存関係の置き換え
- 04モジュール間バインディングの所有確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-di-hiltインストール後、Claude Code で/android-di-hiltを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh詳細
Android DI Hilt
使用する場合
- リクエストが Android Hilt のセットアップ、ViewModel へのリポジトリのインジェクション、Android での依存関係のスコープ設定に関する場合に、このスキルを使用します。
- 主な目的:Hilt を使用して Android の依存性注入を構成し、スコープ、テスト時の置き換え、モジュールの所有境界を整えます。
- コンポーネントの所有権、バインディング、スコープ、エントリーポイント、テストでの置き換えが難所となる場合に、このスキルを使用します。リクエストがネットワーキング API またはリデューサーの設計だけに関する場合は、代わりに関連するスキルを使用します。
- 対応範囲が広がった場合は、次のスキルに引き継ぎます。
android-testing-unitandroid-networking-retrofit-okhttp
ワークフロー
- まずインジェクションの境界を特定します。アプリ全体のシングルトン、アクティビティー保持、ViewModel、ワーカー、サービス、または未サポートのフレームワークコードからのエントリーポイントのいずれかです。
- バインドする対象を決めます。コンストラクターインジェクション、
@Binds、@Provides、修飾子、マルチバインディング、またはアシストインジェクションです。 - 依存関係が所有者より長く存続したり、頻繁に再構築されたりしないよう、ライフタイムとスコープを明示的に一致させます。
- Hilt のテストモジュール、モジュールのアンインストール、または適切なコンポーネント境界でのフェイクを使った、テスト時の置き換え方法を確認します。
- DI グラフの所有権を正しく定めてから、API 固有またはアーキテクチャに関する質問を引き継ぎます。
ガードレール
- 自分たちが所有するアプリコードでは、コンストラクターインジェクションを優先します。
- 修飾子とスコープアノテーションは意図的に使用します。曖昧なバインディングは利便性ではなく、グラフ上の問題の兆候です。
- Hilt モジュールは、設定対象の所有境界の近くに配置します。
- テスト時の置き換えは後付けではなく、設計の一部として扱います。
アンチパターン
- スコープに関する疑問を解消するために、すべてを
@Singletonにする。 - コンストラクターインジェクションで十分な場合に、巨大な
@Providesメソッドの中にビジネスロジックの構築を隠す。 - 複数のモジュールにまたがる無関係なバインディングを、Hilt モジュールに詰め込む。
- DI グラフの所有権とアプリのアーキテクチャ上の所有権を混同する。
レビューの重点項目
- コンポーネントとスコープの整合性。
- バインディング方式と修飾子の明確さ。
- 未サポートのエントリーポイントをつなぐ方法と、テスト時の置き換え戦略。
- 機能コードとコアコードにまたがるモジュールの所有境界。
例
期待されるケース
- シナリオ:OrbitTasks のリポジトリとディスパッチャーを、明確な Hilt スコープでインジェクトします。
- コマンド:
cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
エッジケース
- シナリオ:XML フィクスチャ内の依存関係をフェイクに置き換え、決定論的なテストを行います。
- コマンド:
cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
障害からの復旧
- シナリオ:DI 固有のプロンプトを検出し、アーキテクチャの整理やネットワーキングの話題へ逸れるのを防ぎます。
- コマンド:
python3 scripts/eval_triggers.py --skill android-di-hilt
完了チェックリスト
- コンポーネントのライフタイムが依存関係のライフタイムと一致している。
- バインディング方式が明確で、テスト可能である。
- テスト時の置き換えまたはフェイクを、適切なグラフ境界で計画している。
- DI 以外の作業をモジュールに埋め込まず、適切な担当に引き継いでいる。
公式リファレンス
- https://developer.android.com/training/dependency-injection/hilt-android
- https://developer.android.com/training/dependency-injection/hilt-testing
- https://developer.android.com/training/dependency-injection/hilt-multi-module
- https://developer.android.com/topic/libraries/architecture/viewmodel
- https://developer.android.com/training/dependency-injection/manual
コメント
Markdown 対応