Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2017年に新規アプリを立ち上げた話
Search
Keisuke Kobayashi
December 08, 2017
Programming
1.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2017年に新規アプリを立ち上げた話
shibuya.apk #20
Keisuke Kobayashi
December 08, 2017
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
290
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
3k
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.8k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
1k
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
3k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
350
APIクライアントをCodableで置き換えた話
kobakei
0
1.7k
開発者が知っておきたい通知の歴史
kobakei
9
7.9k
Other Decks in Programming
See All in Programming
今さら聞けない .NET CLI
htkym
0
210
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
360
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4k
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
510
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
200
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
140
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
240
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
プロポーザルを書いてもらう
pvcresin
0
570
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
170
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
Discover your Explorer Soul
emna__ayadi
2
1.3k
Designing for Timeless Needs
cassininazir
1
450
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
The Curious Case for Waylosing
cassininazir
1
480
Game over? The fight for quality and originality in the time of robots
wayneb77
1
250
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
390
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
KATA
mclloyd
PRO
35
15k
Mobile First: as difficult as doing things right
swwweet
225
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Transcript
2017ʹ৽نΞϓϦ Λ্ཱͪ͛ͨ Keisuke Kobayashi (@kobakei) shibuya.apk #20
About Me • Keisuke Kobayashi • GitHub, Qiita: kobakei •
Twitter: kobakei122 • Kyash, Inc • ݸਓࣄۀओͬͯ·͢
2017ʹ৽͘͠ΞϓϦΛ ্ཱͪ͛ͨΛ͠·͢
Kyash • ݸਓؒૹۚαʔϏε • 20174݄ʹiOS൛ϦϦʔε • 20177݄ʹAndroid൛ϦϦʔε
Kyash • ݸਓؒૹۚαʔϏε • 20174݄ʹiOS൛ϦϦʔε • 20175݄ʹԶೖࣾ • 20177݄ʹAndroid൛ϦϦʔε
2͔݄ͪΐͬͱͰϦϦʔε • AndroidΤϯδχΞ1ਓ • େମ40ը໘ • αʔόʔͷAPI͢Ͱʹ͋Δ • ͍͔ʹͯ͠ϦϦʔε͔ͨ͠
Kotlin • Google I/Oલʹ࠾༻ • Kotlinͷํ͕։ൃૣ͍Β͍͠ͱ͍͏ᷚ • ษڧ͠ͳ͕Βॻ͖͢͢ΊΔ • Better
Javaͱͯ͠ॻ͚ͩ͘ͳΒ͙͢׳ΕΔ
࣮ࡍͲ͏͔ͩͬͨ • λΠϓྔ͕ݮͬͨ • Data class • Delegated property •
NPE͕ݮͬͨ • Nullڐ༰ or ඇڐ༰
ྫ: Delegated property class MainActivity : AppCompatActivity { companion object
{ fun createIntent(context: Context, hoge: String?, fuga: Int): Intent { return Intent(context, MainActivity::class.java).apply { putExtra(MainActivity::hoge.name, hoge) putExtra(MainActivity::fuga.name, fuga) } } } val hoge: String? by ExtraNullable() val fuga: Int by ExtraNonNull() }
ࠔͬͨͱ͜Ζ • είʔϓؔͷ͍ํʹ໎ͬͨ • ࠷ۙͨΖ͏͞Μͷϑϩʔνϟʔτʹै͏ • ParcelizeΛಋೖͨ͠ΒJBͰىಈ͠ͳ͘ͳͬͨ • ͋͘·ͰExperimentalͳͷͰҙ
ઃܭ • MVVM + ϨΠϠʔυΞʔΩςΫνϟ • Data binding • ֤֊ΛRxJavaͰͭͳ͙
• ϥΠϑαΠΫϧʹԠͯ͡dispose͞ΕΔ Έ
None
ϥΠϒϥϦ • ͍͍ͩͨఆ൪Λ͍ͬͯΔ • ϒϩάʹ·ͱΊ·ͨ͠ • Android։ൃʹ͓͚Δఆ൪ϥΠϒϥϦ22બ
ఆ൪Ҏ֎ʹศརͬΆ͍ͷ • DeepLinkDispatch • Airbnb࡞ɻΞϊςʔγϣϯͰσΟʔϓϦϯΫͷίʔυΛࣗಈੜ • debot • ϝϧΧϦͷࠓҪ͞Μ࡞ɻΛৼͬͯσόοάϝχϡʔΛग़͢
• MaterialChipsInput • GmailͷѼઌબUIͬΆ͍ΞϨ
None
Architecture Components • ։ൃ࣌·ͩbetaͩͬͨͷͰΘͳ͔ͬͨ • RxLifecycleͬΆ͍ΈΛࣗ࡞ͨ͠ • ͍͍ײ͡ʹCompositeDisposableʹadd͢Δ Έ •
ORMOrmaΛͬͨ
ࣗ࡞ͨ͠ϥΠϒϥϦ • FabSpeedDial • طଘͷϥΠϒϥϦ͕ඍົͩͬͨͷͰ࡞ͬͨ • ͍͔ͭ͘ͷUIϥΠϒϥϦforkͨ͠ • UIϥΠϒϥϦ์ஔ͞Ε͕ͪ
None
ςετ • ୯ମςετ • Rolectric + mockito-kotlin • Mockito-kotlin͍͍ͧ •
UIςετ • ͪΐͬͱԿݴͬͯΔ͔Θ͔Βͳ͍Ͱ͢
Mockito-kotlin val mock = mock<SomeClass> { on { hoge() }
doReturn "hoge" on { fuga() } doReturn "fuga" }
·ͱΊ • Kyash Android൛ͷ։ൃΛࢧٕ͑ͨज़Λհ͠·ͨ͠ • Kotlin • ઃܭ • ϥΠϒϥϦ
• ςετ
Α͍͓Λʂ