$30 off During Our Annual Pro Sale. View Details »

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

Kinoko
September 11, 2017

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

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

Kinoko

September 11, 2017
Tweet

More Decks by Kinoko

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    "CF"TBNJl͖ͷࢠz

    େࡕͷϑϦʔϥϯεϓϩάϥϚ

    IUUQOPDPOPOFU
    !BBUI
    4DBMBɺ"OESPJE +BWB,PUMJO

    View Slide

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

    View Slide

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

    View Slide

  5. Kotlinͱ͸

    View Slide

  6. Kotlinͱ͸
    • JetBrains͕ࣾ։ൃͨ͠JVMݴޠ
    • ScalaͷӨڹΛ৭ೱ͘ड͚͍ͯΔ
    • Google I/O 2017 ʹͯAndroidͷެࣜ։ൃݴޠͱͯ͠
    αϙʔτ͞ΕΔ͜ͱ͕ൃද͞Εͨ
    • ΋ͱ΋ͱAndroid޲͚Λڧ͘ҙࣝͨ͠࢓༷Ͱ͋
    ΓɺެࣜԽલ͔Β࠾༻ࣄྫ͕૿Ճ܏޲ʹ͋ͬͨ

    View Slide

  7. ScalaͱKotlinͷࣅ͍ͯΔͱ͜Ζ
    • JVM্Ͱಈ࡞͢Δ
    • JavaScript΁ͷτϥϯεύΠϧ؀ڥ΍

    NativeίϯύΠϧ؀ڥ΋͋Δ
    • ੩తܕ෇͚ͷΦϒδΣΫτࢦ޲ݴޠ

    View Slide

  8. ྨࣅػೳͷྫ (͘͝Ұ෦)
    • var/val
    • ܕਪ࿦
    • ηϛίϩϯෆཁ
    • ϓϦϛςΟϒܕ͕ଘࡏ͠ͳ͍
    • case class ͱ data class
    • Ϋϥε΍ϝιου
    • ΦϒδΣΫτ΍ίϯύχΦϯ
    ΦϒδΣΫτ΋͋Δ
    • ϥϜμࣜ
    • ߴ֊ؔ਺
    • ݕࠪྫ֎͕ͳ͍ etc.

    View Slide

  9. ScalaͱKotlinͷ

    ҧ͏ͱ͜Ζ
    (※͜Ε΋ͨ͘͞Μ͋ΔͷͰҰ෦͚ͩ͝঺հ)

    View Slide

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

    View Slide

  11. Android։ൃ
    • Kotlin͸Android։ൃͰར༻͠΍͍͢Α͏ʹ

    ҙࣝͯ͠࡞ΒΕ͍ͯΔ
    • JDK6ͱͷޓ׵ੑ͕อূ͞Ε͍ͯΔ
    • ϥϯλΠϜͷαΠζ͕খ͍͞
    • ϝιου਺͕গͳ͍
    • Scala͸ଟػೳͰ͋ΔͨΊɺαΠζ͕େ͖͍
    • ։ൃ؀ڥͰ͋ΔAndroidStudio͕JetBrainsͷIntelliJ IDEAΛForkͯ͠։ൃ͞
    Ε͍ͯΔͱ͍͏໘΋େ͖͔ͬͨͱࢥΘΕΔ

    View Slide

  12. ؔ਺ܕݴޠཁૉ
    • Scala͸ؔ਺ܕϓϩάϥϛϯάͷελΠϧΛڧ͘औΓ͍Εɺ
    ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ
    • OptionɺEitherɺforࣜͳͲ
    • Kotlin͸ߴ֊ؔ਺΍ϥϜμࣜͳͲͷؔ਺ܕϓϩάϥϛϯάͷཁ
    ૉΛ1෦ܰ͘औΓೖΕΔܗͰ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ
    • είʔϓؔ਺ͳͲ

    View Slide

  13. ͦͷଞҟͳΔػೳͷྫ
    • OptionͱNull҆શ
    • for
    • Scalaʹ͋ͬͯKotlinʹͳ͍΋ͷ
    • Implicit
    • ύλʔϯϚον
    • Kotlinʹ͋ͬͯScalaʹͳ͍΋ͷ
    • είʔϓؔ਺
    • ֦ுؔ਺

    View Slide

  14. ScalaͱKotlinͷจ๏ൺֱ͸

    Լهͷهࣄ͕ৄ͍͠Ͱ͢
    • KotlinϓϩάϥϚͷͨΊͷScalaೖ໳ʢ̍ʣʙجຊฤʙ
    - Qiita 

    http://qiita.com/kmizu/items/9d16360c4d383f3fa2aa
    • KotlinϓϩάϥϚͷͨΊͷScalaೖ໳ʢ̎ʣʙൃలฤʙ
    - Qiita 

    http://qiita.com/kmizu/items/
    db6461485b9dd320de23

    View Slide

  15. ίʔυྫ
    https://github.com/SAMMY7th/aws-lambda-scala
    https://github.com/SAMMY7th/aws-lambda-kotlin
    2016/04ࠒɺAWS-lambdaͰಈ͘botίʔυΛ

    ScalaͱKotlinͰॻ͍ͨ΋ͷΛ͓ݟͤ͠·͢

    View Slide

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

    View Slide

  17. ࡢ೥डୗͨ͠Ҋ݅
    • ։ൃձࣾTࣾ͞Μ͔ΒԼهͷҊ݅Λड஫
    • AndroidΞϓϦ։ൃ (2016/04) ظؒ 3ϲ݄
    • API͔Βऔಘͨ͠஋Λάϥϑදࣔ͢ΔΞϓϦ
    • WebΞϓϦ։ൃ (2016/10) ظؒ4ϲ݄
    • Air̋NBΈ͍ͨͳΞϓϦ
    • AndroidͷํΛKotlinͰɺWebͷํΛPlay2/ScalaͰ։ൃ͠ɺແࣄೲ඼

    View Slide

  18. ։ൃମ੍
    • Android/Kotlin
    • ։ൃɿࢲ

    ίʔυϨϏϡʔɿTࣾͷI͞Μ
    • Play2/Scala
    • ։ൃɿࢲ

    ίʔυϨϏϡʔɿTࣾͷI͞ΜɺTech To Valueͷ͕ͧ͘
    ͞Μ

    View Slide

  19. ࣗ෼ͷײ૝
    • Scala΋Kotlin΋ͲͪΒ΋޷͖
    • ؆ܿͳίʔυΛॻ͖͍ͨͱ͍͏ཁ๬͸ͲͪΒ΋ຬͨͯ͘͠ΕΔ
    • ͨͩɺforࣜ΍ύλʔϯϚονͳͲScalaͷํ͕ศརͩͳʔͱײ͡Δ͜ͱ͸͋Δ
    • AndroidҊ݅͸ެࣜԽ͞ΕͨKotlinΛࠓޙ΋ੵۃతʹ࢖͍͖͍ͬͯͨ
    • ͲͪΒͰ΋͍͍৔߹͸׳Ε͍ͯΔScalaΛબ୒͍͕ͨ͠ɺϥΠϒϥϦ΍ϑϨʔϜϫʔΫࣄ৘Λߟྀ
    ͯ͠બ୒͍͖͍ͯͨ͠
    • WebͷํͰ΋KotlinͰ͍͍ϑϨʔϜϫʔΫ͕Ͱͯ͘Ε͹ɺScalaͰ͸ͳ͘KotlinΛબ୒͢Δ
    Α͏ʹͳΔ͔΋͠Εͳ͍
    • Scala͸͢ͰʹScala੡ͷϥΠϒϥϦ΍ϑϨʔϜϫʔΫ͕ൃల͍ͯ͠Δ͕ɺKotlin͸·ͩ·
    ͩ͜Ε͔Βͱ͍͏ҹ৅

    View Slide

  20. TࣾͷI͞Μʹ͍ͭͯิ଍આ໌
    • I͞Μ͸Kotlin΋Scala΋ܦݧ͸͋Γ·ͤΜͰ͕ͨ͠ɺԼ
    هͷݴޠܦݧ͕͋Γ·͢
    • PHPɺJavaɺSwiftɺRubyɺCɺC++ɺC#ɺ
    PerlɺPython
    • ࣮ࡍʹίʔυΛॻ͘͜ͱ͸͓ئ͍͓ͯ͠Βͣɺଞۀ຿
    ͷยखؒͰࣗྗͰௐ΂ͳ͕ΒϨϏϡʔΛͯ͘͠Ε·͠
    ͨ

    View Slide

  21. KotlinίʔυΛϨϏϡʔͨ͠

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

    View Slide

  22. ScalaίʔυΛϨϏϡʔͨ͠

    I͞Μͷ൓Ԡ
    • ʮScala͜Θ͍ʯ
    • ࢲʮʂʁʯ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. Ҏ্ͷ͜ͱ͔ΒΘ͔ͬͨ
    ۀ຿ͰScalaΛಋೖ
    ͢ΔࡍʹؾΛ͚ͭΔ͜ͱ

    View Slide

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

    View Slide

  30. ະܦݧऀ͕νʔϜʹ͍Δ৔߹
    • ԼهͷΑ͏ͳํ๏ͰֶशͷαϙʔτΛߦ͏
    • ίʔυϨϏϡʔ
    • ϖΞϓϩ
    • ֶशࢿྉͷ࡞੒
    • ద੾ͳॻ੶΍ղઆWebαΠτ΁ͷ༠ಋ
    • ͦͷࡍʮίοϓຊಡΊʯΈ͍ͨͳେࡶ೺ͳ༠ಋͰ͸ͳ͘ɺௐ΂Δͱ
    ͖ͷద੾ͳΩʔϫʔυΛఏࣔ͢Δ
    • ʮଞʹݴޠܦݧ͕͋ΔΜͩͬͨΒͳΜͱ͔ͳΔͰ͠ΐʯͱαϙʔτ͠ͳ͍ͷ͸͓͢
    ͢ΊͰ͖ͳ͍

    View Slide

  31. ະܦݧऀ͔͍͠ͳ͍৔߹
    • ScalaಋೖαϙʔτΛߦ͍ͬͯΔΤϯδχΞ͞
    ΜͷྗΛआΓΔ
    • Tech to Value Co., Ltd. http://www.t2v.jp/
    • Good Flow Technologies http://good-
    flow.com/

    View Slide

  32. ͜ͷ··ͩͱ

    Scalaະܦݧऀͷਓ͕

    ʮScala೉͍͠Μ΍ͬͨΒ΍Ί
    ͱ͔͜ͳɾɾɾʯ

    ͬͯͳΓ͔Ͷͳ͍ͷͰ

    ͪΐͬͱϑΥϩʔΛɾɾɾ

    View Slide

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

    View Slide

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

    View Slide

  35. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide