はじめに
最近のAndroidアプリのアーキテクチャ設計において、依存性注入(DI)は必須のパターンとなっています。特に、ViewModelを使った設計ではDIがさらに重要な役割を果たします。Googleが提供するHiltは、AndroidのためのDIライブラリとしてこの問題をスマートに解決してくれます。
今回はHiltViewModelを使用して、ViewModelのDIを簡単に行う方法を紹介します。
Hiltとは?
Hiltは、DaggerをベースにしたAndroid用の依存性注入ライブラリです。設定が簡単で、アノテーションを利用するだけで依存性の管理が可能になります。
@HiltViewModel
アノテーションを使用すると、ViewModelがHiltの管理下に入り、必要な依存関係がコンストラクタ経由で自動的に注入されます。
使用するメリットとしては以下のことが挙げられます。
- ViewModelのテストが容易になること
- 依存性の管理が明確になりとコードの可読性が向上すること
- コンパイル時に依存性の解決を行うため、安全性が高いこと
- 簡単に使用できること
アーキテクチャ図
サンプルとして、実際に業務で構築しているAndroidアプリのアーキテクチャ図の簡易版を置いておきます。
なんとなくのイメージがわかると思います。
実装方法
まず、プロジェクトのbuild.gradle
にHiltの依存性を追加します。
// hilt-android-gradle-plugin
// See https://developer.android.com/training/dependency-injection/hilt-android?hl=ja
implementation("com.google.dagger:hilt-android:2.50")
次にApplication.ktに@HiltAndroidApp
アノテーションをつけます。
@HiltAndroidApp
class MyApplication : Application() {
// ...
}
ViewModelに@HiltViewModel
アノテーションを付け、依存関係をコンストラクタで注入します。
class MainViewModel @Inject constructor(
private val repository: MainRepository
) : ViewModel() {
// ...
}
使用する際は、@Composal
からは以下のように呼び出します。
@Composable
fun MyScreen(
viewModel: MainViewModel = hiltViewModel(),
) {
// ...
}
終わりに
上記のようにHiltViewModelを使うことで、AndroidアプリにおけるDIが簡単に実装できます。コードが簡単になると、保守性やテストのしやすさも向上するのでいいことづくめですよね。この記事が誰かのAndroidアプリのコードを綺麗にすることを願ってます。
これからもGoやKotlinの記事を投稿していこうと思っているので、読んでいただけたら嬉しいです。
参考記事