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.8k
Scala の好きなところ 難しいところ / #scala_waiwai
https://scala-tokyo.connpass.com/event/297260/
Arthur
October 13, 2023
Tweet
Share
More Decks by Arthur
See All by Arthur
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
870
オブザーバビリティプラットフォームの企画からリリースまで──PO・TLから見るMackerelの裏側 / ”ユーザー体験”の起点となるUXとアプリ開発──トヨタ・Nissan・はてなのプロダクトと開発現場から見える、設計の多様なアプローチ【TECH DRIVERS Day1】
arthur1
0
50
オブザーバビリティプラットフォーム開発におけるオブザーバビリティとの向き合い / Hatena Engineer Seminar #34 オブザーバビリティの実現と運用編
arthur1
0
450
デフォルトの16:9(960*540px)のケース / Google Slide Size Test
arthur1
0
3.4k
1920*1080pxに設定したケース / Google Slide Size Test
arthur1
0
3.3k
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
830
AWS AppConfigとOpenFeatureで手早く機能フラグを導入する[LT size] / CloudNative Days Winter 2024 船上LT会
arthur1
0
510
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
760
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
13
4.7k
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
51k
A better future with KSS
kneath
239
17k
Designing for humans not robots
tammielis
253
25k
Unsuck your backbone
ammeep
671
58k
Scaling GitHub
holman
463
140k
Designing for Performance
lara
610
69k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
A designer walks into a library…
pauljervisheath
207
24k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
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