ScalaとKotlinを業務で使ってみた

87e6be3b5dcac822e5dfd974ba65045a?s=47 Kinoko
September 11, 2017

 ScalaとKotlinを業務で使ってみた

2017/9/9(土) Scala関西Summit 2017での登壇資料です。

87e6be3b5dcac822e5dfd974ba65045a?s=128

Kinoko

September 11, 2017
Tweet

Transcript

  1. ScalaͱKotlinΛۀ຿ Ͱ࢖ͬͯΈͨ Abe Asami

  2. ࣗݾ঺հ "CF"TBNJl͖ͷࢠz
 େࡕͷϑϦʔϥϯεϓϩάϥϚ IUUQOPDPOPOFU !BBUI 4DBMBɺ"OESPJE +BWB,PUMJO

  3. ࠓ೔ͷ಺༰ • ݸਓͰScalaɾKotlinڞʹडୗҊ݅Ͱ࠾༻Λ͠ɺ྆Ҋ݅ͱ΋େ ͖ͳ໰୊ͳ͘ೲ඼͢Δ͜ͱ͕Ͱ͖·ͨ͠ • ͦͷࡍ྆Ҋ݅Λख఻͍͍ͬͯͨͩͨ։ൃձࣾͷΤϯδχΞ͞ ΜʹScalaʹରͯ͠͸ʮ೉͍͠ʯͱ͍͏ҹ৅Λ๊͔ͤͯ͠·ͬ ͨͷͰɺͳͥͦ͏ͳͬͯ͠·ͬͨͷ͔Λߟ͑ͯ·ͱΊͯΈ· ͨ͠ •

    ʮScalaͱKotlinΛۀ຿Ͱ࢖ͬͯΈͨʯ݁Ռߟ͑ͯΈͨɺScala Λۀ຿Ͱಋೖ͢Δͱ͖ʹؾΛ͚ͭΔ͜ͱΛڞ༗͠·͢
  4. • ޙ൒͸ʮScala೉͍͠ͱݴΘΕͳ͍Α͏ʹ͢Δ ʹ͸ʯͱ͍͏ํ޲ͷ࿩ʹͳͬͯ͠·͍ɺScala ͱKotlinͷٕज़తͳ࿩͸ઙ͍಺༰ʹͱͲ·ͬͯ ͠·͍·ͨ͠(͢Έ·ͤΜɾɾɾ) • ख఻͍͍ͬͯͨͩͨΤϯδχΞ͞ΜͷҙݟΛࡌ ͍ͤͯ·͕͢ɺ͋͘·Ͱ1ݸਓͷओ؍Ͱ͢ɻඞ ͣ͠΋શһʹ౰ͯ͸·Δ΋ͷͰ͸ͳ͍͜ͱ͸͝ ྃঝ͍ͩ͘͞

  5. Kotlinͱ͸

  6. Kotlinͱ͸ • JetBrains͕ࣾ։ൃͨ͠JVMݴޠ • ScalaͷӨڹΛ৭ೱ͘ड͚͍ͯΔ • Google I/O 2017 ʹͯAndroidͷެࣜ։ൃݴޠͱͯ͠

    αϙʔτ͞ΕΔ͜ͱ͕ൃද͞Εͨ • ΋ͱ΋ͱAndroid޲͚Λڧ͘ҙࣝͨ͠࢓༷Ͱ͋ ΓɺެࣜԽલ͔Β࠾༻ࣄྫ͕૿Ճ܏޲ʹ͋ͬͨ
  7. ScalaͱKotlinͷࣅ͍ͯΔͱ͜Ζ • JVM্Ͱಈ࡞͢Δ • JavaScript΁ͷτϥϯεύΠϧ؀ڥ΍
 NativeίϯύΠϧ؀ڥ΋͋Δ • ੩తܕ෇͚ͷΦϒδΣΫτࢦ޲ݴޠ

  8. ྨࣅػೳͷྫ (͘͝Ұ෦) • var/val • ܕਪ࿦ • ηϛίϩϯෆཁ • ϓϦϛςΟϒܕ͕ଘࡏ͠ͳ͍

    • case class ͱ data class • Ϋϥε΍ϝιου • ΦϒδΣΫτ΍ίϯύχΦϯ ΦϒδΣΫτ΋͋Δ • ϥϜμࣜ • ߴ֊ؔ਺ • ݕࠪྫ֎͕ͳ͍ etc.
  9. ScalaͱKotlinͷ
 ҧ͏ͱ͜Ζ (※͜Ε΋ͨ͘͞Μ͋ΔͷͰҰ෦͚ͩ͝঺հ)

  10. ϏϧυγεςϜ • Scala͸sbt͕ඪ४Ϗϧυπʔϧ • Koltin͸Gradle͕ඪ४Ϗϧυπʔϧ • Scala͸ಠࣗͷΤίγεςϜΛߏங͓ͯ͠Γɺ Kotlin͸JavaͷͦΕΛར༻͍ͯ͠Δ • Ͳ͕͍͍ͬͪͱ͔͸ͳ͍

  11. Android։ൃ • Kotlin͸Android։ൃͰར༻͠΍͍͢Α͏ʹ
 ҙࣝͯ͠࡞ΒΕ͍ͯΔ • JDK6ͱͷޓ׵ੑ͕อূ͞Ε͍ͯΔ • ϥϯλΠϜͷαΠζ͕খ͍͞ • ϝιου਺͕গͳ͍

    • Scala͸ଟػೳͰ͋ΔͨΊɺαΠζ͕େ͖͍ • ։ൃ؀ڥͰ͋ΔAndroidStudio͕JetBrainsͷIntelliJ IDEAΛForkͯ͠։ൃ͞ Ε͍ͯΔͱ͍͏໘΋େ͖͔ͬͨͱࢥΘΕΔ
  12. ؔ਺ܕݴޠཁૉ • Scala͸ؔ਺ܕϓϩάϥϛϯάͷελΠϧΛڧ͘औΓ͍Εɺ ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ • OptionɺEitherɺforࣜͳͲ • Kotlin͸ߴ֊ؔ਺΍ϥϜμࣜͳͲͷؔ਺ܕϓϩάϥϛϯάͷཁ ૉΛ1෦ܰ͘औΓೖΕΔܗͰ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ •

    είʔϓؔ਺ͳͲ
  13. ͦͷଞҟͳΔػೳͷྫ • OptionͱNull҆શ • for • Scalaʹ͋ͬͯKotlinʹͳ͍΋ͷ • Implicit •

    ύλʔϯϚον • Kotlinʹ͋ͬͯScalaʹͳ͍΋ͷ • είʔϓؔ਺ • ֦ுؔ਺
  14. ScalaͱKotlinͷจ๏ൺֱ͸
 Լهͷهࣄ͕ৄ͍͠Ͱ͢ • KotlinϓϩάϥϚͷͨΊͷScalaೖ໳ʢ̍ʣʙجຊฤʙ - Qiita 
 http://qiita.com/kmizu/items/9d16360c4d383f3fa2aa • KotlinϓϩάϥϚͷͨΊͷScalaೖ໳ʢ̎ʣʙൃలฤʙ

    - Qiita 
 http://qiita.com/kmizu/items/ db6461485b9dd320de23
  15. ίʔυྫ https://github.com/SAMMY7th/aws-lambda-scala https://github.com/SAMMY7th/aws-lambda-kotlin 2016/04ࠒɺAWS-lambdaͰಈ͘botίʔυΛ
 ScalaͱKotlinͰॻ͍ͨ΋ͷΛ͓ݟͤ͠·͢

  16. ࣮ࡍʹۀ຿Ͱ࢖ͬͨࡍͷ͓࿩

  17. ࡢ೥डୗͨ͠Ҋ݅ • ։ൃձࣾTࣾ͞Μ͔ΒԼهͷҊ݅Λड஫ • AndroidΞϓϦ։ൃ (2016/04) ظؒ 3ϲ݄ • API͔Βऔಘͨ͠஋Λάϥϑදࣔ͢ΔΞϓϦ

    • WebΞϓϦ։ൃ (2016/10) ظؒ4ϲ݄ • Air̋NBΈ͍ͨͳΞϓϦ • AndroidͷํΛKotlinͰɺWebͷํΛPlay2/ScalaͰ։ൃ͠ɺແࣄೲ඼
  18. ։ൃମ੍ • Android/Kotlin • ։ൃɿࢲ
 ίʔυϨϏϡʔɿTࣾͷI͞Μ • Play2/Scala • ։ൃɿࢲ


    ίʔυϨϏϡʔɿTࣾͷI͞ΜɺTech To Valueͷ͕ͧ͘ ͞Μ
  19. ࣗ෼ͷײ૝ • Scala΋Kotlin΋ͲͪΒ΋޷͖ • ؆ܿͳίʔυΛॻ͖͍ͨͱ͍͏ཁ๬͸ͲͪΒ΋ຬͨͯ͘͠ΕΔ • ͨͩɺforࣜ΍ύλʔϯϚονͳͲScalaͷํ͕ศརͩͳʔͱײ͡Δ͜ͱ͸͋Δ • AndroidҊ݅͸ެࣜԽ͞ΕͨKotlinΛࠓޙ΋ੵۃతʹ࢖͍͖͍ͬͯͨ •

    ͲͪΒͰ΋͍͍৔߹͸׳Ε͍ͯΔScalaΛબ୒͍͕ͨ͠ɺϥΠϒϥϦ΍ϑϨʔϜϫʔΫࣄ৘Λߟྀ ͯ͠બ୒͍͖͍ͯͨ͠ • WebͷํͰ΋KotlinͰ͍͍ϑϨʔϜϫʔΫ͕Ͱͯ͘Ε͹ɺScalaͰ͸ͳ͘KotlinΛબ୒͢Δ Α͏ʹͳΔ͔΋͠Εͳ͍ • Scala͸͢ͰʹScala੡ͷϥΠϒϥϦ΍ϑϨʔϜϫʔΫ͕ൃల͍ͯ͠Δ͕ɺKotlin͸·ͩ· ͩ͜Ε͔Βͱ͍͏ҹ৅
  20. TࣾͷI͞Μʹ͍ͭͯิ଍આ໌ • I͞Μ͸Kotlin΋Scala΋ܦݧ͸͋Γ·ͤΜͰ͕ͨ͠ɺԼ هͷݴޠܦݧ͕͋Γ·͢ • PHPɺJavaɺSwiftɺRubyɺCɺC++ɺC#ɺ PerlɺPython • ࣮ࡍʹίʔυΛॻ͘͜ͱ͸͓ئ͍͓ͯ͠Βͣɺଞۀ຿ ͷยखؒͰࣗྗͰௐ΂ͳ͕ΒϨϏϡʔΛͯ͘͠Ε·͠

    ͨ
  21. KotlinίʔυΛϨϏϡʔͨ͠
 I͞Μͷ൓Ԡ • SwiftʹΑ͘ࣅ͍ͯΔ • ↑͜Ε͸ଞͷձࣾ͞Μʹ΋ݴΘΕͨ • Java͕ग़དྷΔਓͳΒ͢ΜͳΓशಘͰ͖ͦ͏ • AndroidͰ͸KotlinΛੵۃతʹ࢖͍͖͍ͬͯͨ

  22. ScalaίʔυΛϨϏϡʔͨ͠
 I͞Μͷ൓Ԡ • ʮScala͜Θ͍ʯ • ࢲʮʂʁʯ

  23. ͜ͷɺKotlinͱScalaʹର͢Δ ൓Ԡͷҧ͍͸ҰମԿ͕ ݪҼͳΜ΍ɾɾɾ

  24. I͞Μʹ ώΞϦϯάΛͯ͠Έ·ͨ͠

  25. ώΞϦϯά݁Ռ • Kotlin͸Javaͷ஌ࣝͰԿͱͳ͘ಡΊͨ͠ॻ͚͚ͨͲɺScala͸ͦ͏͸ ͍͔ͳ͔ͬͨ • ෼͔Βͳ͍Ωʔϫʔυ͕ग़Δͨͼʹάά͕ͬͨɺҶͮΔࣜʹΘ ͔Βͳ͍Ωʔϫʔυ͕૿͑ͯ͠·ͬͯɺΊͪΌͪ͘Ό৭Μͳ͜ ͱΛௐ΂ͨ • Scalaಛ༗ͷΩʔϫʔυ͕͔ͳΓଟ͍Α͏ʹײͨ͡

    • ௐ΂ͨ݁ՌཧղͰ͖ͳ͔ͬͨΩʔϫʔυ΋͋ͬͨ • Ϟφυͱ͔
  26. ώΞϦϯά݁Ռ(ଓ͖) • AltJavaͩͱࢥ͍ͬͯͨΒɺJavaʹ͸ͳ͍Ϋϥ ε΍ػೳ͕ଟ͔ͬͨɻผݴޠͩͱ͍͏֮ޛΛ ࣋ͬͯ௅ΜͰ͓͚͹Α͔ͬͨ

  27. I͞Μͷ࿩Λฉ͍ͯࢥͬͨ͜ͱ • Scala͸ଟػೳͰ͋ΔΏ͑ʹɺศར͚ͩͲ֮͑Δ͜ͱ͸ଟ͍ • ຊ౰͸ؔ਺ܕϓϩάϥϛϯά΁ͷཧղ͸ઙͯ͘΋Scalaͷػ ೳΛ࢖͏͜ͱ͸े෼Ͱ͖Δͷʹɺௐ΂͍ͯ͘͏ͪʹϞφυͳ ͲͷΩʔϫʔυʹߦ͖͖ͭɺScalaͷཧղʹ͸ؔ਺ܕϓϩά ϥϛϯάͷ஌͕ࣝඞਢͳͷͩͱ͍͏צҧ͍͕ൃੜ͍ͯ͠Δ • Scala͸ଞͷݴޠʹൺ΂ͯɺֶͿͨΊͷಓے͕੔උ͞Ε͍ͯ

    ͳ͍܏޲ʹ͋Δؾ͕ͨ͠
  28. Ҏ্ͷ͜ͱ͔ΒΘ͔ͬͨ ۀ຿ͰScalaΛಋೖ ͢ΔࡍʹؾΛ͚ͭΔ͜ͱ

  29. ݱঢ়Scala͸ɺଞͷݴޠͱൺֱ͢Δͱֶशίετ ͕ߴ͍ɻͦͷ͜ͱΛೝ͓ࣝͯ͘͠ɻ

  30. ະܦݧऀ͕νʔϜʹ͍Δ৔߹ • ԼهͷΑ͏ͳํ๏ͰֶशͷαϙʔτΛߦ͏ • ίʔυϨϏϡʔ • ϖΞϓϩ • ֶशࢿྉͷ࡞੒ •

    ద੾ͳॻ੶΍ղઆWebαΠτ΁ͷ༠ಋ • ͦͷࡍʮίοϓຊಡΊʯΈ͍ͨͳେࡶ೺ͳ༠ಋͰ͸ͳ͘ɺௐ΂Δͱ ͖ͷద੾ͳΩʔϫʔυΛఏࣔ͢Δ • ʮଞʹݴޠܦݧ͕͋ΔΜͩͬͨΒͳΜͱ͔ͳΔͰ͠ΐʯͱαϙʔτ͠ͳ͍ͷ͸͓͢ ͢ΊͰ͖ͳ͍
  31. ະܦݧऀ͔͍͠ͳ͍৔߹ • ScalaಋೖαϙʔτΛߦ͍ͬͯΔΤϯδχΞ͞ ΜͷྗΛआΓΔ • Tech to Value Co., Ltd.

    http://www.t2v.jp/ • Good Flow Technologies http://good- flow.com/
  32. ͜ͷ··ͩͱ
 Scalaະܦݧऀͷਓ͕
 ʮScala೉͍͠Μ΍ͬͨΒ΍Ί ͱ͔͜ͳɾɾɾʯ
 ͬͯͳΓ͔Ͷͳ͍ͷͰ
 ͪΐͬͱϑΥϩʔΛɾɾɾ

  33. ݸਓతʹScalaΛֶΜͰΑ͔ͬͨ ͱײ͡Δ఺ • جຊతʹΦϒδΣΫτࢦ޲Ͱॻ͖ͳ͕Βɺؔ਺ܕ ϓϩάϥϛϯάͷύϥμΠϜʹ৮ΕΔ͜ͱ͕Ͱ͖ ͨ • ౶ҥߏจ͕ଟ͍ͨΊʮͲ͏͍͏ॻ͖ํͩͱଞͷਓ ͕ಡΈ΍͍͔͢ʯΛҙࣝ͢Δบ͕͍ͭͨ •

    ScalaΛֶͿ͜ͱʹΑΓɺΤϯδχΞͱͯ͠ͷϨϕ ϧ͕͕͋ͬͨؾ͕͢Δ
  34. ࠓճͷ݅Ͱߟ͑ͨ͜ͱ • ࠷ۙʮScala͸ϋʔυϧ͕ߴ͍··Ͱ͍͍Μ͡Όͳ͍ͷ ͔ʯʮͦͷํ͕ΤϯδχΞͷϨϕϧ͕ҰఆʹอͨΕΔͷ Ͱ͸ʯͬͯҙݟΛͪΐ͍ͪΐ͍ฉ͘ • Ͱ΋ݱঢ়ຊདྷཧղͰ͖ΔྗΛ࣋ͭਓ΋ɺඇޮ཰ͳֶशΛ ͯ͠͠·͍ɺ࠳ંͨ͠ύλʔϯ͕ଟͦ͏ͩͱײͨ͡ • ͦ͏͍͏ͷ͸΋͍ͬͨͳ͍ͳʔͱࢥ͏ͷͰɺզʑܦݧऀ

    ͸ࠓޙ৽͍͠ਓ͕ʮֶͿͨΊͷಓےʯͷ੔උΛ৺͕͚ͨ ͍ͳͱࢥ͍·ͨ͠
  35. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠