Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
840
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
680
Lerna による明示的疎結合アーキテクチャ
pine
1
650
CircleCI 2.0 x JavaScript
pine
3
560
Perl 卒業式
pine
0
340
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
510
Emoji Generator meets Browser Extensions
pine
1
3k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
780
connect-python: convenient protobuf RPC for Python
anuraaga
0
370
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.1k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
220
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.2k
tparseでgo testの出力を見やすくする
utgwkk
1
160
AIコーディングエージェント(Manus)
kondai24
0
150
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
19k
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
4
1.6k
Integrating WordPress and Symfony
alexandresalome
0
130
AWS CDKの推しポイントN選
akihisaikeda
1
240
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Raft: Consensus for Rubyists
vanstee
141
7.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Being A Developer After 40
akosma
91
590k
Fireside Chat
paigeccino
41
3.7k
Building Applications with DynamoDB
mza
96
6.8k
Scaling GitHub
holman
464
140k
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 ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ