2017/9/9(土) Scala関西Summit 2017での登壇資料です。
ScalaͱKotlinΛۀͰͬͯΈͨAbe Asami
View Slide
ࣗݾհ"CF"TBNJl͖ͷࢠz େࡕͷϑϦʔϥϯεϓϩάϥϚIUUQOPDPOPOFU!BBUI4DBMBɺ"OESPJE +BWB,PUMJO
ࠓͷ༰• ݸਓͰScalaɾKotlinڞʹडୗҊ݅Ͱ࠾༻Λ͠ɺ྆Ҋ݅ͱେ͖ͳͳ͘ೲ͢Δ͜ͱ͕Ͱ͖·ͨ͠• ͦͷࡍ྆Ҋ݅Λख͍͍ͬͯͨͩͨ։ൃձࣾͷΤϯδχΞ͞ΜʹScalaʹରͯ͠ʮ͍͠ʯͱ͍͏ҹΛ๊͔ͤͯ͠·ͬͨͷͰɺͳͥͦ͏ͳͬͯ͠·ͬͨͷ͔Λߟ͑ͯ·ͱΊͯΈ·ͨ͠• ʮScalaͱKotlinΛۀͰͬͯΈͨʯ݁Ռߟ͑ͯΈͨɺScalaΛۀͰಋೖ͢Δͱ͖ʹؾΛ͚ͭΔ͜ͱΛڞ༗͠·͢
• ޙʮScala͍͠ͱݴΘΕͳ͍Α͏ʹ͢Δʹʯͱ͍͏ํͷʹͳͬͯ͠·͍ɺScalaͱKotlinͷٕज़తͳઙ͍༰ʹͱͲ·ͬͯ͠·͍·ͨ͠(͢Έ·ͤΜɾɾɾ)• ख͍͍ͬͯͨͩͨΤϯδχΞ͞ΜͷҙݟΛࡌ͍ͤͯ·͕͢ɺ͋͘·Ͱ1ݸਓͷओ؍Ͱ͢ɻඞͣ͠શһʹͯ·ΔͷͰͳ͍͜ͱྃ͝ঝ͍ͩ͘͞
Kotlinͱ
Kotlinͱ• JetBrains͕ࣾ։ൃͨ͠JVMݴޠ• ScalaͷӨڹΛ৭ೱ͘ड͚͍ͯΔ• Google I/O 2017 ʹͯAndroidͷެࣜ։ൃݴޠͱͯ͠αϙʔτ͞ΕΔ͜ͱ͕ൃද͞Εͨ• ͱͱAndroid͚Λڧ͘ҙ༷ࣝͨ͠Ͱ͋ΓɺެࣜԽલ͔Β࠾༻ࣄྫ͕૿Ճʹ͋ͬͨ
ScalaͱKotlinͷࣅ͍ͯΔͱ͜Ζ• JVM্Ͱಈ࡞͢Δ• JavaScriptͷτϥϯεύΠϧڥ NativeίϯύΠϧڥ͋Δ• ੩తܕ͚ͷΦϒδΣΫτࢦݴޠ
ྨࣅػೳͷྫ (͘͝Ұ෦)• var/val• ܕਪ• ηϛίϩϯෆཁ• ϓϦϛςΟϒܕ͕ଘࡏ͠ͳ͍• case class ͱ data class• Ϋϥεϝιου• ΦϒδΣΫτίϯύχΦϯΦϒδΣΫτ͋Δ• ϥϜμࣜ• ߴ֊ؔ• ݕࠪྫ֎͕ͳ͍ etc.
ScalaͱKotlinͷ ҧ͏ͱ͜Ζ(※͜Εͨ͘͞Μ͋ΔͷͰҰ෦͚ͩ͝հ)
ϏϧυγεςϜ• Scalasbt͕ඪ४Ϗϧυπʔϧ• KoltinGradle͕ඪ४Ϗϧυπʔϧ• ScalaಠࣗͷΤίγεςϜΛߏங͓ͯ͠ΓɺKotlinJavaͷͦΕΛར༻͍ͯ͠Δ• Ͳ͕͍͍ͬͪͱ͔ͳ͍
Android։ൃ• KotlinAndroid։ൃͰར༻͍͢͠Α͏ʹ ҙࣝͯ͠࡞ΒΕ͍ͯΔ• JDK6ͱͷޓੑ͕อূ͞Ε͍ͯΔ• ϥϯλΠϜͷαΠζ͕খ͍͞• ϝιου͕গͳ͍• ScalaଟػೳͰ͋ΔͨΊɺαΠζ͕େ͖͍• ։ൃڥͰ͋ΔAndroidStudio͕JetBrainsͷIntelliJ IDEAΛForkͯ͠։ൃ͞Ε͍ͯΔͱ͍͏໘େ͖͔ͬͨͱࢥΘΕΔ
ؔܕݴޠཁૉ• ScalaؔܕϓϩάϥϛϯάͷελΠϧΛڧ͘औΓ͍Εɺ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ• OptionɺEitherɺforࣜͳͲ• Kotlinߴ֊ؔϥϜμࣜͳͲͷؔܕϓϩάϥϛϯάͷཁૉΛ1෦ܰ͘औΓೖΕΔܗͰ৭ʑͳศརػೳΛఏڙ͍ͯ͠Δ• είʔϓؔͳͲ
ͦͷଞҟͳΔػೳͷྫ• OptionͱNull҆શ• for• Scalaʹ͋ͬͯKotlinʹͳ͍ͷ• Implicit• ύλʔϯϚον• Kotlinʹ͋ͬͯScalaʹͳ͍ͷ• είʔϓؔ• ֦ுؔ
ScalaͱKotlinͷจ๏ൺֱ Լهͷهࣄ͕ৄ͍͠Ͱ͢• KotlinϓϩάϥϚͷͨΊͷScalaೖʢ̍ʣʙجຊฤʙ- Qiita http://qiita.com/kmizu/items/9d16360c4d383f3fa2aa• KotlinϓϩάϥϚͷͨΊͷScalaೖʢ̎ʣʙൃలฤʙ- Qiita http://qiita.com/kmizu/items/db6461485b9dd320de23
ίʔυྫhttps://github.com/SAMMY7th/aws-lambda-scalahttps://github.com/SAMMY7th/aws-lambda-kotlin2016/04ࠒɺAWS-lambdaͰಈ͘botίʔυΛ ScalaͱKotlinͰॻ͍ͨͷΛ͓ݟͤ͠·͢
࣮ࡍʹۀͰͬͨࡍͷ͓
ࡢडୗͨ͠Ҋ݅• ։ൃձࣾTࣾ͞Μ͔ΒԼهͷҊ݅Λड• AndroidΞϓϦ։ൃ (2016/04) ظؒ 3ϲ݄• API͔Βऔಘͨ͠Λάϥϑදࣔ͢ΔΞϓϦ• WebΞϓϦ։ൃ (2016/10) ظؒ4ϲ݄• Air̋NBΈ͍ͨͳΞϓϦ• AndroidͷํΛKotlinͰɺWebͷํΛPlay2/ScalaͰ։ൃ͠ɺແࣄೲ
։ൃମ੍• Android/Kotlin• ։ൃɿࢲ ίʔυϨϏϡʔɿTࣾͷI͞Μ• Play2/Scala• ։ൃɿࢲ ίʔυϨϏϡʔɿTࣾͷI͞ΜɺTech To Valueͷ͕ͧ͘͞Μ
ࣗͷײ• ScalaKotlinͲͪΒ͖• ؆ܿͳίʔυΛॻ͖͍ͨͱ͍͏ཁͲͪΒຬͨͯ͘͠ΕΔ• ͨͩɺforࣜύλʔϯϚονͳͲScalaͷํ͕ศརͩͳʔͱײ͡Δ͜ͱ͋Δ• AndroidҊ݅ެࣜԽ͞ΕͨKotlinΛࠓޙੵۃతʹ͍͖͍ͬͯͨ• ͲͪΒͰ͍͍߹׳Ε͍ͯΔScalaΛબ͍͕ͨ͠ɺϥΠϒϥϦϑϨʔϜϫʔΫࣄΛߟྀͯ͠બ͍͖͍ͯͨ͠• WebͷํͰKotlinͰ͍͍ϑϨʔϜϫʔΫ͕Ͱͯ͘ΕɺScalaͰͳ͘KotlinΛબ͢ΔΑ͏ʹͳΔ͔͠Εͳ͍• Scala͢ͰʹScalaͷϥΠϒϥϦϑϨʔϜϫʔΫ͕ൃల͍ͯ͠Δ͕ɺKotlin·ͩ·ͩ͜Ε͔Βͱ͍͏ҹ
TࣾͷI͞Μʹ͍ͭͯิઆ໌• I͞ΜKotlinScalaܦݧ͋Γ·ͤΜͰ͕ͨ͠ɺԼهͷݴޠܦݧ͕͋Γ·͢• PHPɺJavaɺSwiftɺRubyɺCɺC++ɺC#ɺPerlɺPython• ࣮ࡍʹίʔυΛॻ͘͜ͱ͓ئ͍͓ͯ͠ΒͣɺଞۀͷยखؒͰࣗྗͰௐͳ͕ΒϨϏϡʔΛͯ͘͠Ε·ͨ͠
KotlinίʔυΛϨϏϡʔͨ͠ I͞ΜͷԠ• SwiftʹΑ͘ࣅ͍ͯΔ• ↑͜Εଞͷձࣾ͞ΜʹݴΘΕͨ• Java͕ग़དྷΔਓͳΒ͢ΜͳΓशಘͰ͖ͦ͏• AndroidͰKotlinΛੵۃతʹ͍͖͍ͬͯͨ
ScalaίʔυΛϨϏϡʔͨ͠ I͞ΜͷԠ• ʮScala͜Θ͍ʯ• ࢲʮʂʁʯ
͜ͷɺKotlinͱScalaʹର͢ΔԠͷҧ͍ҰମԿ͕ݪҼͳΜɾɾɾ
I͞ΜʹώΞϦϯάΛͯ͠Έ·ͨ͠
ώΞϦϯά݁Ռ• KotlinJavaͷࣝͰԿͱͳ͘ಡΊͨ͠ॻ͚͚ͨͲɺScalaͦ͏͍͔ͳ͔ͬͨ• ͔Βͳ͍Ωʔϫʔυ͕ग़Δͨͼʹάά͕ͬͨɺҶͮΔࣜʹΘ͔Βͳ͍Ωʔϫʔυ͕૿͑ͯ͠·ͬͯɺΊͪΌͪ͘Ό৭Μͳ͜ͱΛௐͨ• Scalaಛ༗ͷΩʔϫʔυ͕͔ͳΓଟ͍Α͏ʹײͨ͡• ௐͨ݁ՌཧղͰ͖ͳ͔ͬͨΩʔϫʔυ͋ͬͨ• Ϟφυͱ͔
ώΞϦϯά݁Ռ(ଓ͖)• AltJavaͩͱࢥ͍ͬͯͨΒɺJavaʹͳ͍Ϋϥεػೳ͕ଟ͔ͬͨɻผݴޠͩͱ͍͏֮ޛΛ࣋ͬͯΜͰ͓͚Α͔ͬͨ
I͞ΜͷΛฉ͍ͯࢥͬͨ͜ͱ• ScalaଟػೳͰ͋ΔΏ͑ʹɺศར͚ͩͲ֮͑Δ͜ͱଟ͍• ຊؔܕϓϩάϥϛϯάͷཧղઙͯ͘ScalaͷػೳΛ͏͜ͱेͰ͖Δͷʹɺௐ͍ͯ͘͏ͪʹϞφυͳͲͷΩʔϫʔυʹߦ͖͖ͭɺScalaͷཧղʹؔܕϓϩάϥϛϯάͷ͕ࣝඞਢͳͷͩͱ͍͏צҧ͍͕ൃੜ͍ͯ͠Δ• ScalaଞͷݴޠʹൺͯɺֶͿͨΊͷಓے͕උ͞Ε͍ͯͳ͍ʹ͋Δؾ͕ͨ͠
Ҏ্ͷ͜ͱ͔ΒΘ͔ͬͨۀͰScalaΛಋೖ͢ΔࡍʹؾΛ͚ͭΔ͜ͱ
ݱঢ়Scalaɺଞͷݴޠͱൺֱ͢Δͱֶशίετ͕ߴ͍ɻͦͷ͜ͱΛೝ͓ࣝͯ͘͠ɻ
ະܦݧऀ͕νʔϜʹ͍Δ߹• ԼهͷΑ͏ͳํ๏ͰֶशͷαϙʔτΛߦ͏• ίʔυϨϏϡʔ• ϖΞϓϩ• ֶशࢿྉͷ࡞• దͳॻ੶ղઆWebαΠτͷ༠ಋ• ͦͷࡍʮίοϓຊಡΊʯΈ͍ͨͳେࡶͳ༠ಋͰͳ͘ɺௐΔͱ͖ͷదͳΩʔϫʔυΛఏࣔ͢Δ• ʮଞʹݴޠܦݧ͕͋ΔΜͩͬͨΒͳΜͱ͔ͳΔͰ͠ΐʯͱαϙʔτ͠ͳ͍ͷ͓͢͢ΊͰ͖ͳ͍
ະܦݧऀ͔͍͠ͳ͍߹• ScalaಋೖαϙʔτΛߦ͍ͬͯΔΤϯδχΞ͞ΜͷྗΛआΓΔ• Tech to Value Co., Ltd. http://www.t2v.jp/• Good Flow Technologies http://good-flow.com/
͜ͷ··ͩͱ Scalaະܦݧऀͷਓ͕ ʮScala͍͠ΜͬͨΒΊͱ͔͜ͳɾɾɾʯ ͬͯͳΓ͔Ͷͳ͍ͷͰ ͪΐͬͱϑΥϩʔΛɾɾɾ
ݸਓతʹScalaΛֶΜͰΑ͔ͬͨͱײ͡Δ• جຊతʹΦϒδΣΫτࢦͰॻ͖ͳ͕ΒɺؔܕϓϩάϥϛϯάͷύϥμΠϜʹ৮ΕΔ͜ͱ͕Ͱ͖ͨ• ҥߏจ͕ଟ͍ͨΊʮͲ͏͍͏ॻ͖ํͩͱଞͷਓ͕ಡΈ͍͔͢ʯΛҙࣝ͢Δบ͕͍ͭͨ• ScalaΛֶͿ͜ͱʹΑΓɺΤϯδχΞͱͯ͠ͷϨϕϧ͕͕͋ͬͨؾ͕͢Δ
ࠓճͷ݅Ͱߟ͑ͨ͜ͱ• ࠷ۙʮScalaϋʔυϧ͕ߴ͍··Ͱ͍͍Μ͡Όͳ͍ͷ͔ʯʮͦͷํ͕ΤϯδχΞͷϨϕϧ͕ҰఆʹอͨΕΔͷͰʯͬͯҙݟΛͪΐ͍ͪΐ͍ฉ͘• Ͱݱঢ়ຊདྷཧղͰ͖ΔྗΛ࣋ͭਓɺඇޮͳֶशΛͯ͠͠·͍ɺ࠳ંͨ͠ύλʔϯ͕ଟͦ͏ͩͱײͨ͡• ͦ͏͍͏ͷ͍ͬͨͳ͍ͳʔͱࢥ͏ͷͰɺզʑܦݧऀࠓޙ৽͍͠ਓ͕ʮֶͿͨΊͷಓےʯͷඋΛ৺͕͚͍ͨͳͱࢥ͍·ͨ͠
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠