Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ScalaとKotlinを業務で使ってみた
Search
Kinoko
September 11, 2017
Technology
5
3.6k
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
1.9k
私が考える理想の開発チーム
sammy7th
0
600
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.5k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
480
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
150
ホットサンドメーカーで作るスイーツ
sammy7th
0
240
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
13k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
820
Git運用基礎
sammy7th
1
260
Other Decks in Technology
See All in Technology
アジャイル開発とスクラム
araihara
0
170
RSNA2024振り返り
nanachi
0
580
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
980
利用終了したドメイン名の最強終活〜観測環境を育てて、分析・供養している件〜 / The Ultimate End-of-Life Preparation for Discontinued Domain Names
nttcom
2
190
リアルタイム分析データベースで実現する SQLベースのオブザーバビリティ
mikimatsumoto
0
1.3k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
960
30分でわかる『アジャイルデータモデリング』
hanon52_
9
2.7k
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
2
2.9k
『衛星データ利用の方々にとって近いようで触れる機会のなさそうな小話 ~ 衛星搭載ソフトウェアと衛星運用ソフトウェア (実物) を動かしながらわいわいする編 ~』 @日本衛星データコミニティ勉強会
meltingrabbit
0
140
Building Products in the LLM Era
ymatsuwitter
10
5.4k
ユーザーストーリーマッピングから始めるアジャイルチームと並走するQA / Starting QA with User Story Mapping
katawara
0
200
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
2
2k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Unsuck your backbone
ammeep
669
57k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Six Lessons from altMBA
skipperchong
27
3.6k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Practical Orchestrator
shlominoach
186
10k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Fireside Chat
paigeccino
34
3.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
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ϋʔυϧ͕ߴ͍··Ͱ͍͍Μ͡Όͳ͍ͷ ͔ʯʮͦͷํ͕ΤϯδχΞͷϨϕϧ͕ҰఆʹอͨΕΔͷ ͰʯͬͯҙݟΛͪΐ͍ͪΐ͍ฉ͘ • Ͱݱঢ়ຊདྷཧղͰ͖ΔྗΛ࣋ͭਓɺඇޮͳֶशΛ ͯ͠͠·͍ɺ࠳ંͨ͠ύλʔϯ͕ଟͦ͏ͩͱײͨ͡ • ͦ͏͍͏ͷ͍ͬͨͳ͍ͳʔͱࢥ͏ͷͰɺզʑܦݧऀ
ࠓޙ৽͍͠ਓ͕ʮֶͿͨΊͷಓےʯͷඋΛ৺͕͚ͨ ͍ͳͱࢥ͍·ͨ͠
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠