$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scala の好きなところ 難しいところ / #scala_waiwai
Search
Arthur
October 13, 2023
0
1.3k
Scala の好きなところ 難しいところ / #scala_waiwai
https://scala-tokyo.connpass.com/event/297260/
Arthur
October 13, 2023
Tweet
Share
More Decks by Arthur
See All by Arthur
AWS AppConfigとOpenFeatureで手早く機能フラグを導入する[LT size] / CloudNative Days Winter 2024 船上LT会
arthur1
0
82
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
540
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
12
3.1k
Mackerel開発チームの障害対応演習 ──新卒エンジニアが障害対応指揮官を務めるに至るまでのステップ / Mackerel Drink Up 出張版@福岡
arthur1
0
260
slog登場に伴うloggerの取り回し手法の見直し / kamakura.go #6
arthur1
1
2.1k
otelcol receiver 自作RTA / Pepabo Tech Conference #22 春のSREまつり
arthur1
0
3k
見せ算をScalaで実装してみた / Scalaわいわい勉強会 #2
arthur1
0
2.1k
技術習得を支え続けた私の個人開発ヒストリー / Hatena Engineer Seminar #28
arthur1
1
1.7k
学園祭Web開発の現場とPHPのこれまでとこれから ── 技術選定と教育から語る / PHP Conference Japan 2023
arthur1
0
1.1k
Featured
See All Featured
Building an army of robots
kneath
302
43k
BBQ
matthewcrist
85
9.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
A better future with KSS
kneath
238
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
760
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Scaling GitHub
holman
458
140k
Making Projects Easy
brettharned
115
5.9k
Building Your Own Lightsaber
phodgson
103
6.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
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