Koin アノテーション一覧
このドキュメントは、すべての Koin アノテーション、そのパラメータ、動作、および使用例の包括的な一覧を提供します。
目次
- 定義アノテーション
- スコープアノテーション
- ViewModel および Android 固有のアノテーション
- クオリファイア(Qualifier)アノテーション
- プロパティアノテーション
- モジュールおよびアプリケーションアノテーション
- モニタリングアノテーション
- メタアノテーション(内部用)
定義アノテーション
@Single
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FUNCTION
説明: Koin において型または関数を single(シングルトン)定義として宣言します。単一のインスタンスが作成され、アプリケーション全体で共有されます。
パラメータ:
binds: Array<KClass<*>> = [Unit::class]- この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。createdAtStart: Boolean = false-trueの場合、Koin の開始時にインスタンスが作成されます。
動作: すべての依存関係はコンストラクタ注入によって満たされます。
例:
@Single
class MyClass(val d : MyDependency)生成される Koin DSL:
single { MyClass(get()) }明示的なバインドを使用する場合:
@Single(binds = [MyInterface::class])
class MyClass(val d : MyDependency) : MyInterface開始時に作成する場合:
@Single(createdAtStart = true)
class MyClass(val d : MyDependency)@Factory
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FUNCTION
説明: Koin において型または関数を factory 定義として宣言します。リクエストされるたびに新しいインスタンスが作成されます。
パラメータ:
binds: Array<KClass<*>> = [Unit::class]- この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。
動作: すべての依存関係はコンストラクタ注入によって満たされます。リクエストごとに新しいインスタンスが作成されます。
例:
@Factory
class MyClass(val d : MyDependency)生成される Koin DSL:
factory { MyClass(get()) }@Scoped
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FUNCTION
説明: Koin において型または関数を scoped 定義として宣言します。@Scope アノテーションと組み合わせて使用する必要があります。インスタンスは特定のスコープ内で共有されます。
パラメータ:
binds: Array<KClass<*>> = [Unit::class]- この定義に明示的にバインドする型。スーパータイプは自動的に検出されます。
動作: 定義されたスコープの生存期間(ライフタイム)内で存続するスコープ付きインスタンスを作成します。
例:
@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 = ""- スコープ文字列の値
動作: 指定されたスコープ型または名前に紐付けられたスコープ定義を作成します。
クラスを使用した例:
@Scope(MyScope::class)
class MyClass(val d : MyDependency)生成される Koin DSL:
scope<MyScope> {
scoped { MyClass(get()) }
}文字列名を使用した例:
@Scope(name = "my_custom_scope")
class MyClass(val d : MyDependency)@ViewModelScope
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FUNCTION
説明: ViewModelScope という Koin スコープ内でクラスを宣言します。これは、ViewModel のライフサイクル内で存続すべきコンポーネントのためのスコープアーキタイプです。
パラメータ: なし
動作:viewModelScope 内にスコープ付き定義を作成します。
例:
@ViewModelScope
class MyClass(val d : MyDependency)生成される Koin DSL:
viewModelScope {
scoped { MyClass(get()) }
}使用法: タグ付けされたクラスは、ViewModel および viewModelScope 関数と共に使用してスコープを有効にすることを意図しています。
@ActivityScope
パッケージ: org.koin.android.annotation
ターゲット: CLASS, FUNCTION
説明: Activity という Koin スコープ内でクラスを宣言します。
パラメータ: なし
動作:activityScope 内にスコープ付き定義を作成します。
例:
@ActivityScope
class MyClass(val d : MyDependency)生成される Koin DSL:
activityScope {
scoped { MyClass(get()) }
}使用法: タグ付けされたクラスは、Activity および activityScope 関数と共に使用してスコープを有効にすることを意図しています。
@ActivityRetainedScope
パッケージ: org.koin.android.annotation
ターゲット: CLASS, FUNCTION
説明: Activity という Koin スコープ内でクラスを宣言しますが、設定変更(configuration changes)をまたいで保持されます。
パラメータ: なし
動作:activityRetainedScope 内にスコープ付き定義を作成します。
例:
@ActivityRetainedScope
class MyClass(val d : MyDependency)生成される Koin DSL:
activityRetainedScope {
scoped { MyClass(get()) }
}使用法: タグ付けされたクラスは、Activity および activityRetainedScope 関数と共に使用してスコープを有効にすることを意図しています。
@FragmentScope
パッケージ: org.koin.android.annotation
ターゲット: CLASS, FUNCTION
説明: Fragment という Koin スコープ内でクラスを宣言します。
パラメータ: なし
動作:fragmentScope 内にスコープ付き定義を作成します。
例:
@FragmentScope
class MyClass(val d : MyDependency)生成される Koin DSL:
fragmentScope {
scoped { MyClass(get()) }
}使用法: タグ付けされたクラスは、Fragment および fragmentScope 関数と共に使用してスコープを有効にすることを意図しています。
@ScopeId
パッケージ: org.koin.core.annotation
ターゲット: VALUE_PARAMETER
説明: クラスのコンストラクタまたは関数のパラメータにアノテーションを付け、特定のスコープ ID を持つ指定されたスコープからの解決を要求します。
パラメータ:
value: KClass<*> = Unit::class- スコープ型name: String = ""- スコープ文字列識別子
動作: 型または名前によって識別される特定のスコープから依存関係を解決します。
文字列名を使用した例:
@Factory
class MyClass(@ScopeId(name = "my_scope_id") val d : MyDependency)生成される Koin DSL:
factory { MyClass(getScope("my_scope_id").get()) }型を使用した例:
@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):
@KoinViewModel
class MyViewModel(val d : MyDependency) : ViewModel()例 (KMP/CMP shared):
@KoinViewModel
class SharedViewModel(
val repository: Repository,
val analytics: Analytics
) : ViewModel()生成される Koin DSL:
viewModel { MyViewModel(get()) }@KoinWorker
パッケージ: org.koin.android.annotation
ターゲット: CLASS, FUNCTION
説明: Koin 定義用の Worker アノテーションです。WorkManager のワーカーとして型を worker 定義として宣言します。
パラメータ:
binds: Array<KClass<*>> = []- この定義に明示的にバインドする型。
動作: Android WorkManager 連携用のワーカー定義を作成します。
例:
@KoinWorker
class MyWorker() : Worker()クオリファイア(Qualifier)アノテーション
@Named
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FUNCTION, VALUE_PARAMETER
説明: 指定された定義にクオリファイアを定義します。StringQualifier("...") または型ベースのクオリファイアを生成します。
パラメータ:
value: String = ""- 文字列クオリファイアtype: KClass<*> = Unit::class- クラスクオリファイア
動作: 同じ型の複数の定義を区別するために使用されます。
文字列を使用した例:
@Single
@Named("special")
class MyClass(val d : MyDependency)パラメータでの使用法:
@Single
class Consumer(@Named("special") val myClass: MyClass)型を使用した例:
@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 = ""- 文字列クオリファイア
動作: 同じ型の複数の定義を区別するために使用されます。
例:
@Single
@Qualifier(name = "special")
class MyClass(val d : MyDependency)プロパティアノテーション
@Property
パッケージ: org.koin.core.annotation
ターゲット: VALUE_PARAMETER
説明: コンストラクタのパラメータまたは関数のパラメータにアノテーションを付け、Koin プロパティとして解決するようにします。
パラメータ:
value: String- プロパティ名
動作: 依存関係の注入ではなく、Koin プロパティからパラメータ値を解決します。
例:
@Factory
class MyClass(@Property("name") val name : String)生成される Koin DSL:
factory { MyClass(getProperty("name")) }デフォルト値を使用する場合:
@PropertyValue("name")
val defaultName = "MyName"
@Factory
class MyClass(@Property("name") val name : String)生成される Koin DSL:
factory { MyClass(getProperty("name", defaultName)) }@PropertyValue
パッケージ: org.koin.core.annotation
ターゲット: FIELD
説明: プロパティのデフォルト値となるフィールド値にアノテーションを付けます。
パラメータ:
value: String- プロパティ名
動作: プロパティが見つからない場合に使用できるプロパティのデフォルト値を定義します。
例:
@PropertyValue("name")
val defaultName = "MyName"
@Factory
class MyClass(@Property("name") val name : String)生成される Koin DSL:
factory { MyClass(getProperty("name", defaultName)) }モジュールおよびアプリケーションアノテーション
@Module
パッケージ: org.koin.core.annotation
ターゲット: CLASS
説明: Koin モジュール内の定義を収集しやすくするためのクラスアノテーションです。各関数に Koin 定義アノテーションを付けることができます。
パラメータ:
includes: Array<KClass<*>> = []- インクルードするモジュールクラスcreatedAtStart: Boolean = false-trueの場合、モジュールインスタンスが開始時に作成されます
動作: モジュール内のすべてのアノテーション付き関数およびクラスを収集します。
例:
@Module
class MyModule {
@Single
fun myClass(d : MyDependency) = MyClass(d)
}生成される Koin DSL:
val MyModule.module = module {
val moduleInstance = MyModule()
single { moduleInstance.myClass(get()) }
}インクルードを使用する場合:
@Module(includes = [OtherModule::class])
class MyModule {
// 定義
}@ComponentScan
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FIELD
説明: Koin 定義アノテーションで宣言された定義を収集します。現在のパッケージまたは明示的なパッケージ名をスキャンします。
パラメータ:
value: vararg String = []- スキャンするパッケージ(glob パターンをサポート)
動作: 指定されたパッケージ内のアノテーション付きクラスをスキャンします。正確なパッケージ名と glob パターンの両方をサポートします。
Glob パターンのサポート:
正確なパッケージ名(ワイルドカードなし):
com.example.service- パッケージとそのすべてのサブパッケージをスキャンします(com.example**と等価)
ルートを含むマルチレベルスキャン:
com.example**-com.exampleとそのすべてのサブパッケージをスキャンします
ルートを除くマルチレベルスキャン:
com.example.**-com.exampleのサブパッケージのみをスキャンし、ルートは除外します
シングルレベルのワイルドカード:
com.example.*.service- 正確に 1 レベルに一致します(例:com.example.user.service)
組み合わせたワイルドカード:
com.**.service.*data- 複雑なパターンマッチングcom.*.service.**- パターンに合致するサブパッケージをスキャン
例 - 現在のパッケージをスキャン:
@ComponentScan
class MyApp例 - 特定のパッケージをスキャン:
@ComponentScan("com.example.services", "com.example.repositories")
class MyApp例 - glob パターンを使用:
@ComponentScan("com.example.**", "org.app.*.services")
class MyApp@Configuration
パッケージ: org.koin.core.annotation
ターゲット: CLASS, FIELD
説明: @Module クラスに適用され、それを 1 つ以上の構成(タグ/フレーバー)に関連付けます。
パラメータ:
value: vararg String = []- 構成名
動作: 条件付きロードのために、モジュールを構成(Configuration)ごとにグループ化できます。
デフォルト構成:
@Module
@Configuration
class MyModuleこのモジュールは "default" 構成の一部です。
複数の構成:
@Module
@Configuration("prod", "test")
class MyModuleこのモジュールは "prod" と "test" の両方の構成で使用可能です。
デフォルトを含める場合:
@Module
@Configuration("default", "test")
class MyModuledefault と test の構成で使用可能です。
注: @Configuration("default") は @Configuration と同等です。
@KoinApplication
パッケージ: org.koin.core.annotation
ターゲット: CLASS
説明: クラスを Koin アプリケーションのエントリポイントとしてタグ付けします。startKoin() または koinApplication() 関数を使用して Koin アプリケーションのブートストラップを生成します。
パラメータ:
configurations: Array<String> = []- スキャンする構成名のリストmodules: Array<KClass<*>> = [Unit::class]- 構成以外にロードするモジュールのリスト
動作: 構成とインクルードされたモジュールをスキャンするブートストラップ関数を生成します。
例 - デフォルト構成:
@KoinApplication
class MyApp生成される関数:
MyApp.startKoin()
MyApp.koinApplication()例 - 特定の構成:
@KoinApplication(configurations = ["default", "prod"])
class MyApp例 - モジュールを指定:
@KoinApplication(
configurations = ["default"],
modules = [CoreModule::class, ApiModule::class]
)
class MyAppカスタム構成での使用法:
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 キー
例:
@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 = ""- モジュール IDincludes: 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 準拠のために非推奨となりました。
要約テーブル
| アノテーション | パッケージ | 目的 | 一般的なユースケース |
|---|---|---|---|
@Single | org.koin.core.annotation | シングルトン定義 | 共有アプリケーションサービス |
@Factory | org.koin.core.annotation | ファクトリ定義 | リクエストごとのインスタンス |
@Scoped | org.koin.core.annotation | スコープ付き定義 | スコープ固有のインスタンス |
@Scope | org.koin.core.annotation | スコープ宣言 | カスタムスコープ |
@ViewModelScope | org.koin.core.annotation | ViewModel スコープ | ViewModel スコープの依存関係 |
@ActivityScope | org.koin.android.annotation | Activity スコープ | Activity スコープの依存関係 |
@ActivityRetainedScope | org.koin.android.annotation | 保持される Activity スコープ | 設定変更に耐える依存関係 |
@FragmentScope | org.koin.android.annotation | Fragment スコープ | Fragment スコープ의 依存関係 |
@ScopeId | org.koin.core.annotation | スコープ解決 | 特定のスコープから解決 |
@KoinViewModel | org.koin.android.annotation | ViewModel 定義 | Android/KMP/CMP ViewModel |
@KoinWorker | org.koin.android.annotation | Worker 定義 | WorkManager ワーカー |
@Named | org.koin.core.annotation | 文字列/型クオリファイア | 同一型の Bean の区別 |
@Qualifier | org.koin.core.annotation | 型/文字列クオリファイア | 同一型の Bean の区別 |
@Property | org.koin.core.annotation | プロパティ注入 | 設定値 |
@PropertyValue | org.koin.core.annotation | プロパティデフォルト値 | デフォルト設定値 |
@Module | org.koin.core.annotation | モジュール宣言 | 定義のグループ化 |
@ComponentScan | org.koin.core.annotation | パッケージスキャン | 定義の自動検出 |
@Configuration | org.koin.core.annotation | モジュール構成 | ビルドバリアント/フレーバー |
@KoinApplication | org.koin.core.annotation | アプリエントリポイント | Koin のブートストラップ |
@Monitor | org.koin.core.annotation | パフォーマンス監視 | 本番環境のモニタリング |
ドキュメントバージョン: 1.0 最終更新日: 2025年10月20日 Koin Annotations バージョン: 2.2.x+
