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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Pine Mizune
May 20, 2016
Programming
1.2k
1
Share
Full Kotlin をプロダクションで使いリリースした話
Gotanda.mobile #1 in Mobile Factory で発表した資料です。
http://gotandamb.connpass.com/event/30705/
Pine Mizune
May 20, 2016
More Decks by Pine Mizune
See All by Pine Mizune
多言語対応と絵文字ジェネレーター / i18n of Emoji Generator
pine
0
870
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.9k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
690
Lerna による明示的疎結合アーキテクチャ
pine
1
670
CircleCI 2.0 x JavaScript
pine
3
570
Perl 卒業式
pine
0
370
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
520
Emoji Generator meets Browser Extensions
pine
1
3k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
20260514_its_the_context_window_stupid.pdf
heita
0
290
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
750
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
140
Vibe NLP for Applied NLP
inesmontani
PRO
0
600
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
220
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
1.1k
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
440
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
250
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
750
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
1.4k
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
970
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
700
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
Producing Creativity
orderedlist
PRO
348
40k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
400
Documentation Writing (for coders)
carmenintech
77
5.3k
Between Models and Reality
mayunak
3
280
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Unsuck your backbone
ammeep
672
58k
Marketing to machines
jonoalderson
1
5.2k
A Tale of Four Properties
chriscoyier
163
24k
Scaling GitHub
holman
464
140k
Designing for Performance
lara
611
70k
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 ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ