🔰 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 などを意識する |