mcpField
A
android-di-hilt

android-di-hilt

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

android-di-hilt について

Android の Hilt による依存性注入を扱うエージェント向けスキルです。バインディング、コンポーネントのスコープ、モジュール境界、テスト時の置き換えを整理できます。

主な機能

  1. 01コンポーネントと依存関係のスコープ設計
  2. 02バインディングと注入方式の選択
  3. 03テスト用の置き換えとフェイクの設定
  4. 04モジュール所有境界の確認

活用シーン

  1. 01ViewModel への Repository 注入
  2. 02依存関係に適した Hilt スコープの選択
  3. 03テストでの依存関係の置き換え
  4. 04モジュール間バインディングの所有確認

インストール

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

$npx skills add https://github.com/krutikjain/android-agent-skills --skill android-di-hilt

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

同梱ファイル

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

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

詳細

Android DI Hilt

使用する場合

  • リクエストが Android Hilt のセットアップ、ViewModel へのリポジトリのインジェクション、Android での依存関係のスコープ設定に関する場合に、このスキルを使用します。
  • 主な目的:Hilt を使用して Android の依存性注入を構成し、スコープ、テスト時の置き換え、モジュールの所有境界を整えます。
  • コンポーネントの所有権、バインディング、スコープ、エントリーポイント、テストでの置き換えが難所となる場合に、このスキルを使用します。リクエストがネットワーキング API またはリデューサーの設計だけに関する場合は、代わりに関連するスキルを使用します。
  • 対応範囲が広がった場合は、次のスキルに引き継ぎます。
  • android-testing-unit
  • android-networking-retrofit-okhttp

ワークフロー

  1. まずインジェクションの境界を特定します。アプリ全体のシングルトン、アクティビティー保持、ViewModel、ワーカー、サービス、または未サポートのフレームワークコードからのエントリーポイントのいずれかです。
  2. バインドする対象を決めます。コンストラクターインジェクション、@Binds、@Provides、修飾子、マルチバインディング、またはアシストインジェクションです。
  3. 依存関係が所有者より長く存続したり、頻繁に再構築されたりしないよう、ライフタイムとスコープを明示的に一致させます。
  4. Hilt のテストモジュール、モジュールのアンインストール、または適切なコンポーネント境界でのフェイクを使った、テスト時の置き換え方法を確認します。
  5. 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 以外の作業をモジュールに埋め込まず、適切な担当に引き継いでいる。

公式リファレンス

コメント