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.5k
Scala の好きなところ 難しいところ / #scala_waiwai
https://scala-tokyo.connpass.com/event/297260/
Arthur
October 13, 2023
Tweet
Share
More Decks by Arthur
See All by Arthur
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
590
AWS AppConfigとOpenFeatureで手早く機能フラグを導入する[LT size] / CloudNative Days Winter 2024 船上LT会
arthur1
0
290
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
690
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
13
4k
Mackerel開発チームの障害対応演習 ──新卒エンジニアが障害対応指揮官を務めるに至るまでのステップ / Mackerel Drink Up 出張版@福岡
arthur1
0
340
slog登場に伴うloggerの取り回し手法の見直し / kamakura.go #6
arthur1
2
2.9k
otelcol receiver 自作RTA / Pepabo Tech Conference #22 春のSREまつり
arthur1
0
3.3k
見せ算をScalaで実装してみた / Scalaわいわい勉強会 #2
arthur1
0
2.4k
技術習得を支え続けた私の個人開発ヒストリー / Hatena Engineer Seminar #28
arthur1
1
1.9k
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Docker and Python
trallard
44
3.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
4 Signs Your Business is Dying
shpigford
183
22k
Designing for Performance
lara
605
69k
Visualization
eitanlees
146
15k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
A better future with KSS
kneath
238
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
The World Runs on Bad Software
bkeepers
PRO
67
11k
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