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
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
Heart of Swift Concurrency
koher
0
1.2k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
110
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
230
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
170
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
230
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.7k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
380
APNsからLive Activityを開始する話
yumnumm
0
150
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
220
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
530
mrbgem 三角測量 開発
ogom
0
190
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Faster Mobile Websites
deanohume
310
32k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
520
A designer walks into a library…
pauljervisheath
211
25k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
350
My Coaching Mixtape
mlcsv
0
340
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Mobile First: as difficult as doing things right
swwweet
225
10k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
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 • ઃܭ • ϥΠϒϥϦ
• ςετ
Α͍͓Λʂ