SlideShare a Scribd company logo
1 of 20
L
T
・自己紹介
・DIフレームワークKOINの紹介
やっていること
Androidアプリ開発
最近は画面オーバーレイ系
ウェジェット
履歴画面
ランチャー
任意の
View
KOIN 紹
介・KOIN
→KotlinのDIフレームワーク
・Daggerとの違い
・使い方
https://github.com/InsertKoinIO/koin
Daggerとの違
いDagger
• Annotation Processingでコード生成
KOIN
• コード生成なし
→kaptを使わない(kotlin1.2.60で早くなったみたいだけど)
Daggerとの違
い
private val mainComponent by inject<MainComponent>()
private val mainComponent: MainComponent by inject()
@Inject lateinit var mainComponent: MainComponent
フィールドでの宣言
・Dagger
・KOIN
OR
Daggerとの違
い
private val mainComponent by inject<MainComponent>()
private val mainComponent: MainComponent by inject()
@Inject lateinit var mainComponent: MainComponent
フィールドでの宣言
・Dagger
・KOIN
OR
inline fun <reified T> ComponentCallbacks.inject(
name: String = "",
module: String? = null,
noinline parameters: ParameterDefinition = emptyParameterDefinition()
) = lazy { (StandAloneContext.koinContext as KoinContext).get<T>(name, module, parameters) }
KOIN 紹
介• 使い方
// KOIN
ext.koin_version = "1.0.0-beta-3"
implementation "org.koin:koin-core:$koin_version"
implementation "org.koin:koin-android:$koin_version"
implementation "org.koin:koin-android-viewmodel:$koin_version"
testImplementation "org.koin:koin-test:$koin_version"
dependenciesへ追加
KOIN 紹
介• 使い方
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.matsudamper.smallapp.sample">
<application
android:name=".App"
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(module))
}
}
val module = module {
single { MainComponent() }
single { SingletonComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
KOIN 紹
介• 使い方
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.matsudamper.smallapp.sample">
<application
android:name=".App"
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(module))
}
}
val module = module {
single { MainComponent() }
single { SingletonComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
KOIN 紹
介• 使い方
val module = module {
factory { MainComponent() }
single { SingletonComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
通常
シングルトン
private val mainComponent by inject<MainComponent>()
KOIN 紹
介• 使い方
val module = module {
factory { MainComponent() }
single { SingletonComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
Android
ViewMod
el
KOIN 紹
介• 使い方
val module = module {
factory { MainComponent() }
single { SingletonComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
Android
ViewMod
el
val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
val viewModel: MainViewModel by viewModel()
Android ViewModelでコンストラクタの引数が欲しかったら
Factoryが必要なはず
KOINがやってくれます
KOIN 紹
介• 引数の依存解決
val module = module {
factory { MainComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
class MainViewModel(
val mainComponent: MainComponent, var uri: Uri
) : ViewModel()
②依存関係 解決
①型を見て
KOIN 紹
介• 引数の依存解決
val module = module {
factory { MainComponent() }
viewModel { (uri: Uri) -> MainViewModel(get(), uri) }
}
val viewModel: MainViewModel by viewModel { parametersOf(Uri.parse("")) }
KOIN 紹
介KOIN対応
• Android App
• Android ViewModel Architecture Components
• Android scoped injection with Lifecycle
• Kotlin application
• Junit
• Spark web application
• Ktor
KOIN 紹
介• Get Startが充実
KOIN 紹
介• 以上でKOINの紹介を終わります
KOINはシンプルで良い!

More Related Content

Similar to Koin紹介

What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
Atsushi Odagiri
 
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
Ryo Sasaki
 

Similar to Koin紹介 (20)

MVVM入門
MVVM入門MVVM入門
MVVM入門
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方
 
[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widget
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 
.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
 
夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
 
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
 

Recently uploaded

Recently uploaded (8)

LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 

Koin紹介

Editor's Notes

  1. LTを始めます。 自己紹介と最近使い始めたKotlinのDIフレームワーク、KOINの紹介をしていきます。
  2. 最近は画面オーバーレイ系のアプリを主にやっています。 簡単に画面上にオーバーレイできるフレームワークを作り、それを使ったアプリを作っています。 好きなウェジェットをオーバーレイできるアプリがすごく便利です。先人達が作ったものを有効活用できます。
  3. それではKOINを紹介していきます。 KOINとはKotlinのDIフレームワークです。 Daggerとの違いと使い方を紹介していきます。
  4. Daggerとの違いはアノテーションプロセッシングでのコード生成がありません。 じゃあどうやって注入しているかといいますと。
  5. デリゲーションを使っています。 Injectというアノテーションが無くなり、injectに移譲をしています。 Private、イミュータブルで宣言できます。 移譲先のInjectの中を見ると
  6. lazy(レイジー)になっているのは注意です。
  7. 使い方です。 dependenciesへ追加します。現在1.0.0 beta3が最新版となっています。
  8. Applicationを継承したクラスを作ってManifestに登録するところはDaggerと同じです。 ApplicationのonCreateでstartKoinとするだけで使えます。
  9. ここでモジュールを指定します。 ここを詳しく見ていきます。
  10. 通常はfactory、シングルトンにしたい時はsingleを使います。 これによって依存が解決されます。
  11. 更にAndroidアーキテクチャコンポーネンツのViewModelを注入してくれる機能もあります。 引数がありますがこの説明は後回しにします。
  12. ViewModelProvidersを使っていたコードが簡単になりました。
  13. でも、AndroidアーキテクチャコンポーネンツのViewModelってコンストラクタが欲しかったらFactoryが必要だったはず
  14. KOINがやってくれます。
  15. Getと書けば引数の型を見て依存を解決してくれますし
  16. parametersOfで使う側から引数を指定することもできます。 以上が簡単な使い方でした。
  17. KOINは様々なプラットフォームに対応しています。
  18. Get Startやサンプルが充実しているので始めやすいですので是非利用してみて下さい。
  19. 以上でKotlinの紹介をDIフレームワークKOINの紹介を終わります。
  20. KOINは簡潔に書け、シンプルで好きです。 ありがとうございました。