🥰

Scala を使っている海外有名(big) tech 企業の紹介

2021/12/02に公開

2021年には Scala 3 がリリースされて激アツなのに、google のサジェストでも "Scala オワコン" がでてきて悲しいですね😢 どこぞのインフルエンサーの影響でしょうか...

ほかにも
有名OSS作者の travis brown さんがサヨナラしちゃったり...
https://meta.plasm.us/posts/2021/11/17/scala-open-source/

JetBrains さん: わが社のスカラチームは二番目に大きなチームですよ😊
JetBrains さん: だれも Scala 使ってないらしいので Fleet で Scala はさぽーとしませ~ん🤪 Kotlin を使ってね😊
(一応、JVM言語の読み込み・解析は可能なようですが Scala のシンタックスハイライトや補完機能は導入されていないようです.)

なんてことがあったり...

Scalaはオワコン?🤔 せっかくなので調べてみました!😖

以下 Scala を使っている big tech とそのユースケースを紹介します.

Airbnb

民泊プラットフォームで有名な Airbnb は次のようなユースケースで Scala を使っているそうです.

  • ビッグデータ
  • 決済フロー

記事
https://scalac.io/blog/financial-intelligence-at-airbnb-with-scala-a-case-study/

Apple

詳しいソースが不明ですが過去の採用の job description などを読むと Apple も Scala を使っているそうです. akka の開発元の typesafe(現 lightbend)で Scala を書いていた Konrad Malawski さんが今は apple の swift の actor 開発に携わっているようです.

Confluent

Kafka は Scala で書かれています(いました. 現在は Java のコードのほうが多いようですね...🤔) 新規に追加されるコードはほとんどがJavaで書かれているようですが😢コア部分は依然として Scala です😊
https://github.com/apache/kafka

Coursera

要約

Databricks

Spark で有名な Databricks はいわずもがな Scala を使っています.

https://github.com/databrickshttps://github.com/databrickslabs/ でいくつも Scala の OSS を公開しています.

Disney Streaming

Scala で Haskell のような関数型プログラミングをできるようにするライブラリ群 Typelevel エコシステムの開発者の Daniel Spiewak さんが所属しています. コードも書けてトークも切れる方で、最近では cats-effect や JVM に関連したトークが youtube に up されています.

https://www.youtube.com/watch?v=EFkpmFt61Jo

また、 Disney Streaming は毎週 ThisWeekInScala という Scala エコシステムのニュースまとめを medium で配信しています.

https://medium.com/disney-streaming/tagged/thisweekinscala

Morgan Stanley

他にも Capital One や Goldman Sachs などの金融機関や Fx の Oanda が Scala を使っているようです(^ω^)

Microsoft

GAFAM の一角 Microsoft も Spark を使っています.

https://github.com/microsoft/SynapseML
最近も SynapseML という Apache Spark むけデータ分析ライブラリを公開しています. これもほぼ Scala で書かれています.
開発者の方が reddit でこんなコメントも残しています😊おっおっおっ

Thanks for your positive feedback!
Many of us feel that scala is the queen of the languages so we almost exclusively code in scala.

Netflix

Netflix もビッグデータ解析に Scala を使っているようです.
Scala や Python で使える Polynote という Jupyter のようなアプリケーションを OSS で公開しています.

https://github.com/polynote/polynote

Stripe

決済サービスの Stripe も Scala を使っています. github organization を見ると数学や物理学のバックグラウンドを持つ Scala エンジニアが多い印象を受けます.
Scala で書かれたベイズ統計の面白そうなライブラリを OSS で公開しているようです. 気になりますね🌲

https://github.com/stripe/rainier

Spotify

spotify ではデータパイプラインに Scala が使われているようです. 下のスライドによると2021年時点で "11,000+ unique Scala data-pipelines" もあるそうです.

https://docs.google.com/presentation/d/1I-vAnaFRvSaLEd6E9AXM2ETaAEDS8QmVtWmlOne5eRg/edit?usp=drivesdk

OSS で Scioをはじめとしていくつかの Scala のライブラリを公開しています.

https://github.com/spotify/scio

TreasureData

Arm Treasure Dataでは Scala の Airframe というフレームワークを開発・利用しているようです.

https://2019.scalamatsuri.org/ja/candidates/TaroLSaito_1/

Tesla

Teska の使用している top 5 languages(Python,SQL,C++,Java,JavaScript) には Scala は残念ながら含まれていませんが,データストリーミングや IoT のデータパイプラインに scala を利用しているようです.

Twitter

皆さん大好きな時間泥棒 SNS も Scala を使っていますよ?(^ω^)
ユースケース

web フレームワーク

データ分析・分散データアプリケーション・集計

Walmart

0からScalaを本番導入して感じたこと・考えたことで話題になった株式会社 Koska の kazchimo さんが walmart の Scala 導入事例の翻訳記事を書いています.

https://kazchimo.com/2021/03/29/scala-walmart/

Wix

Wix というノーコード/ローコードなホームページビルダーの会社も Scala を使っています. 最近 Scala コミュニティで何かと()話題のFPライブラリ ZIO も使っているようです.

https://medium.com/wix-engineering/tagged/scala

まとめ

いかがでしたか?😊 Scala はオワコンなんでしょうか...?

big tech はビッグデータやデータ分析に Scala を使っている傾向がありますね. 初心者でも使いやすい汎用的なプログラミング言語としては Python や golang に後れを取っていますが、特定のコアなユースケース,金融サービスのバックエンドやビッグデータの領域では Scala がその力を発揮しています.
(ただここまで Spark の存在感が強いと Spark が死ぬときが Scala の死ぬときになりそうな印象を持ってしまいますね...)

spotify のスライドにあるように Scala は big tech でも採用・教育が難しいようです... 一部の有名な Scala の OSS が Java に書き換えられているのはそのせいでしょうか... (ただ Scala の扱う問題(分散アーキテクチャ・統計・ビッグデータ・リアクティブプログラミングなど)自体がしばしば難しいので単純に Scala の難易度とみなすのは他の言語と比べて不公平な気がします.)

言語自体の問題よりも Scala エンジニアの採用の難しさがネックなんだろうなぁ、という印象を受けました. みなさん Scala を書きましょう(^ω^)
Scala は難しいというイメージを持たれていますが、例えば Scala の LSP サーバーの metals のコードはとても読みやすいです.

ビルドツールの sbt も少し癖がありますが ビルドに必要な作業を普段から書いているプログラミング言語で書ける(もちろん補完もコンパイルエラーも完全に機能します.)ので慣れれば柔軟にビルド定義を記述できます.
例えば、Java の形態素解析ライブラリである kuromoji は ビルド定義が Maven の pom.xml で書かれています.
https://github.com/atilika/kuromoji

一方で JVM 向け機械学習ライブラリは大部分がJavaで書かれていますが、ビルド定義は Scala で書かれています.
https://github.com/haifengl/smile

大規模なアプリケーションのビルド定義を書く際にちゃんと補完が効く、コンパイルエラーが出る、プロジェクト間の依存関係をプログラムで定義できるのを想像してみましょう😊うれしいですね.

Scala を使う仕事は、外部APIを叩いてデータベースを読み書きして json に色を付けて gRPC を詰め替えるだけの単純作業は少ないはずなので、知的に楽しいことを求めるなら Scala はとてもいい候補になるのではないでしょうか.

Scala のエコシステムは Play や Spark を除けばフレームワークよりもモジュラリティの高いライブラリを好む傾向があります. RoR や Next.js などの重厚なフレームワークのようにロックインに煩わされることなくユースケースに応じて適当なライブラリを組み合わせて使えるメリットはデファクトのフレームワークが少ないデメリットをカバーしてくれるはずです. プロダクションレディな FP なら Typelevel のスタックを、ちょっとしたスクリプトを書くなら Lihaoyi さんのライブラリ群を、開発者向けツールに関心があるなら Scalametaのエコシステムがおすすめですよ(^ω^) Scala はいいぞ(^ω^)

補足

ここまでは酷く Scala びいきな内容でしたが、こういうマーケティングトークを嫌う人も一定数要ると思いここで捕捉しますが、Scalaから一歩離れて冷静に見ると golang や Rust のようなクラウドネイティブな言語, ブラウザで使える JavaScript, Android のシェアをとっている Kotlin, データ分析のデファクトスタンダードである Python (や統計学者・経済学者によく使われている R) などと比べると Scala は分が悪いですね. Dart が Flutter の登場でニーズのある言語に返り咲いたように Apache spark と並ぶ優れたライブラリがあと一つ欲しいところですね...

Discussion