Skip to content

リリースと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 📚

  • Kotlin 2.1.21(2.1.20から)
  • Ktor 3.2.3(3.1.3から)
  • Jetbrains Compose 1.8.2(1.8.0から)
  • AndroidX: Fragment 1.8.9, WorkManager 2.10.3, Lifecycle 2.9.3, Navigation 2.9.3
  • Testing: Robolectric 4.15.1, Benchmark 0.4.14
  • Build: 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

  • 設定 - 設定をラップするのに役立つKoinConfiguration API
  • スコープ - スコープのカテゴリに対する専用のスコープ型クオリファイアの新しいスコープアーキタイプを導入します。インスタンスの解決は、スコープカテゴリ(別名アーキタイプ)に対して行えるようになりました。
  • 機能オプション - Koin内の新しい機能の挙動を機能フラグとして設定するのに役立つ「機能オプション」。Koin設定のoptionsブロックでオプションを有効化できます。
kotlin
startKoin {
    options(
        // activate a new feature
        viewModelScopeFactory()
    )
}
  • コア - ResolutionExtensionがKoinを外部システムやリソースで解決するのに役立つ新しいCoreResolverを導入します(これはKtor DIの接続に役立ちます)。

koin-android

  • アップグレードされたライブラリ(androidx.appcompat:appcompat:1.7.0androidx.activity:activity-ktx:1.10.1)は、最小SDKレベルを14から21に引き上げる必要があります。
  • DSL - Activity/Fragment内でスコープを宣言するための新しいKoinモジュールDSL拡張機能activityScopeactivityRetainedScopefragmentScopeを追加しました。
  • スコープ関数 - また、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モジュールを宣言できるようにします。
kotlin
fun Application.customerDataModule() {
    koinModule {
        singleOf(::CustomerRepositoryImpl) bind CustomerRepository::class
    }
}
  • スコープ - Module.requestScope - Ktorリクエストスコープ内で定義を宣言することを可能にします(scope<RequestScope>を手動で宣言するのを避けます)。 注入されたスコープは、コンストラクタでApplicationCallを注入することも可能です。

koin-core-coroutines

  • モジュールDSL - モジュール設定を単一の構造にまとめるのに役立つ新しいModuleConfigurationを導入し、後でより適切に検証できるようにします。
kotlin
val m1 = module {
    single { Simple.ComponentA() }
}
val lm1 = lazyModule {
    single { Simple.ComponentB(get()) }
}
val conf = moduleConfiguration {
    modules(m1)
    lazyModules(lm1)
}
  • 設定DSL - Koinの設定でModuleConfigurationを使用してモジュールをロードできるようになりました。
kotlin
startKoin {
    moduleConfiguration {
        modules(m1)
        lazyModules(lm1)
    }
}

// or even
val conf = moduleConfiguration {
    modules(m1)
    lazyModules(lm1)
}

startKoin {
    moduleConfiguration(conf)
}

koin-test-coroutines

  • 新しいコルーチン関連のテストAPIを導入するために、新しいkoin-test-coroutines Koinモジュールを追加しました。
  • 拡張機能 - Verify APIを拡張し、moduleConfigurationを使用してKoin設定をチェックし、モジュールと遅延モジュールの混合設定を検証できるようにします。
kotlin
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を使用して、プロパティを注入されたパラメータまたは動的に提供されたものとしてタグ付けします。現在のところVerify APIで使用されていますが、将来的にはより軽量なDSL宣言に役立つ可能性があります。

Experimental 🚧

koin-core

  • Wasm - Kotlin 2.1.20 UUID生成の使用

koin-core-viewmodel

  • DSL - ViewModelスコープアーキタイプにスコープ指定されたコンポーネントを宣言するためのモジュールDSL拡張機能viewModelScopeを追加
  • スコープ関数 - ViewModel用のスコープを作成する関数viewModelScope()を追加しました(ViewModelクラスに紐付けられます)。このAPIは現在ViewModelScopeAutoCloseableを使用してAutoCloseable APIを使用し、スコープを宣言して閉じることができます。ViewModelスコープを手動で閉じる必要がなくなりました。
  • クラス - ScopeViewModelクラスを更新し、すぐに使用できるViewModelスコープクラスのサポートを提供します(スコープの作成と閉じを処理)。
  • 機能オプション - ViewModelのスコープによるコンストラクタViewModelインジェクションには、KoinオプションviewModelScopeFactoryの有効化が必要です。
kotlin
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を使用して、プロパティを注入されたパラメータまたは動的に提供されたものとしてタグ付けします。これにより、Verify APIでの複雑な宣言を回避できます。
kotlin
// 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-viewmodelScopeViewModelクラスを使用するようになりました。

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.uuid APIの恩恵を受けることができます。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
  • awaitAllStartJobsonKoinStartedisAllStartedJobsDone
  • waitAllStartJobsrunOnKoinStarted
  • KoinApplication.coroutinesEngine
  • Module.includes(lazy)
  • lazyModule()
  • KoinPlatformCoroutinesTools

Experimental 🚧

koin-test

  • ParameterTypeInjection - Verify APIのための動的なパラメータインジェクションを設計するのに役立つ新しいAPI

koin-androidx-startup

  • koin-androidx-startup - AndroidX Startupを使用してKoinを開始する新しい機能で、androidx.startup.Initializer APIを使用します。koin-androidx-startup内のすべてのAPIは実験的です。

koin-compose

  • rememberKoinModules - @Composableコンポーネントに基づいてKoinモジュールをロード/アンロード
  • rememberKoinScope - @Composableコンポーネントに基づいてKoinスコープをロード/アンロード
  • KoinScope - すべての下層のComposable子孫のためにKoinスコープをロード

Deprecation ⚠️

以下のAPIは非推奨となり、もはや使用すべきではありません。

  • koin-test

    • checkModulesのすべてのAPI。Verify APIに移行してください。
  • koin-android

    • koin-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-viewmodel

    • koin-coreの新しい一元化されたDSLを優先するViewModel DSL
    • 関数koinNavViewModelは非推奨となり、koinViewModelが推奨されます。

Breaking 💥

以下のAPIは、前回のマイルストーンでの非推奨化により削除されました。

NOTE

@KoinReflectAPIでアノテーションされたすべてのAPIは削除されました。

koin-core

  • ApplicationAlreadyStartedExceptionKoinApplicationAlreadyStartedException に名称変更されました。
  • KoinScopeComponent.closeScope() は内部的に使用されなくなったため削除されました。
  • 内部のResolutionContextInstanceContext を置き換えるために移動されました。
  • KoinPlatformTimeToolsTimermeasureDuration は削除され、代わりにKotlin Time APIを使用するようになりました。
  • KoinContextHandlerGlobalContext を優先して削除されました。

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を使用するためのsynchronized API

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(): KoinContextMutableGlobalContext を使用するようになりました。

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
  • parameterArrayOfparameterSetOf を用いたParameters APIの更新

koin-test

  • Verification API - モジュールに対してverifyを実行するのに役立ちます。

koin-android

  • ViewModelインジェクションのための内部実装
  • AndroidScopeComponent.onCloseScope() 関数コールバックを追加

koin-android-test

  • Verification API - モジュールに対してandroidVerify()を実行するのに役立ちます。

koin-androidx-compose

  • 新しいget()
  • 新しいgetViewModel()
  • 新しいスコープKoinActivityScopeKoinFragmentScope

koin-androidx-compose-navigation - ナビゲーション用の新しいモジュール

  • 新しいkoinNavViewModel()

koin-compose - Compose向けの新しいマルチプラットフォームAPI

  • koinInjectrememberKoinInject
  • KoinApplication

Experimental 🚧

koin-compose - Compose向けの新しい実験的なマルチプラットフォームAPI

  • rememberKoinModules
  • KoinScoperememberKoinScope

Deprecation ⚠️

koin-compose

  • get() 関数は、Lazy関数を避けつつinject() の使用を置き換えるもの
  • getViewModel() 関数は、Lazy関数を避けつつviewModel() 関数を置き換えるもの

Breaking 💥

koin-android

  • LifecycleScopeDelegate は削除されました。

koin-androidx-compose

  • getStateViewModelkoinViewModel を優先して削除されました。