SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門

Hiltの応用的なインジェクションとモジュール利用

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門 第18回

 本連載は、「Android Studio2で始めるアプリ開発入門」連載、および『Androidアプリ開発の教科書』の続編にあたる内容として、Jetpackを取り上げていきます。前回は、Hiltによる依存性注入(DI)の基礎を紹介しました。今回は、いよいよ最終回です。Hiltによる応用的なインジェクションの方法、およびモジュールの利用方法を紹介します。

インジェクションの別パターン

 本連載は、Android Jetpackを紹介しています。長らく続いた本連載も、今回が最終回です。

 前回、HiltによるDIの方法としてコンストラクタインジェクションを紹介しました。そのコンストラクタインジェクションが、HiltによるDIの基本です。

 今回は、この基本では対応できないパターンを2個紹介することから始めていきます。

 なお、今回のサンプルデータはGitHubから参照できます。

フィールドインジェクション

 まず、コンストラクタを独自定義できないクラスの場合についてです。アクティビティはその典型です。そこで、前回の図1のパターンからは外れますが、アクティビティからリポジトリを直接利用する場合のインジェクションのコードを紹介します。

 これは、Javaではリスト1、Kotlinではリスト2のコードとなります。

[リスト1]MainActivity.java
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
  @Inject
  MemoRepository _memoRepository;
    :
}
[リスト2]MainActivity.kt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
  @Inject lateinit var _memoRepository: MemoRepository
    :
}

 ここでのポイントは、フィールド/プロパティに@Injectアノテーションを付与することです。この仕組みを、フィールドインジェクションField Injection)と言います。

 ただし、該当フィールド/プロパティは、privateにしてはいけません。なぜならprivateだと外部から注入できなくなってしまうからです。また、Kotlinの場合はlateinit varとなります。

ViewModelのインジェクション

 次に、ViewModelのインジェクションです。前回の図1のパターンに話を戻すと、アクティビティ/フラグメントは、ViewModelに依存します。

 しかし、そもそもViewModelは直接newするわけではありません。JavaならばViewModelProviderによる生成コード、Kotlinならばby viewModels()による委譲プロパティとして生成します。

 そこで、ViewModelに関してはアクティビティ/フラグメント側での生成コードはそのままとして、ViewModelクラスに@HiltViewModelアノテーションを付与するだけで、問題なく注入されるようになります。

 そのため、Javaならばリスト3、Kotlinならばリスト4のコードとなります。

[リスト3]MainViewModel.java
@HiltViewModel
public class MainViewModel extends ViewModel {
    :
  @Inject
  public MainViewModel(…) {
    :
  }
    :
}
[リスト4]MainViewModel.kt
@HiltViewModel
class MainViewModel
  @Inject
  constructor(…) : ViewModel() {
    :
}

次のページ
Roomを利用する場合(1)

この記事は参考になりましたか?

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/23390 2026/02/27 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング