参考

Hiltが安定版になり半年ほどが経ちました。試しにDaggerからHiltにマイグレーションしてみたところ、アプリケーションコードは割と簡単に移行できますが、モジュール毎など分割してマイグレーションするのがかなり難しく、一度にアプリ全体をHiltに書き換えるため、作業負担は大きいと思います。

さらにテストコードはそのままでは動かないので試行錯誤しました。HiltでFragmentのテストをする場合はDaggerで使用していたlaunchInContainerがHiltのテストに対応していないため、launchInHiltContainerを用意し、Fragmentを動かすための空のActivityも用意しないといけないため面倒です。

Hiltに関係したJetpackについても2022年1月時点ではalpha版であるため、Hiltにスムーズに移行できる体制はまだ整っていないと言えます。(androidx.hilt:hilt-lifecycle-viewmodelとandroidx.hilt:hilt-compiler)

Googleが公開しているAndroid Blueprintsのdev-hiltブランチではFragmentのテストは仮想または実機デバイスを必要としており、今まではJVM上でFragmentのユニットテストが可能でしたが、どちらかというとインテグレーションテストに近い意味合いのテストになっています。

テスト箇所Dagger使用時Hilt使用時
ViewModelユニットテストユニットテスト
Fragmentニットテストまたはインテグレーションテストインテグレーションテスト
単一Activity(複数Fragment)インテグレーションテストまたはUIテストインテグレーションテストまたはUIテスト
複数Activityやアプリ全体インテグレーションテストまたはUIテストインテグレーションテストまたはUIテスト

また今までFragmentやViewModelをテストする場合はモックやスタブしてテストしていましたが、HiltではFakeモジュールを作成し、本番モジュールと入れ替えてテストすることが基本となり、そういった部分でも移行コストが結構あると思います。

  • HiltのJetpackがまだalpha版(2022年1月時点)
  • Fragmentのユニットテストが書きにくい(launchInHiltContainerとActivityの用意)
  • 移行コストがそこそこあり、テストの移行が簡単ではない

以上3点より、Hilt移行はまだいいかなと思います。