13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HiltViewModelで始めるAndroidの依存性注入のお話

Posted at

はじめに

最近のAndroidアプリのアーキテクチャ設計において、依存性注入(DI)は必須のパターンとなっています。特に、ViewModelを使った設計ではDIがさらに重要な役割を果たします。Googleが提供するHiltは、AndroidのためのDIライブラリとしてこの問題をスマートに解決してくれます。
今回はHiltViewModelを使用して、ViewModelのDIを簡単に行う方法を紹介します。

Hiltとは?

Hiltは、DaggerをベースにしたAndroid用の依存性注入ライブラリです。設定が簡単で、アノテーションを利用するだけで依存性の管理が可能になります。
@HiltViewModelアノテーションを使用すると、ViewModelがHiltの管理下に入り、必要な依存関係がコンストラクタ経由で自動的に注入されます。
使用するメリットとしては以下のことが挙げられます。

  • ViewModelのテストが容易になること
  • 依存性の管理が明確になりとコードの可読性が向上すること
  • コンパイル時に依存性の解決を行うため、安全性が高いこと
  • 簡単に使用できること

アーキテクチャ図

サンプルとして、実際に業務で構築しているAndroidアプリのアーキテクチャ図の簡易版を置いておきます。
なんとなくのイメージがわかると思います。
android.drawio.png

実装方法

まず、プロジェクトの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の記事を投稿していこうと思っているので、読んでいただけたら嬉しいです。

参考記事

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?