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.1k
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
690
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.5k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
610
Lerna による明示的疎結合アーキテクチャ
pine
1
600
CircleCI 2.0 x JavaScript
pine
3
510
Perl 卒業式
pine
0
300
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
470
Emoji Generator meets Browser Extensions
pine
1
2.9k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
550
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
210
The Shape of a Service Object
inem
0
520
What is Parser
yui_knk
9
4.1k
Pythonで改めて考える「クラス(class)」の使いどころ
os1ma
1
300
マルチモジュールにおけるテスト最適化
fxwx23
0
210
Understand the mechanism! Let's do screenshots tests of Compose Previews with various variations / 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
sumio
3
790
XStateでReactに秩序を与えたい
gizm000
0
730
GraphQLの魅力を引き出すAndroidクライアント実装
morux2
3
650
LangChainでWebサイトの内容取得やGitHubソースコード取得
shukob
0
160
Why Prism?
kddnewton
4
1.7k
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
390
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
48
10k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
109
6.9k
Designing with Data
zakiwarfel
98
5k
Why You Should Never Use an ORM
jnunemaker
PRO
53
8.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
5
480
No one is an island. Learnings from fostering a developers community.
thoeni
18
2.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
322
23k
Unsuck your backbone
ammeep
667
57k
Happy Clients
brianwarren
96
6.6k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Into the Great Unknown - MozCon
thekraken
29
1.4k
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 ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ