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 の好きなところ 難しいところ / #scala_waiwai
Search
Arthur
October 13, 2023
0
1.7k
Scala の好きなところ 難しいところ / #scala_waiwai
https://scala-tokyo.connpass.com/event/297260/
Arthur
October 13, 2023
Tweet
Share
More Decks by Arthur
See All by Arthur
デフォルトの16:9(960*540px)のケース / Google Slide Size Test
arthur1
0
2.9k
1920*1080pxに設定したケース / Google Slide Size Test
arthur1
0
2.9k
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
720
AWS AppConfigとOpenFeatureで手早く機能フラグを導入する[LT size] / CloudNative Days Winter 2024 船上LT会
arthur1
0
360
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
730
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
13
4.4k
Mackerel開発チームの障害対応演習 ──新卒エンジニアが障害対応指揮官を務めるに至るまでのステップ / Mackerel Drink Up 出張版@福岡
arthur1
0
370
slog登場に伴うloggerの取り回し手法の見直し / kamakura.go #6
arthur1
2
3.4k
otelcol receiver 自作RTA / Pepabo Tech Conference #22 春のSREまつり
arthur1
0
3.5k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Visualization
eitanlees
146
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Optimizing for Happiness
mojombo
379
70k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Typedesign – Prime Four
hannesfritz
42
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Transcript
Scala の好きなところ 難しいところ id:arthur-1 株式会社はてな 2023/10/13 Scala わいわい勉強会 LT 1
Arthur と申します 株式会社はてな アプリケーションエンジニア 園遊会の隣で圏遊会が開かれてた 大学を卒業後、2022年新卒入社 𝕏: @Arthur1__ 2
Mackerel 作ってます 3
Scala で動いてます Web アプリケーションの Backend が Scala で書かれている with Play
Framework 4
Go も書いてます この辺りのコードは Go : • クローラーなどのマイクロサービス群 • mackerel-agent、プラグイン 5
TypeScript も使ってます フロントエンドは TypeScript その他にも一部マイクロサービスなどで 採用実績あり 6
今日の話 仕事で Scala, Go, TypeScript の 3言語を使っている目線から Scala の好きなところと 難しいところを話します
7
好きなところ 8
Option, Either 型が native にある 9 型で表現されているのでコンパイル時に検 査できる コードを書いてる時の安心感が違う!!
Go の場合 • nil チェック • err が nil ならメインの
返り値は not-nil である べきと言う文化 ◦ これに頼って nil チェックしないと、ラ イブラリの実装ミスで panic することも item := findById(1) if item == nil { log.Fatal(“unexpected nil”) } 10 item, err := findById(1) if err != nil { log.Fatal(err) } item // これはnilじゃないという期待
TypeScript の場合 • undefined との union 型を使うと null 安全に •
if 文書かざるを得ないこと があって Option より面倒 ◦ Optional Chaining も やってきて少し楽に なった const item = “hoge” as string | undefined; item.length; // ‘item’ is possibly ‘undefined’. 11 const item = “hoge” as string | undefined; if (item === undefined) return item.length; // OK! item?.length; // ES2020~ if 不要
裏返しとして 型が合うような関数を頑張って探す 12 scala> val results = Seq(Left(1), Right(2)) val
results: Seq[scala.util.Either[Int,Int]] = List(Left(1), Right(2)) scala> results.filter(_.isLeft) val res1: Seq[scala.util.Either[Int,Int]] = List(Left(1)) これじゃダメ
Seq に生えてる method が強力 Web アプリケーションって、DB に入ってるレコード 群をこねくり回していい感じに返す係(諸説) Enumerable なものを取り扱う道具が
built-in で揃っ ていると最高 Ruby もこの辺結構強い気がする 13
Go / TypeScript の場合 Go • 割と素朴 • Go 1.21
から slices package が登場したものの、もう一声欲 しい ◦ uniq, chunk… TypeScript • map などの高階関数はある • Go よりは充実してるものの、やはり自作することは間々ある 14
他にもいろいろ この辺りが好き: • case class ◦ immutable ◦ 比較が楽 •
pattern match ◦ 代数的データ型では網羅チェックもしてくれる 15
難しいところ 16
誰が書いてもコード同じにならない 色々な書き方ができるので、 習熟度が異なるチームメンバーでコードの 雰囲気も変わってくる 17
例えばエラー処理 手続き型らしい書き方 • if 文 • early return Scala らしい(?)書き方
• 式で頑張る • for comprehension で連ねる 18
生産性が下がっている? Scala らしい書き方ができない、と手を止めてしまう ムーブを見かける 実際には「関数型らしくない」か? Better Java でも十分便利だし価値がある 19
20 Scalable だからね
仕組みでは統一しづらい コードベースの雰囲気がバラバラだととっつきにくい とはいえ、lint ツールで特定の書き方を強制するにも 限度あり チームで Scala を育てる必要があると思う 21
チームで Scala を育てる はてなの技術組織として • 螺旋会談 Mackerel 開発チームとして • サファリツアー
Scala 回 開催 ◦ ちょうど今日決まった 22
他にもいろいろ • implicit parameter ◦ sbt console でコード片をコピペして実行しても まあ動かない •
足回りが弱い気がする ◦ 特にビルドツール ◦ Go のエコシステムが便利すぎて比較するとどう しても見劣りしてしまう 23
まとめ ビギナーなりに Scala を使っていて、こんな 風に思っていますという話をしました 今日はぜひわいわい勉強させてください! 24
hatena.co.jp/recruit 25 25