SlideShare a Scribd company logo
1 of 15
Download to read offline
Kodeinを使ったテストデータ

インジェクション
リクルートマーケティングパートナーズ
保坂 駿(Shun Hosaka)
1
はじめに
• 保坂 駿(ほさか しゅん)
• 新卒1年目、Kotlin歴3年目
• GitHub, Qiitaなど : /Reyurnible
• キッズリーというプロダクトのPO兼エンジニア

(保育園向けのサービス)
2
今日の内容
• KotlinでのDIの話
• テストデータをうまいこと扱うには的な話
• DIをゆるくはじめようって話
3
テストデータの苦悩
• 同じモデルを色々なテストクラスの中で生成
している
• あちこち関係が複雑になる
• テストのパターンによって名前を付けても管
理がしづらい
4
> テストデータをDIすればいいのでは?
KotlinでDI
• Dagger
• Kodein
• Toothpicks
• Guice
• ???
5
★
Kodein
• Delegatesプロパティを使用した純Kotlin製のDI
ライブラリ
• ★600
• ドキュメント充実してる
• https://salomonbrys.github.io/Kodein/
6
Painless Kotlin Dependency Injection
Kodein:基本的な使い方
7
Kodeinインスタンスを作り、そのブロック内でインジェクトしたいオブジェクトをbindする。
あとは、受け取りたい側でKodeinのインスタンスからbindされたものを受け取る
// Materials
class Bean
// Coffee
abstract class Coffee(val bean: Bean)
class BlackCoffee(bean: Bean) : Coffee(bean)
val kodein = Kodein.module {
bind<Bean>() with provider { Bean() }
bind<Coffee>() with provider { BlackCoffee(instance()) }
}
// 型からmoduleの中で適当なものをインジェクトしてくれる
val coffee: Coffee = kodein.instance()
Kodein:その他の使い方
8
Kodeinインスタンスを作り、そのブロック内でインジェクトしたいオブジェクトをbindする。
あとは、受け取りたい側でKodeinのインスタンスからbindされたものを受け取る
Kodein:利点
• 使うのが簡単
• APTではないのでビルドが遅くならない
• どこでもゆるくインジェクションできる
9
モックデータのインジェクション
10
/**
* Create Article
*/
val articleFactory = Kodein.Module {
constant("now") with Date()
bind<List<Article>>() with factory { size: Int ->
(0 until size).map {
instance<Article>()
}
}
bind<Article>() with provider {
Article(
title = "Samsung tried to spin the Note 7 disaster",
description = "From time to time, Samsung strikes...",
author = "Brian Heater",
url = "https://example.com/2017/08/24/",
urlToImage = "https://example.com/image.png",
publishedAt = instance("now")
)
}
}
コード
11
ポイント
• 依存関係もあるので、だいたい全部のオブジェ
クトをbindしてしまうのがいい
• クラスごとにオーバーライドする可能性があ
るもの、ユーザーなどは別でtagで名前を付け
る
12
さいごに
• Kodein使うとゆるくDIをできます。
• 本番での使用が怖いという人もまずはテスト
で軽く入れてみてはどうでしょう!
13
ソースコード
• Kodein使うとゆるくDIをできます。
• https://github.com/Reyurnible/kotlin-
sample-newsapp
14
Please join to my team.
15

More Related Content

Similar to 20171004 kotlin rls_hosaka

TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~Tomomi Kajita
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02Hiro Yoshioka
 
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationTomoaki Tamura
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
Dockerを使ってローカルテストを良い感じに実装した話
Dockerを使ってローカルテストを良い感じに実装した話Dockerを使ってローカルテストを良い感じに実装した話
Dockerを使ってローカルテストを良い感じに実装した話Ryo Yamaoka
 
Deploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with ElasticbeanstalkDeploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with Elasticbeanstalkaktsk
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景Koichi ITO
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Seiichi Sugahara
 
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料Takafumi ONAKA
 
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜Akira Nagata
 
React Nativeで作る「触れるプロトタイプ」の活用
React Nativeで作る「触れるプロトタイプ」の活用React Nativeで作る「触れるプロトタイプ」の活用
React Nativeで作る「触れるプロトタイプ」の活用Taiga Sano
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介中條 剛
 
KDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローKDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローques_staff
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく健一 辰濱
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える健一 辰濱
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructurePreferred Networks
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事Cybozu, Inc.
 
学びの機会ひろげよう
学びの機会ひろげよう学びの機会ひろげよう
学びの機会ひろげようNoriko Takiguchi
 

Similar to 20171004 kotlin rls_hosaka (20)

TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous Integration
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
Dockerを使ってローカルテストを良い感じに実装した話
Dockerを使ってローカルテストを良い感じに実装した話Dockerを使ってローカルテストを良い感じに実装した話
Dockerを使ってローカルテストを良い感じに実装した話
 
Deploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with ElasticbeanstalkDeploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with Elasticbeanstalk
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325
 
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料
 
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
 
React Nativeで作る「触れるプロトタイプ」の活用
React Nativeで作る「触れるプロトタイプ」の活用React Nativeで作る「触れるプロトタイプ」の活用
React Nativeで作る「触れるプロトタイプ」の活用
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
 
KDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローKDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フロー
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 
Jaws days 2019_pipeline_is_god
Jaws days 2019_pipeline_is_godJaws days 2019_pipeline_is_god
Jaws days 2019_pipeline_is_god
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
 
学びの機会ひろげよう
学びの機会ひろげよう学びの機会ひろげよう
学びの機会ひろげよう
 

20171004 kotlin rls_hosaka