なぜAndroid開発にKotlinを選んだか

0886c70b5ecf3b0b0ee6500c5e47884d?s=47 M.Inomata
September 08, 2016

 なぜAndroid開発にKotlinを選んだか

ギルドカンファレンス2016の発表資料です。

0886c70b5ecf3b0b0ee6500c5e47884d?s=128

M.Inomata

September 08, 2016
Tweet

Transcript

  1. ͳͥAndroid։ൃʹ KotlinΛબΜ͔ͩ?

  2. ࣗݾ঺հ • גࣜձࣾtech vein(ςοΫϕΠϯ)
 ୅දऔక໾ΤϯδχΞ
 ழມɹॆԝ(͍ͷ·ͨɹΈͭͻΖ) • http://www.tech-vein.com/ • twitter:

    @ino2222
  3. tech vein(ςοΫϕΠϯ)ͱ͍͏ डୗ։ൃձࣾΛӡӦ͍ͯ͠·͢ http://www.tech-vein.com/

  4. AndroidΞϓϦ։ൃ؀ڥ • IDE … Android Studio 
 (Eclipse ADT ͸։ൃऴྃ)

    • ݴޠ • Java 7 • Java 8 • Kotlin • AltJava(Groovy, Scala, etc) • Swift?
  5. AndroidΞϓϦ։ൃ؀ڥ • IDE … Android Studio 
 (Eclipse ADT ͸։ൃऴྃ)

    • ݴޠ • Java 7 … ͍··Ͱͷओྲྀ(2016-07·Ͱ) • Java 8 … ͜Ε͔Β(2016-08ʙ)ओྲྀʹͳΔ͔΋ʁ • Kotlin … ͜Ε͔ΒओྲྀʹͳΔ͔΋ʁ(ࠓճ࠾༻ͨ͠ݴޠ) • ଞͷAltJava(Groovy, Scala, etc) … Android࠾༻ͮ͠Β͍ • Swift? … Ұ࣌ظ࿩୊ʹͳͬͨɻͱΓ͋͑ͣίϯύΠϧͯ͠JNI ͰࢀরͰ͖ͨɺͱ͍͏Ϩϕϧ
  6. ͳͥAndroid։ൃʹ KotlinΛબΜ͔ͩ • Swift, ScalaͷΑ͏ͳϞμϯͳ(ؔ਺ܕతͳ)ݴޠ • Java7͕ͭΒ͔ͬͨɻJava8͕࢖͑ΔΑ͏ʹͳ͚ͬͨͲɺ·ͩݶఆత
 (ϥϜμࣜɺϝιουࢀর͚ͩ) • IDE։ൃݩͷɺJetBrainsࣾʹΑΔڧྗͳαϙʔτ

    • Javaͱͷޓ׵ੑ͕ߴ͍ • 2016೥3݄຤ʹKotlin ver1.0͕ਖ਼ࣜϦϦʔε͞Εͨ • طʹಋೖࣄྫ΋͋ͬͨ
  7. iOS ։ൃ Swiftʹ͍ͭͯ • 2014೥·ͰiOS։ൃͱ͍͑͹ObjectiveCͩͬͨɻ • 2014೥ʹApple͕SwiftݴޠΛൃදޙɺঃʑʹීٴɻ • 2016೥ݱࡏ͸͔ͬ͢ΓSwift͕ओྲྀʹɻ •

    SwiftҎલͷObjective CͳΞϓϦ΋ɺେ͖ͳϦχϡʔΞϧͷλΠϛϯάͰ SwiftʹҠߦ͍ͯ͠Δ • ObjC͸։ൃͰ͖ͳ͍͚ͲɺSwiftͳΒͰ͖ͦ͏ɺͱ͍͏ࣄͰiOSΤϯδχΞ͕ ૿͍͑ͯΔ • SwiftൃදҎདྷɺAndroid Ͱ΋ Swift ͷΑ͏ͳݴޠֵ໋͕ظ଴͞Ε͖ͯͨ • ※໌೔(2016೥9݄8೔)ʹ iOSʹ͍ͭͯ৽͍͠ൃද͕͋Γͦ͏Ͱ͢ɻ
 Xcode8(Swift3)͕͘Δ͔΋ɻ
  8. Android Java8 • 2016೥3݄ʹAndroidͰ΋Java8ରԠ͞Ε·ͨ͠(N preview)ɻ • Android 6Ҏલͷ୺຤ … ϥϜμࣜɺϝιουࢀর͕࢖͑ΔΑ

    ͏ʹͳͬͨ
 (Android 7.0 SDKͰJackπʔϧνΣʔϯΛ༗ޮʹ͢Δͱ࢖͑ Δ) • Android 7.0 Ҏ߱ͷ୺຤ … StreamͳͲͷJava8௥Ճύοέʔ δ͕࢖͑ΔΑ͏ʹͳΔ
  9. ͦΕͰ΋KotlinΛ
 ࢖͏΄͏͕͍͍ཧ༝ • ࠓ͔ΒͰ΋StreamతͳϦετૢ࡞͕Ͱ͖Δ (map, filter, forEach) • JavaΑΓ΋ίʔυ͕؆ܿʹͳΔ •

    JavaΑΓ΋ίʔυΛ҆શʹॻ͚Δ(Null҆શ)
  10. Kotlin(JavaҎ֎)Λ ࢖͏ϦεΫ͸ͳ͍ͷ͔ʁ

  11. ֶशίετɺ ࣮૷ίετ͕͔͔Δ͔ʁ • Javaͱͷޓ׵ੑ͕ߴ͘ɺJava͕ॻ͚ΔΤϯδχΞͳΒ਺೔Ͱ֮͑ ΒΕΔ
 ࢀߟ: Comparison To Java
 https://kotlinlang.org/docs/reference/comparison-to-java.html

    • ݴޠ࢓༷͕Swiftʹࣅ͍ͯͯɺiOSΤϯδχΞ΋਌͠Έ΍͍͢ • Android StudioͰެࣜରԠ͍ͯ͠ΔͷͰɺKotlinॳ৺ऀͰ΋࠷ॳ ͔ΒεϜʔζʹ࣮૷Ͱ͖ΔɻJava to Kotlinͷࣗಈม׵͕خ͍͠ɻ • ࣮૷ίετ͸JavaΑΓKotolinͷ΄͏͕͍ܰ
  12. KotlinͰͩΊͩͬͨ࣌ͷ ϦΧόϦ͕Ͱ͖Δ͔ʁ • Kotlin͸Javaͱͷ૬ޓӡ༻Λ೦಄ʹ͓͍͍ͯΔͷͰɺ Java Ϋϥεͱࣗવʹ૬ޓࢀরͰ͖Δɻ • Kotlinίʔυ͸ൺֱత༰қʹJavaίʔυʹஔ͖׵͑Δ ࣄ͕Մೳɻ(͍͟ͱͳͬͨΒdex ->

    javaʹٯίϯύΠϧͯ͠Javaʹ͢ Δ͜ͱ΋Ͱ͖Δ) • →Kotlin࣮૷ʹ೰Μͩ࣌ʹ෦෼తʹJavaΫϥεʹ͢Δ ͜ͱ΋ग़དྷΔɻؾܰʹJavaͰ΋։ൃͰ͖Δ҆৺ײɻ
  13. Kotlinͷݴޠ࢓༷มߋͰ
 ίʔυ͕ಈ͔ͳ͘ͳΔՄೳੑ͸ʁ • ver1.0ʹͳΓɺ࢓༷มߋϦεΫ͸ݮͬͨɻ • ࠷ۙग़ͨver1.0.3͸όάϑΟΫε͕ϝΠϯɻ • SwiftݴޠΑΓͣͬͱ࢓༷มߋϦεΫ͸௿͍ࢥ ͏

  14. কདྷతʹAndroidͰKotlin͕࢖͑ͳ͘ͳ Δ(ϝϯςφϯε͞Εͳ͘ͳΔ)Մೳੑ͸ʁ • Kotlin͸JetBrains͕ࣾ࡞ͬͨݴޠ • JetBrainsࣾ͸Android Studio։ൃݩ • GoogleެࣜݴޠͰ͸ͳ͍΋ͷͷɺJetBrainsࣾ ͕KotlinʹྗΛೖΕ͍ͯΔɻ

    • Android ͕ Android StudioΛඪ४IDEʹ͍ͯ͠ ΔݶΓ͸ɺ҆৺ͯ͠࠾༻Ͱ͖ͦ͏
  15. AndroidͰଞͷݴޠ͕
 ओྲྀʹͳΔՄೳੑ͸ʁ • Google ͕Android޲͚ݴޠΛ։ൃͨ͠Β͋ΓಘΔ • طଘAndroid OSόʔδϣϯͰ Java9ରԠͱ͔ •

    ग़ͯ΋ීٴ͢Δͷ͸͕͔͔࣌ؒΓͦ͏ɻ
 (౰໘͸ͳͦ͞͏) • Kotlin͸ಋೖࣄྫ΋ग़͖ͯͯɺطʹීٴͭͭ͋͠Δɻ • JavaҎ֎ͰओྲྀͷݴޠʹͳΔՄೳੑ͕Ұ൪ߴ͍ͷ͸ࠓͷͱ͜Ζ Kotlinͩͱࢥ͏ɻ
  16. طଘͷKotlinಋೖࣄྫ • Sansanגࣜձࣾ • Ϋϥ΢υ໊ࢗ؅ཧ Eight 
 ɹhttps://8card.net • גࣜձࣾαΠόʔΤʔδΣϯτ

    • ө૾഑৴ϓϥοτϑΥʔϜ AmebaFresh 
 https://abemafresh.tv • ࢀߟURL: • http://www.slideshare.net/kenichitatsuhama/kotlin-63864380 • http://qiita.com/magie-pooh/items/b1179af28f5e0d50b62a
  17. Kotlin͸ ίʔυ΋ॻ͖΍͘͢ ҆৺ͯ͠࢖͑Δݴޠ

  18. …ͱ͍͏͜ͱͰɺ KotlinΛ ࠾༻͢Δ͜ͱʹͳΓ·ͨ͠

  19. ϋΠϒϦουΞϓϦͱ͸ • ωΠςΟϒίʔυ(Objective C, Swift, Java)Ҏ ֎Λ࢖ͬͯ࡞ΒΕͨΞϓϦͰ͢ɻ • Android/iOSΞϓϦΛಉ͡։ൃݴޠͰ࡞Δ͜ ͱ͕Ͱ͖Δͱ͍͏ಛ௃͕͋Γ·͢ɻ

  20. ϋΠϒϦουΞϓϦͱ͍͑͹ • WebܥΤϯδχΞͰ΋ͬ͘͞ͱ࡞ΕΔ • AndroidɾiOSͷ̎छྨͷ։ൃݴޠΛԱ͑ͳ͘ ͯ΋͍͍ • ̍ͭͷίʔυͰ͍͍ͷͰ҆͘ɺૣ͘Ͱ͖Δ • ͍͍͜ͱͮ͘Ίʂخ͍͠ʂ

    ('ω')
  21. ຊ౰ʁ

  22. ϋΠϒϦουΞϓϦͱ͍͑͹ • (ωΠςΟϒґଘ͠ͳ͍΋ͷͳΒ)WebܥΤϯδχΞͰ΋ͬ͘͞ͱ࡞ΕΔ • (ωΠςΟϒґଘ͠ͳ͍΋ͷͳΒ)AndroidɾiOSͷ̎छྨͷ։ൃํ๏Λ Ա͑ͳͯ͘΋͍͍ • (ωΠςΟϒґଘ͠ͳ͍΋ͷͳΒ)̍ͭͷίʔυͰ͍͍ͷͰ҆͘ɺૣ͘Ͱ ͖Δ •

    →͍͍ΞϓϦΛ࡞Ζ͏ͱ͢Δ΄ͲɺେମωΠςΟϒґଘ͢ΔΑ͏ʹͳ Δ
 (͘͘͞͞ಈ͘Α͏ʹͯ͠඼࣭Λ্͍͛ͨɺpush௨஌ɺΞϓϦ֎෦࿈ܞ ͳͲػೳΛ૿΍͍ͨ͠ etc.)
  23. ϋΠϒϦουΞϓϦ։ൃͷಛ௃ • ͦΕͧΕͷϋΠϒϦουΞϓϦ։ൃʹର͢Δ஌ࣝ͸ඞཁʹͳΔ • ࠷ॳ͔ΒΞϓϦ։ൃίετ͕൒෼ʹ͸ͳΒͳ͍ • ίετΛԼ͛ΒΕΔͷ͸ɺωΠςΟϒ࣮૷ͳ͠Ͱɺ΄΅ط ଘػೳ͚ͩͰ࡞ΕΔ৔߹͚ͩ • ωΠςΟϒ࿈ܞॲཧɺUIվળɺύϑΥʔϚϯε޲্͕ඞཁʹ

    ͳͬͨ৔߹ʹɺ௨ৗͷωΠςΟϒΞϓϦΑΓख͕͔͔ؒΔɻ • ϑϧωΠςΟϒΞϓϦͱಉϨϕϧͷ΋ͷΛ࡞Δͱɺ͕࣌ؒ൒෼ ͰࡁΉͲ͜Ζ͔̎ഒ͔͔Δ͜ͱ΋ɻ
  24. ϋΠϒϦουΞϓϦ։ൃ͸
 ۜͷ஄ؙͰ͸ͳ͍ • ϋΠϒϦουΞϓϦʹ͸ݶք͕͋ΔɻωΠςΟϒݴޠͰผʑʹΞϓϦ Λ࡞Δ΄͏͕ɺϋΠϒϦουΞϓϦͰؤுΔΑΓ͍͍΋ͷ͕ग़དྷΔ • Ϧιʔε(༧ࢉɾ޻਺ɾ޻ظ)Λ͔͚ΒΕͣɺϛχϚϜͰ΋Android/iOS ྆ํରԠ͍ͨ͠ͳΒɺҰ൪ϥΠτͳWebView(ඪ४WebView, Cordova) ϕʔεΞϓϦ͕ݸਓతʹ͸͓͢͢Ί

    • Ϧιʔε͕ݶΒΕΔͳΒɺՄೳͳΒยํ͚ͩ(Android/iOS͚ͩ)ʹߜͬ ͯωΠςΟϒ։ൃ͢Δ΄͏͕͍͍Ͱ͢ɻ(඼࣭ͷ୲อ) • ϋΠϒϦουΞϓϦ։ൃΛબͿʹ͸੍ݶ͕͋Δ͜ͱΛ஌͓ͬͯ͘
  25. Ͳ͏͍͏ํ๏͕͋Δ͔ • WebͰͷ࣮૷ • WebView, Apache Cordova • JS࣮૷ •

    React Native, Titanium(Appcelerator) • ͦͷଞ • Xamarin
  26. ඪ४WebView • OSඪ४ͷWebView(UIWebView, WKWebView) • ΞϓϦ಺ϒϥ΢βͱ΋ݺ͹ΕΔ • WebϖʔδΛΞϓϦ಺Ͱදࣔ͢ΔUI෦඼ (Ϗϡʔ) •

    ϒϥ΢βͱग़དྷΔ͜ͱ͸େମಉ͡ • ωΠςΟϒ࿈ܞ͢Δʹ͸ɺ֤OSͰωΠςΟϒ ࣮૷͕ඞཁ
  27. Apache Cordova • WebViewͷػೳΛ֦ுͨ͠΋ͷ • ग़དྷΔ͜ͱ͸WebView ϓϥεΞϧϑΝ • JS,HTML,CSS͚ͩͰUIΛΞϓϦͬΆ͘͢Δ •

    JS͚ͩͰ(push௨஌ͳͲ)ωΠςΟϒػೳ͕࢖͑Δ • ΋ͱ΋ͱAdobe PhoneGapͱݺ͹Ε͍͕ͯͨɺ Apacheʹدଃ͞ΕͯɺCordovaϓϩδΣΫτͱͳͬͨ
  28. React Native • Facebook͕։ൃݩʢʂʣ • JavaScriptͰϋΠϒϦουΞϓϦ(+Web)։ൃ͕Ͱ͖Δ • React.jsϥΠϒϥϦΛϕʔεʹͨ͠ϋΠϒϦουΞϓϦ։ൃ ༻ϑϨʔϜϫʔΫ •

    WebViewͰ͸ͳ͘JavaScriptΤϯδϯͰಈ͘

  29. React Nativeͷྑ͔ͬͨॴ • JSΤϯδχΞ͕։ൃ͠΍͍͢ • Babel Ͱ ES6͕࢖͑Δ(class, Promise, async)

    • JSϥΠϒϥϦ΋΋ͪΖΜ࢖͑Δ • AltJS ͳΒԿͰ΋࢖͑ͦ͏ • React.jsͷJSXͱಉ͡ه๏ͰϏϡʔͷϨΠΞ΢τఆ͕ٛग़དྷΔ • CSS3ͷFlexboxϨΠΞ΢τ͕࢖͑Δ • ͍·Ͳ͖ͬΆ͍ઃܭࢥ૝(Flux, Redux) • ϒϥ΢βײ֮Ͱɺը໘Ϧϩʔυ͢Δ͚ͩͰ࣮૷֬ೝͰ͖Δ(⌘+R Ωʔ)
  30. React Nativeͷ ؤுͬͯཉ͍͠ॴ • React Nativeຊମ͕·ͩ·ͩ҆ఆ͍ͯ͠ͳ͍ • React NativeΛόʔδϣϯΞοϓ͢ΔͱϥΠϒϥϦ͕ಈ͔ͳ͘ ͳͬͨΓ͢Δ

    • ϋΠϒϦουΞϓϦͱ͍͍ͭͭɺAndroid/iOS ྆ํରԠ͢Δ ͷ͕͔ͳΓେม • ΞϓϦͷڍಈ͕ॏ͍ • ࠓޙʹظ଴
  31. Titanium(Appcelerator) • Titanium Mobileͷ໊લΛฉ͔ͳ͍ͷͰऴΘ͔ͬͨͱࢥͬͨ Β·ͩ׆ൃʹϝϯςφϯε͞Ε͍ͯΔΑ͏Ͱ͢ɻ • ̓೥ؒͷྺ࢙ɺ࣮੷΋͋Γɺ҆ఆ͍ͯ͠Δ(Β͍͠)
 • 2015೥ʹ Appceleratorࣾʹങऩ͞ΕɺAppceleratorͱͯ͠

    ༗ྉԽɺTitanium SDK͸ػೳݶఆ൛ͱͯ͠ແྉͷ··
 • 2016೥ Appcelerator͕͞ΒʹAxwayࣾʹങऩ͞ΕͨΒ͍͠
  32. TitaniumͷࢀߟεϥΠυ http://www.slideshare.net/tdtsh/titanium-2016

  33. ൪֎ɿXamarin • .NETͰ։ൃͰ͖Δ(C#,VB) • Microsoftʹങऩ͞Εɺ࠷ۙແྉԽͨ͠͹͔Γ • දཱ࣮ͬͨ੷͸ࠓͷͱ͜Ζ͋·Γݟ͔ͭΒͳ ͔ͬͨ
 (ϑΣϯϦϧ͞Μʹฉ͍ͯΈ͍ͨ) •

    ࠓޙʹظ଴ʁ࣮੷͕ͳ͍͚͔ͩ΋ɻ
  34. ൪֎ɿήʔϜܥ • Unity, Unreal Engine, Cocos2D… • ήʔϜܥ͸ྫ֎ͰɺϋΠϒϦου։ൃ͕جຊ • جຊతʹήʔϜͷੈքͰ׬݁͢Δ

    • UI͕OSґଘ͠ͳ͍ • ωΠςΟϒ࣮૷ίετΑΓɺήʔϜಛ༗ͷUIɾػ ೳ࣮૷ίετͷ΄͏͕ߴ͍(ϨϯμϦϯάॲཧͳͲ)
  35. ଓ͖ Kotlin࠾༻ϓϩδΣΫτͷ
 ٕज़໘ͷ࿩ http://goo.gl/OAAnwo