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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Pine Mizune
May 20, 2016
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
880
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
2k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
690
Lerna による明示的疎結合アーキテクチャ
pine
1
680
CircleCI 2.0 x JavaScript
pine
3
570
Perl 卒業式
pine
0
370
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
530
Emoji Generator meets Browser Extensions
pine
1
3k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
510
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
150
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
210
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
230
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
200
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
190
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
840
関数型プログラミングのメリットって何だろう?
wanko_it
0
160
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
480
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.8k
How to build a perfect <img>
jonoalderson
1
5.8k
Chasing Engaging Ingredients in Design
codingconduct
0
230
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
600
Docker and Python
trallard
47
3.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
The SEO Collaboration Effect
kristinabergwall1
1
500
Into the Great Unknown - MozCon
thekraken
41
2.6k
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 ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ