Koinライブラリを扱う
KoinはDIをシンプルに導入できるライブラリ。 DI(Dependency Injection:依存性注入)は、クラスが依存するオブジェクトを外部から注入する設計パターンで、コードの疎結合化やテストの容易性が向上する。Koinは、設定の複雑なDaggerなどと比較して、非常に簡単に導入できるのが特長。
導入手順
- ライブラリの組み込み
Application
クラスの実装
1.ライブラリの組み込み
Koinライブラリをプロジェクトに追加する。app/build.gradle
(またはapp/build.gradle.kt
)のdependencies
に以下を記述する。
dependencies {
// KoinのAndroid向け基本モジュール
implementation("io.insert-koin:koin-android:3.4.2")
// 必要に応じて、ViewModelやComposeなどのモジュールも追加します。
}
2.Applicationクラスの実装
アプリ起動時にKoinのセットアップを行うため、カスタムの**Application
**クラスを実装する。
ここではDIしたいインターフェースとその実装クラス、および依存関係にある他のオブジェクト(例:RoomのDao)をKoinの**module
**に登録する。
class SampleApplication : Application() {
// 依存関係を定義するKoinモジュール
private val appModule = module {
// SampleRepositoryインターフェースに対して、SampleRepositoryImplを注入
// SampleRepositoryImplのコンストラクタに必要な引数(get())はKoinが解決します
single<SampleRepository> { SampleRepositoryImpl(get()) }
}
// RoomのDaoなど、他の依存関係もモジュールとして定義
private val daoModule = module {
single {
// Roomデータベースのビルド処理を定義
Room.databaseBuilder(
androidContext(), // androidContext()でApplicationContextを取得
Database::class.java,
DATABASE_NAME
).build().dao()
}
}
override fun onCreate() {
super.onCreate()
// Koinを起動し、モジュールを登録
startKoin {
androidContext(this@SampleApplication) // AndroidのContextを登録
modules(appModule, daoModule) // 定義したモジュールを登録
}
}
}
補足
- **
single
で登録すると、そのオブジェクトはアプリ内でシングルトン(単一のインスタンス)**として管理される。 - **
get()
**は、Koinが管理している依存関係から、必要なインスタンスを解決して取得するように指示する。
各機能へのアクセス
DIしたいクラス(例:Activity
、Fragment
、ViewModel
など)では、**by inject()
**デリゲートを使用して、必要なオブジェクトを簡単に注入(インジェクト)できる。
private val repository : SampleRepository by inject()
// これで、Koinに登録されたSampleRepositoryImplのインスタンスが利用可能になる
参考
最終更新: 2025.9.28