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
Full Kotlin をプロダクションで使いリリースした話
Search
Pine Mizune
May 20, 2016
Programming
1
1.2k
Full Kotlin をプロダクションで使いリリースした話
Gotanda.mobile #1 in Mobile Factory で発表した資料です。
http://gotandamb.connpass.com/event/30705/
Pine Mizune
May 20, 2016
Tweet
Share
More Decks by Pine Mizune
See All by Pine Mizune
多言語対応と絵文字ジェネレーター / i18n of Emoji Generator
pine
0
810
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.8k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
670
Lerna による明示的疎結合アーキテクチャ
pine
1
640
CircleCI 2.0 x JavaScript
pine
3
550
Perl 卒業式
pine
0
340
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
500
Emoji Generator meets Browser Extensions
pine
1
3k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
2
360
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
900
Advance Your Career with Open Source
ivargrimstad
0
270
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
670
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
500
Build your own WebP codec in Swift
kishikawakatsumi
2
890
私はどうやって技術力を上げたのか
yusukebe
43
17k
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
12k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
160
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
130
Le côté obscur des IA génératives
pascallemerrer
0
110
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
160
Featured
See All Featured
Visualization
eitanlees
148
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Building Adaptive Systems
keathley
43
2.8k
The World Runs on Bad Software
bkeepers
PRO
71
11k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Transcript
None
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
• +FU#SBJOT Λத৺ʹ 044։ൃ • WϦϦʔε • +BWBޓ +7.Ͱಈ࡞
• +BWBͱͷ૬ޓӡ༻ੑ • ؆ܿͳจ๏ • OVMM҆શ • ߴ֊ؔ • ֦ுؔ
• σϑΥϧτ࣮Մೳͳ JOUFSGBDF ,PUMJO +BWBΛ͍͘͢ൃలͤͨ͞ݴޠ
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
• Ґஔใ࿈ಈܕήʔϜ • J04൛ – 'VMM4XJGU • "OESPJE൛ – 'VMM,PUMJO
ࠓͪ͜Βͷ
• 3 層アーキテクチャ – Model <-> ViewModel <-> View •
Full Kotlin – プロジェクトコード -> 基本的に全て Kotlin – 依存ライブラリ -> Kotlin 製を積極的に採用 • RxJava 全面採用
• 3Y+BWB 3Y#JOEJOH • LPUUFSLOJGF • 3FUSPGJU ௨৴ • 1JDBTTP
ը૾ • .PDLJUP 1PXFS.PDL ςετ • 3FBMN
Activity / Fragment / View – 描画処理 ViewModel – View
への Binding 処理 Model - Observable の加工処理 0CTFSWBCMF 3Y 3Y#JOEJOH 0CTFSWBCMF 3Y 3FUSPGJU
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
શମͷϑΝΠϧߏ ,PUMJO +BWB (SPPWZ 言語別 ファイル数 比率
ü ࣗಈੜίʔυ ü ೝূपΓ ü (SBEMF ü ,PUMJO GJMFT ü ΄΅શͯͷιʔείʔυ
ߏཁૉ͝ͱͷൺ 7JFX 7JFX.PEFM .PEFM "1* 0UIFS
構成要素別 ファイル数 比率 ü MBZPVU YNM ϑΝΠϧؚ·ͣ ü "DUJWJUZ ü 'SBHNFOU ü ଟͷ $VTUPN7JFX ü "1*ΫϥΠΞϯτ ü ࣗಈੜίʔυ ü 7JFXͱ .PEFMͷ݁߹ॲཧ
• ,PUMJO ͷഁյతมߋʹΑΓಈ࡞͠ͳ͘ͳΔ – WҎલͷɺݱࡏ҆ఆ • ϝιου͕૿͑Δ – LPUMJOTUEMJC ͷґଘͰ
૿͑Δ – ͋ΔఔͷنҎ্ .VMUJ%FY ඞਢ • +BWB͕ॻ͚ͳ͘ͳΔ – ,PUMJO ͕ૉΒ͗ͯ͢͠ +BWBͷίʔυΛॻ͖ͨ͘ͳ͘ͳΔ
ίʔυ͕͘ͳΔ QVCMJDDMBTT)FMMP\ QSJWBUF4USJOHOBNF QVCMJD)FMMP 4USJOHOBNF \ UIJTOBNF OBNF ^ QVCMJD4USJOHHFU/BNF
\ SFUVSOUIJTOBNF ^ QVCMJDWPJETFU/BNF 4USJOHOBNF \ UIJTOBNF OBNF ^ QVCMJDWPJEIFMMP \ 4ZTUFNPVUQSJOUMO l)FMMPl UIJTOBNF ^ ^ class Hello(var name: String) { fun hello() { println("Hello $name") } } Kotlin Java 4 行 15 行 ˞ ຊʹՁίʔυͰ͢
OVMM҆શ Java Kotlin QVCMJDWPJEQSJOU4USJOH-FOHUI 4USJOHTUS \ JG TUS OVMM \
4ZTUFNPVUQSJOUMO TUSMFOHUI ^ ^ fun printStringLength(str: String) { println(str.length) } σϑΥϧτͰ OPOOVMM fun printStringLength(str: String?) { str?.let { println(it.length) } } OVMMBCMF Ͱѻ͏͜ͱՄೳ
ίϨΫγϣϯϝιου͕ॆ࣮ ࢀߟIUUQTLPUMJOMBOHPSHBQJMBUFTUKWNTUEMJCLPUMJODPMMFDUJPOT NBQ\JU ^SFEVDF\B CB C^ MFU\QSJOUMO JU ^
ྫʙ ۮͷΛදࣔ ଞɺ--Ͱఆ൪ͳϝιου͕ඪ४ 例: forEach / filter / map / reduce / all / any / first / last
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
2*%&αϙʔτ " "OESPJE4UVEJPͱͷ૬ੑᘳ – ,PUMJO ͷόʔδϣϯΞοϓ࣌ʹ ϓϥάΠϯಉ࣌ʹόʔδϣϯΞοϓ – +FU#SBJOT ͷ։ൃ͢Δݴޠ͔ͩΒͳͤΔٕ
2ίϯύΠϧ͘ͳ͍ " ௨ৗͷهड़ͳΒಉͷ – ܕਪଟ༻Ͱ͘ͳΔ͜ͱ͕͋Δ – 4XJGUΑΓ ίϯύΠϧ ѹతʹૣ͍ –
࣮ࡍͷ։ൃͰ EFY ॲཧͷཱ͕ͬͨ͞
2+BWBͱͷޓੑ " ૬ޓӡ༻Ͱ͖·͢ – +BWB,PUMJO ݺͼग़ͤΔ – ,PUMJO +BWBݺͼग़ͤΔ –
ಉ͡ϓϩδΣΫτʹࠞࡏՄೳ
࣍ • ,PUMJO ͱ • ։ൃͨ͠ΞϓϦͷհ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ
• 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ – ྑ͘ͳ͔ͬͨ ྑ͔ͬͨ • Α͋͘Δ࣭ • ·ͱΊ
• ,PUMJO ेͷख़ͨ͠ݴޠ • ։ൃ͕+FU#SBJOT ͳ͜ͱ͕ڧΈ – "OESPJE4UVEJPͱͷશ౷߹ • ಉϓϩδΣΫτʹ
+BWB ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ