リリースとAPIアップグレードガイド
INFO
このページでは、Koinの主要なリリースごとに包括的な概要を提供し、フレームワークの進化を詳しく説明することで、アップグレードの計画と互換性の維持に役立てることができます。
各バージョンについて、ドキュメントは以下のセクションで構成されています。
Kotlin: リリースで使用されるKotlinのバージョンを指定し、言語の互換性を明確にし、最新のKotlin機能を利用できるようにします。New: 機能性と開発者エクスペリエンスを向上させるために新しく導入された機能と改善点を強調します。Experimental: 実験的としてマークされたAPIと機能を一覧表示します。これらは現在活発に開発中であり、コミュニティからのフィードバックに基づいて変更される可能性があります。Deprecated: 非推奨とマークされたAPIと機能を特定し、推奨される代替案に関するガイダンスとともに、将来の削除に備えるのに役立ちます。Breaking: 後方互換性を損なう可能性のある変更点を詳しく説明し、移行中に必要な調整を把握できるようにします。
この構造化されたアプローチは、各リリースにおける段階的な変更を明確にするだけでなく、Koinプロジェクトにおける透明性、安定性、継続的な改善への私たちのコミットメントを強化します。
詳細については、API安定性契約を参照してください。
4.1.1
NOTE
Kotlin 2.1.21 を使用
New 🎉
koin-compose-viewmodel-navigation
sharedKoinViewModelをオプションのnavGraphRouteパラメータで強化し、Compose Navigationのサポートを向上
koin-core
- コアリゾルバのパフォーマンス最適化 - 単一スコープの解決で不要なフラット化を回避
- リンクされたスコープID表示によるスコープデバッグの強化
Library Updates 📚
Kotlin2.1.21(2.1.20から)Ktor3.2.3(3.1.3から)Jetbrains Compose1.8.2(1.8.0から)AndroidX: Fragment 1.8.9, WorkManager 2.10.3, Lifecycle 2.9.3, Navigation 2.9.3Testing: Robolectric 4.15.1, Benchmark 0.4.14Build: Binary Validator 0.18.1, NMCP 1.1.0
Bug Fixes 🐛
koin-core
- 互換性エラーを引き起こしていたロガー制約を元に戻しました
LocalKoinApplication/LocalKoinScopeコンテキスト処理の改善により、Composeスコープの解決を修正
koin-build
- Maven Centralでの公開問題を修正
4.1.0
NOTE
Kotlin 2.1.20 を使用
New 🎉
koin-core
- 設定 - 設定をラップするのに役立つ
KoinConfigurationAPI - スコープ - スコープのカテゴリに対する専用のスコープ型クオリファイアの新しいスコープアーキタイプを導入します。インスタンスの解決は、スコープカテゴリ(別名アーキタイプ)に対して行えるようになりました。
- 機能オプション - Koin内の新しい機能の挙動を機能フラグとして設定するのに役立つ「機能オプション」。Koin設定の
optionsブロックでオプションを有効化できます。
startKoin {
options(
// activate a new feature
viewModelScopeFactory()
)
}- コア -
ResolutionExtensionがKoinを外部システムやリソースで解決するのに役立つ新しいCoreResolverを導入します(これはKtor DIの接続に役立ちます)。
koin-android
- アップグレードされたライブラリ(
androidx.appcompat:appcompat:1.7.0、androidx.activity:activity-ktx:1.10.1)は、最小SDKレベルを14から21に引き上げる必要があります。 - DSL - Activity/Fragment内でスコープを宣言するための新しいKoinモジュールDSL拡張機能
activityScope、activityRetainedScope、fragmentScopeを追加しました。 - スコープ関数 - また、
activityScope()、activityRetainedScope()、fragmentScope()API関数がスコープアーキタイプをトリガーするようになりました。
koin-androidx-compose
- Koin Compose MultiplatformおよびCompose 1.8 & Lifecycle 2.9すべてに準拠
koin-compose
- Compose 1.8 & Lifecycle 2.9に準拠
- 新関数 - Android Studio & IntelliJでの並行プレビューのレンダリングに役立つ
KoinApplicationPreview
koin-compose-viewmodel
- 親Activityをホストとして設定できるように
koinActivityViewModelを追加
koin-ktor
- マルチプラットフォーム - このモジュールは現在Kotlin KMP形式でコンパイルされています。マルチプラットフォームプロジェクトから
koin-ktorをターゲットにできます。 - マージ - 以前のkoin-ktor3モジュールはkoin-ktorにマージされました。
- 拡張機能 -
Application.koinModule { }およびApplication.koinModules()を導入し、Ktorモジュールに直接結合されたKoinモジュールを宣言できるようにします。
fun Application.customerDataModule() {
koinModule {
singleOf(::CustomerRepositoryImpl) bind CustomerRepository::class
}
}- スコープ -
Module.requestScope- Ktorリクエストスコープ内で定義を宣言することを可能にします(scope<RequestScope>を手動で宣言するのを避けます)。 注入されたスコープは、コンストラクタでApplicationCallを注入することも可能です。
koin-core-coroutines
- モジュールDSL - モジュール設定を単一の構造にまとめるのに役立つ新しい
ModuleConfigurationを導入し、後でより適切に検証できるようにします。
val m1 = module {
single { Simple.ComponentA() }
}
val lm1 = lazyModule {
single { Simple.ComponentB(get()) }
}
val conf = moduleConfiguration {
modules(m1)
lazyModules(lm1)
}- 設定DSL - Koinの設定で
ModuleConfigurationを使用してモジュールをロードできるようになりました。
startKoin {
moduleConfiguration {
modules(m1)
lazyModules(lm1)
}
}
// or even
val conf = moduleConfiguration {
modules(m1)
lazyModules(lm1)
}
startKoin {
moduleConfiguration(conf)
}koin-test-coroutines
- 新しいコルーチン関連のテストAPIを導入するために、新しい
koin-test-coroutinesKoinモジュールを追加しました。 - 拡張機能 -
VerifyAPIを拡張し、moduleConfigurationを使用してKoin設定をチェックし、モジュールと遅延モジュールの混合設定を検証できるようにします。
val conf = moduleConfiguration {
modules(m1)
lazyModules(lm1)
}
conf.verify()
// if you want Android types (koin-android-test)
conf.verify(extraTypes = androidTypes)koin-core-annotations
- アノテーション -
@InjectedParamまたは@Providedを使用して、プロパティを注入されたパラメータまたは動的に提供されたものとしてタグ付けします。現在のところVerifyAPIで使用されていますが、将来的にはより軽量なDSL宣言に役立つ可能性があります。
Experimental 🚧
koin-core
- Wasm - Kotlin 2.1.20 UUID生成の使用
koin-core-viewmodel
- DSL - ViewModelスコープアーキタイプにスコープ指定されたコンポーネントを宣言するためのモジュールDSL拡張機能
viewModelScopeを追加 - スコープ関数 - ViewModel用のスコープを作成する関数
viewModelScope()を追加しました(ViewModelクラスに紐付けられます)。このAPIは現在ViewModelScopeAutoCloseableを使用してAutoCloseableAPIを使用し、スコープを宣言して閉じることができます。ViewModelスコープを手動で閉じる必要がなくなりました。 - クラス -
ScopeViewModelクラスを更新し、すぐに使用できるViewModelスコープクラスのサポートを提供します(スコープの作成と閉じを処理)。 - 機能オプション - ViewModelのスコープによるコンストラクタViewModelインジェクションには、Koinオプション
viewModelScopeFactoryの有効化が必要です。
startKoin {
options(
// activate a new ViewModel scope creation
viewModelScopeFactory()
)
}
// will inject Session from MyScopeViewModel's scope
class MyScopeViewModel(val session: Session) : ViewModel()
module {
viewModelOf(::MyScopeViewModel)
viewModelScope {
scopedOf(::Session)
}
}koin-compose
- Compose関数 - マルチプラットフォームComposeエントリポイントを提案するために、新しい
KoinMultiplatformApplication関数を追加しました。
koin-core-viewmodel-navigation
- ナビゲーション拡張機能 - ナビゲーションの
NavbackEntryからViewModelインスタンスを再利用するためにsharedViewModelを追加
koin-test
- アノテーション - Koin設定検証APIの
Verifyは、nullable、lazy、およびリストパラメータのチェックに役立つようになりました。単に@InjectedParamまたは@Providedを使用して、プロパティを注入されたパラメータまたは動的に提供されたものとしてタグ付けします。これにより、VerifyAPIでの複雑な宣言を回避できます。
// now detected in Verify
class ComponentB(val a: ComponentA? = null)
class ComponentBParam(@InjectedParam val a: ComponentA)
class ComponentBProvided(@Provided val a: ComponentA)Deprecation ⚠️
koin-android
ScopeViewModelは非推奨となり、代わりにkoin-core-viewmodelのScopeViewModelクラスを使用するようになりました。
koin-compose
- Koinコンテキストが現在のデフォルトコンテキストで適切に準備されるため、ComposeコンテキストAPIは不要になりました。以下は非推奨であり、削除できます:
KoinContext
koin-androidx-compose
- Koinコンテキストが現在のデフォルトコンテキストで適切に準備されるため、Jetpack ComposeコンテキストAPIは不要になりました。以下は非推奨であり、削除できます:
KoinAndroidContext
koin-androidx-compose-navigation
- ライフサイクルライブラリの更新により、関数
koinNavViewModelは不要となり、koinViewModelに置き換えられます。
koin-core-viewmodel-navigation
- ライフサイクルライブラリの更新により、関数
koinNavViewModelは不要となり、koinViewModelに置き換えられます。
koin-ktor
- 拡張機能 -
Application.koinは非推奨となり、Application.koinModulesおよびApplication.koinModuleが推奨されます。
Breaking 💥
koin-android
- すべての古いState ViewModel APIは削除されました。
stateViewModel()、getStateViewModel()は、代わりにviewModel()を使用してください。getSharedStateViewModel()、sharedStateViewModel()は、代わりにviewModel()または共有インスタンスにはactivityViewModel()を使用してください。
koin-compose
- 古いCompose API関数は削除されました。
- 関数
inject()はkoinInject()に置き換えられ削除されました。 - 関数
getViewModel()はkoinViewModel()に置き換えられ削除されました。 - 関数
rememberKoinInject()はkoinInject()に移動されました。
- 関数
- 関数
rememberKoinApplicationは@KoinInternalAPIとしてマークされました。
4.0.4
NOTE
Kotlin 2.0.21 を使用
使用されているすべてのライブラリバージョンは libs.versions.toml にあります。
New 🎉
koin-core
KoinPlatformTools.generateId()- この新しいKotlinバージョンにより、新しいkotlin.uuid.uuidAPIの恩恵を受けることができます。KoinPlatformTools.generateId()Koin関数は、この新しいAPIを使用してプラットフォーム間で実際のUUIDを生成するようになりました。
koin-viewmodel
- Koin 4.0では、Google/Jetbrains KMP APIを共通化するViewModel DSL & APIが導入されました。コードベース全体での重複を避けるため、ViewModel APIは現在
koin-core-viewmodelおよびkoin-core-viewmodel-navigationプロジェクトに配置されています。 - ViewModel DSLのインポートは
org.koin.core.module.dsl.*です。
指定されたプロジェクトにおける以下のAPIは、現在安定版です。
koin-core-coroutines - すべてのAPIが現在安定版です
- すべての
lazyModules awaitAllStartJobs、onKoinStarted、isAllStartedJobsDonewaitAllStartJobs、runOnKoinStartedKoinApplication.coroutinesEngineModule.includes(lazy)lazyModule()KoinPlatformCoroutinesTools
Experimental 🚧
koin-test
ParameterTypeInjection-VerifyAPIのための動的なパラメータインジェクションを設計するのに役立つ新しいAPI
koin-androidx-startup
koin-androidx-startup-AndroidX Startupを使用してKoinを開始する新しい機能で、androidx.startup.InitializerAPIを使用します。koin-androidx-startup内のすべてのAPIは実験的です。
koin-compose
rememberKoinModules- @Composableコンポーネントに基づいてKoinモジュールをロード/アンロードrememberKoinScope- @Composableコンポーネントに基づいてKoinスコープをロード/アンロードKoinScope- すべての下層のComposable子孫のためにKoinスコープをロード
Deprecation ⚠️
以下のAPIは非推奨となり、もはや使用すべきではありません。
koin-testcheckModulesのすべてのAPI。VerifyAPIに移行してください。
koin-androidkoin-coreの新しい一元化されたDSLを優先するViewModel DSL- すべての状態ViewModel APIはエラーレベルで非推奨です。
stateViewModel()、getStateViewModel()は、代わりにviewModel()を使用してください。getSharedStateViewModel()、sharedStateViewModel()は、代わりにviewModel()または共有インスタンスにはactivityViewModel()を使用してください。
koin-compose
古いCompose API関数はエラーレベルで非推奨です。
- 関数
inject()はkoinInject()を優先して非推奨(エラーレベル)となりました。 - 関数
getViewModel()はkoinViewModel()を優先して非推奨(エラーレベル)となりました。 - 関数
rememberKoinInject()はkoinInject()を優先して非推奨(エラーレベル)となりました。
- 関数
koin-compose-viewmodelkoin-coreの新しい一元化されたDSLを優先するViewModel DSL- 関数
koinNavViewModelは非推奨となり、koinViewModelが推奨されます。
Breaking 💥
以下のAPIは、前回のマイルストーンでの非推奨化により削除されました。
NOTE
@KoinReflectAPIでアノテーションされたすべてのAPIは削除されました。
koin-core
ApplicationAlreadyStartedExceptionはKoinApplicationAlreadyStartedExceptionに名称変更されました。KoinScopeComponent.closeScope()は内部的に使用されなくなったため削除されました。- 内部の
ResolutionContextがInstanceContextを置き換えるために移動されました。 KoinPlatformTimeTools、Timer、measureDurationは削除され、代わりにKotlin Time APIを使用するようになりました。KoinContextHandlerはGlobalContextを優先して削除されました。
koin-android
- 関数
fun Fragment.createScope()は削除されました。 - ViewModelファクトリに関するすべてのAPI(主に内部的なもの)は、新しい内部構造のために再構築されました。
koin-compose
- 内部的に使用されなくなったため、
StableParametersDefinitionは削除されました。 - すべてのLazy ViewModel API(古い
viewModel())は削除されました。 - 内部的に使用されなくなったため、
rememberStableParametersDefinition()は削除されました。
3.5.6
NOTE
Kotlin 1.9.22 を使用
使用されているすべてのライブラリバージョンは libs.versions.toml にあります。
New 🎉
koin-core
KoinContextに以下の機能が追加されました。fun loadKoinModules(module: Module, createEagerInstances: Boolean = false)fun loadKoinModules(modules: List<Module>, createEagerInstances: Boolean = false)
koinApplication()関数は現在、複数の形式で使用可能です。koinApplication(createEagerInstances: Boolean = true, appDeclaration: KoinAppDeclaration? = null)koinApplication(appDeclaration: KoinAppDeclaration?)koinApplication(createEagerInstances: Boolean)
- 宣言スタイルを開くのに役立つ
KoinAppDeclaration - JS向けAPI Timeを使用するための
KoinPlatformTimeTools - iOS - Touchlab Lockable APIを使用するための
synchronizedAPI
koin-androidx-compose
- Android環境から現在のKoinコンテキストにバインドするための新しい
KoinAndroidContext
koin-compose
- 現在のデフォルトコンテキストで新しい
KoinContextコンテキストを起動
koin-ktor
- 現在、Ktorインスタンスに隔離されたコンテキストを使用します(デフォルトコンテキストの代わりに
Application.getKoin()を使用)。 - Koinプラグインに新しいモニタリング機能が導入されました。
- Ktorリクエストにスコープインスタンスを許可する
RequestScope
Experimental 🚧
koin-android
ViewModelScopeはViewModelスコープ向けの実験的なAPIを導入します。
koin-core-coroutines - バックグラウンドでモジュールをロードするための新しいAPIを導入
Deprecation ⚠️
koin-android
getLazyViewModelForClass()APIは非常に複雑であり、デフォルトのグローバルコンテキストを呼び出します。Android/Fragment APIにこだわることをお勧めします。resolveViewModelCompat()はresolveViewModel()を優先して非推奨となりました。
koin-compose
- 関数
get()とinject()はkoinInject()を優先して非推奨となりました。 - 関数
getViewModel()はkoinViewModel()を優先して非推奨となりました。 - 関数
rememberKoinInject()はkoinInject()を優先して非推奨となりました。
Breaking 💥
koin-core
Koin.loadModules(modules: List<Module>, allowOverride: Boolean = true, createEagerInstances : Boolean = false)はKoin.loadModules(modules: List<Module>, allowOverride: Boolean = true)を置き換えます。- プロパティ
KoinExtension.koinは関数KoinExtension.onRegister()に移動されました。 - iOS -
internal fun globalContextByMemoryModel(): KoinContextはMutableGlobalContextを使用するようになりました。
koin-compose
- 関数
KoinApplication(moduleList: () -> List<Module>, content: @Composable () -> Unit)はKoinContextおよびKoinAndroidContextを優先して削除されました。
3.4.3
NOTE
Kotlin 1.8.21 を使用
New 🎉
koin-core
- Koinのエクステンションエンジンを記述するのに役立つ新しいExtensionManager API -
ExtensionManager+KoinExtension parameterArrayOfとparameterSetOfを用いたParameters APIの更新
koin-test
VerificationAPI - モジュールに対してverifyを実行するのに役立ちます。
koin-android
- ViewModelインジェクションのための内部実装
AndroidScopeComponent.onCloseScope()関数コールバックを追加
koin-android-test
VerificationAPI - モジュールに対してandroidVerify()を実行するのに役立ちます。
koin-androidx-compose
- 新しい
get() - 新しい
getViewModel() - 新しいスコープ
KoinActivityScope、KoinFragmentScope
koin-androidx-compose-navigation - ナビゲーション用の新しいモジュール
- 新しい
koinNavViewModel()
koin-compose - Compose向けの新しいマルチプラットフォームAPI
koinInject、rememberKoinInjectKoinApplication
Experimental 🚧
koin-compose - Compose向けの新しい実験的なマルチプラットフォームAPI
rememberKoinModulesKoinScope、rememberKoinScope
Deprecation ⚠️
koin-compose
get()関数は、Lazy関数を避けつつinject()の使用を置き換えるものgetViewModel()関数は、Lazy関数を避けつつviewModel()関数を置き換えるもの
Breaking 💥
koin-android
LifecycleScopeDelegateは削除されました。
koin-androidx-compose
getStateViewModelはkoinViewModelを優先して削除されました。
