Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2017年に新規アプリを立ち上げた話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
170
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
350
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
3.1k
今日から始める依存性の注入 / 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
Other Decks in Programming
See All in Programming
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
160
Rでドレミ/Do-Re-Mi_with_R
florets1
0
110
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
420
The Rails Doctrine Decade
koic
2
470
JRuby: Past, Present, and Future
headius
0
220
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
4k
Intent as Code
shoppingjaws
6
1.1k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
870
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
230
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
530
すこし踏み込む CancellationToken
htkym
2
1.6k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
600
Making Projects Easy
brettharned
120
6.8k
Discover your Explorer Soul
emna__ayadi
2
1.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
540
30 Presentation Tips
portentint
PRO
1
410
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Google's AI Overviews - The New Search
badams
0
1.6k
Navigating Team Friction
lara
192
16k
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 • ઃܭ • ϥΠϒϥϦ
• ςετ
Α͍͓Λʂ