Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Full Kotlin をプロダクションで使いリリースした話

Full Kotlin をプロダクションで使いリリースした話

Gotanda.mobile #1 in Mobile Factory で発表した資料です。
http://gotandamb.connpass.com/event/30705/

842aaadff6e13fbf372c9b17b49b031c?s=128

Pine Mizune

May 20, 2016
Tweet

Transcript

  1. None
  2. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  3. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  4. • +FU#SBJOT Λத৺ʹ 044։ൃ • WϦϦʔε • +BWBޓ׵ +7.Ͱಈ࡞

  5. • +BWBͱͷ૬ޓӡ༻ੑ • ؆ܿͳจ๏ • OVMM҆શ • ߴ֊ؔ਺ • ֦ுؔ਺

    • σϑΥϧτ࣮૷Մೳͳ JOUFSGBDF ,PUMJO +BWBΛ࢖͍΍͘͢ൃలͤͨ͞ݴޠ
  6. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  7. • Ґஔ৘ใ࿈ಈܕήʔϜ • J04൛ – 'VMM4XJGU • "OESPJE൛ – 'VMM,PUMJO

    ࠓ೔͸ͪ͜Βͷ࿩
  8. • 3 層アーキテクチャ – Model <-> ViewModel <-> View •

    Full Kotlin – プロジェクトコード -> 基本的に全て Kotlin – 依存ライブラリ -> Kotlin 製を積極的に採用 • RxJava 全面採用
  9. • 3Y+BWB 3Y#JOEJOH • LPUUFSLOJGF • 3FUSPGJU ௨৴ • 1JDBTTP

    ը૾ • .PDLJUP 1PXFS.PDL ςετ • 3FBMN
  10. Activity / Fragment / View – 描画処理 ViewModel – View

    への Binding 処理 Model - Observable の加工処理 0CTFSWBCMF 3Y 3Y#JOEJOH 0CTFSWBCMF 3Y 3FUSPGJU
  11. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  12. શମͷϑΝΠϧߏ੒ ,PUMJO  +BWB  (SPPWZ  言語別 ファイル数 比率

    ü ࣗಈੜ੒ίʔυ ü ೝূपΓ ü (SBEMF ü ,PUMJO  GJMFT ü ΄΅શͯͷιʔείʔυ
  13. ߏ੒ཁૉ͝ͱͷൺ཰ 7JFX  7JFX.PEFM  .PEFM  "1*  0UIFS

     構成要素別 ファイル数 比率 ü MBZPVU YNM ϑΝΠϧؚ·ͣ ü "DUJWJUZ ü 'SBHNFOU ü ଟ਺ͷ $VTUPN7JFX ü "1*ΫϥΠΞϯτ ü ࣗಈੜ੒ίʔυ ü 7JFXͱ .PEFMͷ݁߹ॲཧ
  14. • ,PUMJO ͷഁյతมߋʹΑΓಈ࡞͠ͳ͘ͳΔ – WҎલͷ࿩ɺݱࡏ͸҆ఆ • ϝιου਺͕૿͑Δ – LPUMJOTUEMJC ΁ͷґଘͰ

     ૿͑Δ – ͋Δఔ౓ͷن໛Ҏ্ .VMUJ%FY ඞਢ • +BWB͕ॻ͚ͳ͘ͳΔ – ,PUMJO ͕ૉ੖Β͗ͯ͢͠ +BWBͷίʔυΛॻ͖ͨ͘ͳ͘ͳΔ
  15. ίʔυ͕୹͘ͳΔ 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 行 ˞ ຊ౰ʹ౳ՁίʔυͰ͢
  16. 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 Ͱѻ͏͜ͱ΋Մೳ
  17. ίϨΫγϣϯϝιου͕ॆ࣮ ࢀߟIUUQTLPUMJOMBOHPSHBQJMBUFTUKWNTUEMJCLPUMJODPMMFDUJPOT  NBQ\JU ^SFEVDF\B CB C^ MFU\QSJOUMO JU ^

    ྫʙ ۮ਺ͷ࿨Λදࣔ ଞɺ--Ͱ͸ఆ൪ͳϝιου͕ඪ४ 例: forEach / filter / map / reduce / all / any / first / last
  18. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  19. 2*%&αϙʔτ͸ " "OESPJE4UVEJPͱͷ૬ੑ׬ᘳ – ,PUMJO ͷόʔδϣϯΞοϓ࣌ʹ ϓϥάΠϯ΋ಉ࣌ʹόʔδϣϯΞοϓ – +FU#SBJOT ͷ։ൃ͢Δݴޠ͔ͩΒͳͤΔٕ

  20. 2ίϯύΠϧ଎౓஗͘ͳ͍ " ௨ৗͷهड़ͳΒಉ౳ͷ଎౓ – ܕਪ࿦ଟ༻Ͱ஗͘ͳΔ͜ͱ͕͋Δ – 4XJGUΑΓ΋ ίϯύΠϧ͸ ѹ౗తʹૣ͍ –

    ࣮ࡍͷ։ൃͰ͸ EFY ॲཧͷ஗͕͞໨ཱͬͨ
  21. 2+BWBͱͷޓ׵ੑ͸ " ૬ޓӡ༻Ͱ͖·͢ – +BWB,PUMJO ݺͼग़ͤΔ – ,PUMJO +BWBݺͼग़ͤΔ –

    ಉ͡ϓϩδΣΫτʹࠞࡏՄೳ
  22. ໨࣍ • ,PUMJO ͱ͸ • ։ൃͨ͠ΞϓϦͷ঺հ – ΞʔΩςΫνϟ – ґଘϥΠϒϥϦ

    • 'VMM,PUMJO Ͱ։ൃͯ͠Έͯ – ϑΝΠϧߏ੒ – ྑ͘ͳ͔ͬͨ఺ ྑ͔ͬͨ఺ • Α͋͘Δ࣭໰ • ·ͱΊ
  23. • ,PUMJO ͸े෼ͷ੒ख़ͨ͠ݴޠ • ։ൃ͕+FU#SBJOT ͳ͜ͱ͕ڧΈ – "OESPJE4UVEJPͱͷ׬શ౷߹ • ಉϓϩδΣΫτʹ

    +BWB ͱڞଘͰ͖Δ – ͻͱ·ͣಋೖͯ͠Έͯ͸