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
870
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で実装してみた / Scalaわいわい勉強会 #2
arthur1
0
1.4k
技術習得を支え続けた私の個人開発ヒストリー / Hatena Engineer Seminar #28
arthur1
1
1.2k
学園祭Web開発の現場とPHPのこれまでとこれから ── 技術選定と教育から語る / PHP Conference Japan 2023
arthur1
0
820
仮説検証サイクルでユーザーの声を 高速に叶える「キカク組」の取り組み / Mackerel Drink Up #11 arthur-1
arthur1
0
850
孤独な個人開発からの脱却: バトグラ技術部への憧憬 / 個人開発祭り #2
arthur1
0
630
「新卒エンジニアが1年間で顔を売るために取った行動100連発」/YAPC::Kyoto 2023 前日祭 ネコトーストラボ杯争奪東西対抗LTマッチ
arthur1
0
2.5k
Hatena Engineer Seminar #23 「チームとプロダクトを育てる Mackerel 開発合宿」
arthur1
0
1.6k
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
468
290k
The Pragmatic Product Professional
lauravandoore
25
5.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Web Components: a chance to create the future
zenorocha
305
41k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
A Tale of Four Properties
chriscoyier
151
22k
Six Lessons from altMBA
skipperchong
21
3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
The Mythical Team-Month
searls
216
42k
Designing with Data
zakiwarfel
96
4.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