Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ScalaとKotlinを業務で使ってみた
Search
Kinoko
September 11, 2017
Technology
5
3.7k
ScalaとKotlinを業務で使ってみた
2017/9/9(土) Scala関西Summit 2017での登壇資料です。
Kinoko
September 11, 2017
Tweet
Share
More Decks by Kinoko
See All by Kinoko
自作キーボードにチャレンジしてみた。 ver 2.0
sammy7th
0
2.1k
私が考える理想の開発チーム
sammy7th
0
670
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.6k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
510
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
190
ホットサンドメーカーで作るスイーツ
sammy7th
0
290
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
14k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
880
Git運用基礎
sammy7th
1
290
Other Decks in Technology
See All in Technology
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
15
16k
SREには開発組織全体で向き合う
koh_naga
0
410
AI駆動開発の実践とその未来
eltociear
1
460
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
180
IAMユーザーゼロの運用は果たして可能なのか
yama3133
2
520
日本Rubyの会: これまでとこれから
snoozer05
PRO
5
220
AlmaLinux + KVM + Cockpit で始めるお手軽仮想化基盤 ~ 開発環境などでの利用を想定して ~
koedoyoshida
0
140
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
1.7k
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
2.2k
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
380
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
120
【ServiceNow SNUG Meetup LT deck】WorkFlow Editorの廃止と Flow Designerへの移行戦略
niwato
0
120
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
0
550
Done Done
chrislema
186
16k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
63
For a Future-Friendly Web
brad_frost
180
10k
Design in an AI World
tapps
0
94
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
370
Reality Check: Gamification 10 Years Later
codingconduct
0
1.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
23
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
130
Transcript
ScalaͱKotlinΛۀ ͰͬͯΈͨ Abe Asami
ࣗݾհ "CF"TBNJl͖ͷࢠz େࡕͷϑϦʔϥϯεϓϩάϥϚ IUUQOPDPOPOFU !BBUI 4DBMBɺ"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-scala https://github.com/SAMMY7th/aws-lambda-kotlin 2016/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ϋʔυϧ͕ߴ͍··Ͱ͍͍Μ͡Όͳ͍ͷ ͔ʯʮͦͷํ͕ΤϯδχΞͷϨϕϧ͕ҰఆʹอͨΕΔͷ ͰʯͬͯҙݟΛͪΐ͍ͪΐ͍ฉ͘ • Ͱݱঢ়ຊདྷཧղͰ͖ΔྗΛ࣋ͭਓɺඇޮͳֶशΛ ͯ͠͠·͍ɺ࠳ંͨ͠ύλʔϯ͕ଟͦ͏ͩͱײͨ͡ • ͦ͏͍͏ͷ͍ͬͨͳ͍ͳʔͱࢥ͏ͷͰɺզʑܦݧऀ
ࠓޙ৽͍͠ਓ͕ʮֶͿͨΊͷಓےʯͷඋΛ৺͕͚ͨ ͍ͳͱࢥ͍·ͨ͠
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠