🔰 Hiltとは?
**Hilt(ヒルト)**は、Google が公式に提供する Android 専用の DI(依存性注入)フレームワークです。
内部では Dagger2 をベースにしていますが、「Activityのスコープ」や「ViewModelへの注入」など、Android特有の構造に最適化されているのが特徴です。
Java で Spring Framework を使ったことがある方は、@Autowired や @Component を使った DI をイメージしてもらうと近いです。
🛠 Hiltの導入ステップ(基本の流れ)
1. 依存関係を追加
build.gradle (app) に以下を追加します:
plugins {
id 'dagger.hilt.android.plugin'
}
dependencies {
implementation "com.google.dagger:hilt-android:2.x"
kapt "com.google.dagger:hilt-compiler:2.x"
}
2.xには最新版のバージョンを指定します。
2. Applicationクラスにアノテーションを付ける
@HiltAndroidApp
public class MyApp extends Application {
}これにより、アプリ全体で Hilt の DI コンテナが使えるようになります。
3. 依存を注入するクラスに @AndroidEntryPoint を付ける
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
TaskRepository repository;
}このアノテーションを使うことで、Hilt がこのクラスに必要な依存関係を自動的に注入します。
4. 依存性を提供するクラス(モジュール)を作成
@Module
@InstallIn(SingletonComponent.class)
public class AppModule {
@Provides
public static TaskRepository provideTaskRepository() {
return new TaskRepository();
}
}@Module:依存性を提供するクラスに付ける@Provides:戻り値を依存オブジェクトとして提供する
⚠ 注意点とハマりどころ
1. Hilt対象のクラスは必ず@AndroidEntryPointが必要
- これを忘れると
xxx is not annotated with @AndroidEntryPointのようなエラーになります。
2. ViewModelへのDIにはHiltViewModelを使う
@HiltViewModel
public class MainViewModel extends ViewModel {
private final TaskRepository repository;
@Inject
public MainViewModel(TaskRepository repository) {
this.repository = repository;
}
}ViewModel を使う側(Activityなど):
viewModel = new ViewModelProvider(this).get(MainViewModel.class);Hilt の DI は、ViewModel のライフサイクルも意識して設計されています。
3. カスタムクラスやライブラリの注入は要注意
- Retrofit や Room などの外部ライブラリも DI 対象にできますが、スコープやインスタンス生成のタイミングには注意が必要です。
@Singletonや@ActivityRetainedScopedなど、スコープの選択を誤るとバグにつながりやすいです。
4. kapt(Kotlin Annotation Processing Tool)を使うことに注意
- Javaプロジェクトでも
kaptが必要になることがあり、ビルド設定が少し複雑になることがあります。
✅ まとめ
| 特徴 | 内容 |
|---|---|
| Androidに最適化されたDI | Activity / Fragment / ViewModelに自然に注入可能 |
| Dagger2より簡単 | アノテーションベースで最小限の設定 |
| スコープに注意が必要 | Singleton, ActivityScoped などを意識する |
