Skip to content

Koin アノテーション一覧

このドキュメントは、すべての Koin アノテーション、そのパラメータ、動作、および使用例の包括的な一覧を提供します。

目次


定義アノテーション

@Single

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: Koin において型または関数を single(シングルトン)定義として宣言します。単一のインスタンスが作成され、アプリケーション全体で共有されます。

パラメータ:

  • binds: Array<KClass<*>> = [Unit::class] - この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。
  • createdAtStart: Boolean = false - true の場合、Koin の開始時にインスタンスが作成されます。

動作: すべての依存関係はコンストラクタ注入によって満たされます。

例:

kotlin
@Single
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
single { MyClass(get()) }

明示的なバインドを使用する場合:

kotlin
@Single(binds = [MyInterface::class])
class MyClass(val d : MyDependency) : MyInterface

開始時に作成する場合:

kotlin
@Single(createdAtStart = true)
class MyClass(val d : MyDependency)

@Factory

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: Koin において型または関数を factory 定義として宣言します。リクエストされるたびに新しいインスタンスが作成されます。

パラメータ:

  • binds: Array<KClass<*>> = [Unit::class] - この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。

動作: すべての依存関係はコンストラクタ注入によって満たされます。リクエストごとに新しいインスタンスが作成されます。

例:

kotlin
@Factory
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
factory { MyClass(get()) }

@Scoped

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: Koin において型または関数を scoped 定義として宣言します。@Scope アノテーションと組み合わせて使用する必要があります。インスタンスは特定のスコープ内で共有されます。

パラメータ:

  • binds: Array<KClass<*>> = [Unit::class] - この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。

動作: 定義されたスコープの生存期間(ライフタイム)内で存続するスコープ付きインスタンスを作成します。

例:

kotlin
@Scope(MyScope::class)
@Scoped
class MyClass(val d : MyDependency)

参照: @Scope


スコープアノテーション

@Scope

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: クラスを Koin スコープ内で宣言します。スコープ名は値(クラス)または名前(文字列)のいずれかで記述されます。デフォルトでは scoped 定義を宣言します。明示的なバインドのために @Scoped, @Factory, @KoinViewModel アノテーションで上書きすることができます。

パラメータ:

  • value: KClass<*> = Unit::class - スコープクラスの値
  • name: String = "" - スコープ文字列の値

動作: 指定されたスコープ型または名前に紐付けられたスコープ定義を作成します。

クラスを使用した例:

kotlin
@Scope(MyScope::class)
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
scope<MyScope> {
    scoped { MyClass(get()) }
}

文字列名を使用した例:

kotlin
@Scope(name = "my_custom_scope")
class MyClass(val d : MyDependency)

@ViewModelScope

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: ViewModelScope という Koin スコープ内でクラスを宣言します。これは、ViewModel のライフサイクル内で存続すべきコンポーネントのためのスコープアーキタイプです。

パラメータ: なし

動作:viewModelScope 内にスコープ付き定義を作成します。

例:

kotlin
@ViewModelScope
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
viewModelScope {
    scoped { MyClass(get()) }
}

使用法: タグ付けされたクラスは、ViewModel および viewModelScope 関数と共に使用してスコープを有効にすることを意図しています。


@ActivityScope

パッケージ: org.koin.android.annotation

ターゲット: CLASS, FUNCTION

説明: Activity という Koin スコープ内でクラスを宣言します。

パラメータ: なし

動作:activityScope 内にスコープ付き定義を作成します。

例:

kotlin
@ActivityScope
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
activityScope {
    scoped { MyClass(get()) }
}

使用法: タグ付けされたクラスは、Activity および activityScope 関数と共に使用してスコープを有効にすることを意図しています。


@ActivityRetainedScope

パッケージ: org.koin.android.annotation

ターゲット: CLASS, FUNCTION

説明: Activity という Koin スコープ内でクラスを宣言しますが、設定変更(configuration changes)をまたいで保持されます。

パラメータ: なし

動作:activityRetainedScope 内にスコープ付き定義を作成します。

例:

kotlin
@ActivityRetainedScope
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
activityRetainedScope {
    scoped { MyClass(get()) }
}

使用法: タグ付けされたクラスは、Activity および activityRetainedScope 関数と共に使用してスコープを有効にすることを意図しています。


@FragmentScope

パッケージ: org.koin.android.annotation

ターゲット: CLASS, FUNCTION

説明: Fragment という Koin スコープ内でクラスを宣言します。

パラメータ: なし

動作:fragmentScope 内にスコープ付き定義を作成します。

例:

kotlin
@FragmentScope
class MyClass(val d : MyDependency)

生成される Koin DSL:

kotlin
fragmentScope {
    scoped { MyClass(get()) }
}

使用法: タグ付けされたクラスは、Fragment および fragmentScope 関数と共に使用してスコープを有効にすることを意図しています。


@ScopeId

パッケージ: org.koin.core.annotation

ターゲット: VALUE_PARAMETER

説明: クラスのコンストラクタまたは関数のパラメータにアノテーションを付け、特定のスコープ ID を持つ指定されたスコープからの解決を要求します。

パラメータ:

  • value: KClass<*> = Unit::class - スコープ型
  • name: String = "" - スコープ文字列識別子

動作: 型または名前によって識別される特定のスコープから依存関係を解決します。

文字列名を使用した例:

kotlin
@Factory
class MyClass(@ScopeId(name = "my_scope_id") val d : MyDependency)

生成される Koin DSL:

kotlin
factory { MyClass(getScope("my_scope_id").get()) }

型を使用した例:

kotlin
@Factory
class MyClass(@ScopeId(MyScope::class) val d : MyDependency)

ViewModel および Android 固有のアノテーション

@KoinViewModel

パッケージ: org.koin.android.annotation

ターゲット: CLASS, FUNCTION

説明: Koin 定義用の ViewModel アノテーションです。Koin において型または関数を viewModel 定義として宣言します。

プラットフォーム・サポート:

  • ✅ Android
  • ✅ Kotlin Multiplatform (KMP)
  • ✅ Compose Multiplatform (CMP)

パラメータ:

  • binds: Array<KClass<*>> = [] - この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。

動作: すべての依存関係はコンストラクタ注入によって満たされます。Koin によって管理される ViewModel インスタンスを作成します。Compose Multiplatform を使用する場合、Android、iOS、デスクトップ、および Web を含むすべてのプラットフォームで動作します。

例 (Android/CMP):

kotlin
@KoinViewModel
class MyViewModel(val d : MyDependency) : ViewModel()

例 (KMP/CMP shared):

kotlin
@KoinViewModel
class SharedViewModel(
    val repository: Repository,
    val analytics: Analytics
) : ViewModel()

生成される Koin DSL:

kotlin
viewModel { MyViewModel(get()) }

@KoinWorker

パッケージ: org.koin.android.annotation

ターゲット: CLASS, FUNCTION

説明: Koin 定義用の Worker アノテーションです。WorkManager のワーカーとして型を worker 定義として宣言します。

パラメータ:

  • binds: Array<KClass<*>> = [] - この定義に明示的にバインドする型。

動作: Android WorkManager 連携用のワーカー定義を作成します。

例:

kotlin
@KoinWorker
class MyWorker() : Worker()

クオリファイア(Qualifier)アノテーション

@Named

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION, VALUE_PARAMETER

説明: 指定された定義にクオリファイアを定義します。StringQualifier("...") または型ベースのクオリファイアを生成します。

パラメータ:

  • value: String = "" - 文字列クオリファイア
  • type: KClass<*> = Unit::class - クラスクオリファイア

動作: 同じ型の複数の定義を区別するために使用されます。

文字列を使用した例:

kotlin
@Single
@Named("special")
class MyClass(val d : MyDependency)

パラメータでの使用法:

kotlin
@Single
class Consumer(@Named("special") val myClass: MyClass)

型を使用した例:

kotlin
@Single
@Named(type = MyType::class)
class MyClass(val d : MyDependency)

@Qualifier

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION, VALUE_PARAMETER

説明: 指定された定義にクオリファイアを定義します。@Named と似ていますが、パラメータの優先順位が逆になっています。

パラメータ:

  • value: KClass<*> = Unit::class - クラスクオリファイア
  • name: String = "" - 文字列クオリファイア

動作: 同じ型の複数の定義を区別するために使用されます。

例:

kotlin
@Single
@Qualifier(name = "special")
class MyClass(val d : MyDependency)

プロパティアノテーション

@Property

パッケージ: org.koin.core.annotation

ターゲット: VALUE_PARAMETER

説明: コンストラクタのパラメータまたは関数のパラメータにアノテーションを付け、Koin プロパティとして解決するようにします。

パラメータ:

  • value: String - プロパティ名

動作: 依存関係の注入ではなく、Koin プロパティからパラメータ値を解決します。

例:

kotlin
@Factory
class MyClass(@Property("name") val name : String)

生成される Koin DSL:

kotlin
factory { MyClass(getProperty("name")) }

デフォルト値を使用する場合:

kotlin
@PropertyValue("name")
val defaultName = "MyName"

@Factory
class MyClass(@Property("name") val name : String)

生成される Koin DSL:

kotlin
factory { MyClass(getProperty("name", defaultName)) }

@PropertyValue

パッケージ: org.koin.core.annotation

ターゲット: FIELD

説明: プロパティのデフォルト値となるフィールド値にアノテーションを付けます。

パラメータ:

  • value: String - プロパティ名

動作: プロパティが見つからない場合に使用できるプロパティのデフォルト値を定義します。

例:

kotlin
@PropertyValue("name")
val defaultName = "MyName"

@Factory
class MyClass(@Property("name") val name : String)

生成される Koin DSL:

kotlin
factory { MyClass(getProperty("name", defaultName)) }

モジュールおよびアプリケーションアノテーション

@Module

パッケージ: org.koin.core.annotation

ターゲット: CLASS

説明: Koin モジュール内の定義を収集しやすくするためのクラスアノテーションです。各関数に Koin 定義アノテーションを付けることができます。

パラメータ:

  • includes: Array<KClass<*>> = [] - インクルードするモジュールクラス
  • createdAtStart: Boolean = false - true の場合、モジュールインスタンスが開始時に作成されます

動作: モジュール内のすべてのアノテーション付き関数およびクラスを収集します。

例:

kotlin
@Module
class MyModule {
    @Single
    fun myClass(d : MyDependency) = MyClass(d)
}

生成される Koin DSL:

kotlin
val MyModule.module = module {
    val moduleInstance = MyModule()
    single { moduleInstance.myClass(get()) }
}

インクルードを使用する場合:

kotlin
@Module(includes = [OtherModule::class])
class MyModule {
    // 定義
}

@ComponentScan

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FIELD

説明: Koin 定義アノテーションで宣言された定義を収集します。現在のパッケージまたは明示的なパッケージ名をスキャンします。

パラメータ:

  • value: vararg String = [] - スキャンするパッケージ(glob パターンをサポート)

動作: 指定されたパッケージ内のアノテーション付きクラスをスキャンします。正確なパッケージ名と glob パターンの両方をサポートします。

Glob パターンのサポート:

  1. 正確なパッケージ名(ワイルドカードなし):

    • com.example.service - パッケージとそのすべてのサブパッケージをスキャンします(com.example** と等価)
  2. ルートを含むマルチレベルスキャン:

    • com.example** - com.example とそのすべてのサブパッケージをスキャンします
  3. ルートを除くマルチレベルスキャン:

    • com.example.** - com.example のサブパッケージのみをスキャンし、ルートは除外します
  4. シングルレベルのワイルドカード:

    • com.example.*.service - 正確に 1 レベルに一致します(例: com.example.user.service
  5. 組み合わせたワイルドカード:

    • com.**.service.*data - 複雑なパターンマッチング
    • com.*.service.** - パターンに合致するサブパッケージをスキャン

例 - 現在のパッケージをスキャン:

kotlin
@ComponentScan
class MyApp

例 - 特定のパッケージをスキャン:

kotlin
@ComponentScan("com.example.services", "com.example.repositories")
class MyApp

例 - glob パターンを使用:

kotlin
@ComponentScan("com.example.**", "org.app.*.services")
class MyApp

@Configuration

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FIELD

説明: @Module クラスに適用され、それを 1 つ以上の構成(タグ/フレーバー)に関連付けます。

パラメータ:

  • value: vararg String = [] - 構成名

動作: 条件付きロードのために、モジュールを構成(Configuration)ごとにグループ化できます。

デフォルト構成:

kotlin
@Module
@Configuration
class MyModule

このモジュールは "default" 構成の一部です。

複数の構成:

kotlin
@Module
@Configuration("prod", "test")
class MyModule

このモジュールは "prod" と "test" の両方の構成で使用可能です。

デフォルトを含める場合:

kotlin
@Module
@Configuration("default", "test")
class MyModule

default と test の構成で使用可能です。

注: @Configuration("default")@Configuration と同等です。


@KoinApplication

パッケージ: org.koin.core.annotation

ターゲット: CLASS

説明: クラスを Koin アプリケーションのエントリポイントとしてタグ付けします。startKoin() または koinApplication() 関数を使用して Koin アプリケーションのブートストラップを生成します。

パラメータ:

  • configurations: Array<String> = [] - スキャンする構成名のリスト
  • modules: Array<KClass<*>> = [Unit::class] - 構成以外にロードするモジュールのリスト

動作: 構成とインクルードされたモジュールをスキャンするブートストラップ関数を生成します。

例 - デフォルト構成:

kotlin
@KoinApplication
class MyApp

生成される関数:

kotlin
MyApp.startKoin()
MyApp.koinApplication()

例 - 特定の構成:

kotlin
@KoinApplication(configurations = ["default", "prod"])
class MyApp

例 - モジュールを指定:

kotlin
@KoinApplication(
    configurations = ["default"],
    modules = [CoreModule::class, ApiModule::class]
)
class MyApp

カスタム構成での使用法:

kotlin
MyApp.startKoin {
    printLogger()
    // 追加の構成
}

モニタリングアノテーション

@Monitor

パッケージ: org.koin.core.annotation

ターゲット: CLASS, FUNCTION

説明: Koin の公式ツールプラットフォームである Kotzilla Platform を通じて、自動モニタリングおよびパフォーマンス追跡を行うためのクラスまたは関数をマークします。

パラメータ: なし

動作:

  • クラスに適用した場合: すべてのパブリックメソッド呼び出しを監視する Koin プロキシを生成します。
  • 関数に適用した場合: Koin 管理コンポーネント内の特定のメソッドを監視します。
  • パフォーマンス指標、エラー率、使用パターンを自動的にキャプチャします。
  • リアルタイム分析のためにデータを Kotzilla ワークスペースに送信します。

要件:

  • implementation 'io.kotzilla:kotzilla-core:latest.version'
  • 有効な Kotzilla Platform アカウントと API キー

例:

kotlin
@Monitor
class UserService(private val userRepository: UserRepository) {
    fun findUser(id: String): User? = userRepository.findById(id)
}

リソース:

導入: Kotzilla 1.2.1 以降


メタアノテーション(内部用)

これらのアノテーションは、Koin コンパイラおよびコード生成による内部使用のみを目的としています。

@ExternalDefinition

パッケージ: org.koin.meta.annotations

ターゲット: CLASS, FIELD, FUNCTION

説明: 生成されたパッケージ内でのコンポーネント検出のための内部用途。

パラメータ:

  • value: String = "" - 宣言された定義のパッケージ

@MetaDefinition

パッケージ: org.koin.meta.annotations

ターゲット: CLASS, FUNCTION, PROPERTY

説明: 定義メタデータを表現するためのメタ定義アノテーション。

パラメータ:

  • value: String = "" - 定義のフルパス
  • moduleTagId: String = "" - モジュールタグ + ID(形式: "module_id:module_tag")
  • dependencies: Array<String> = [] - チェックするパラメータタグ
  • binds: Array<String> = [] - バインドされた型
  • qualifier: String = "" - クオリファイア
  • scope: String = "" - 宣言されているスコープ

@MetaModule

パッケージ: org.koin.meta.annotations

ターゲット: CLASS

説明: モジュールメタデータを表現するためのメタモジュールアノテーション。

パラメータ:

  • value: String = "" - モジュールのフルパス
  • id: String = "" - モジュール ID
  • includes: Array<String> = [] - チェックするインクルードモジュールタグ
  • configurations: Array<String> = [] - チェックするモジュール構成
  • isObject: Boolean = false - モジュールがオブジェクトかどうか

@MetaApplication

パッケージ: org.koin.meta.annotations

ターゲット: CLASS

説明: アプリケーションメタデータを表現するためのメタアプリケーションアノテーション。

パラメータ:

  • value: String = "" - アプリケーションのフルパス
  • includes: Array<String> = [] - チェックする使用済みモジュールタグ
  • configurations: Array<String> = [] - チェックする使用済み構成モジュール

非推奨(Deprecated)アノテーション

@Singleton

パッケージ: org.koin.core.annotation

ステータス: 非推奨(DEPRECATED) - ERROR レベル

代替: 代わりに koin-jsr330 パッケージの @Singleton を使用してください

説明: @Single と同じですが、JSR-330 準拠のために非推奨となりました。


要約テーブル

アノテーションパッケージ目的一般的なユースケース
@Singleorg.koin.core.annotationシングルトン定義共有アプリケーションサービス
@Factoryorg.koin.core.annotationファクトリ定義リクエストごとのインスタンス
@Scopedorg.koin.core.annotationスコープ付き定義スコープ固有のインスタンス
@Scopeorg.koin.core.annotationスコープ宣言カスタムスコープ
@ViewModelScopeorg.koin.core.annotationViewModel スコープViewModel スコープの依存関係
@ActivityScopeorg.koin.android.annotationActivity スコープActivity スコープの依存関係
@ActivityRetainedScopeorg.koin.android.annotation保持される Activity スコープ設定変更に耐える依存関係
@FragmentScopeorg.koin.android.annotationFragment スコープFragment スコープ의 依存関係
@ScopeIdorg.koin.core.annotationスコープ解決特定のスコープから解決
@KoinViewModelorg.koin.android.annotationViewModel 定義Android/KMP/CMP ViewModel
@KoinWorkerorg.koin.android.annotationWorker 定義WorkManager ワーカー
@Namedorg.koin.core.annotation文字列/型クオリファイア同一型の Bean の区別
@Qualifierorg.koin.core.annotation型/文字列クオリファイア同一型の Bean の区別
@Propertyorg.koin.core.annotationプロパティ注入設定値
@PropertyValueorg.koin.core.annotationプロパティデフォルト値デフォルト設定値
@Moduleorg.koin.core.annotationモジュール宣言定義のグループ化
@ComponentScanorg.koin.core.annotationパッケージスキャン定義の自動検出
@Configurationorg.koin.core.annotationモジュール構成ビルドバリアント/フレーバー
@KoinApplicationorg.koin.core.annotationアプリエントリポイントKoin のブートストラップ
@Monitororg.koin.core.annotationパフォーマンス監視本番環境のモニタリング

ドキュメントバージョン: 1.0 最終更新日: 2025年10月20日 Koin Annotations バージョン: 2.2.x+