ScalaMatsuri2020に参加した同期からScalaの話を聞いたら面白そうだったのでまとめてみました!

こんにちは、teratail運営チームの髙橋です!
大好きな金木犀の季節はとうに過ぎ去り、今年も冬に近づきつつある、そんな日であります。寒くなりますね!

そんなこんなでまたもやブログの投稿を疎かにしていたのですが、
本日は、ScalaMatsuri2020のイベントレポートのような内容をお届けする回になります!
今年はオンライン開催だったScalaMatsuriですが、スタッフ用運営ルームとして弊社のセミナールームを貸し出しておりました。

とはいえ、
筆者は当日予定が合わず不参加だったので、実際にイベントに参加した同期の古賀くんに聞いた参加の感想と筆者によるScalaの簡単な紹介になります。笑

ScalaMatsuri2020に参加した古賀くんの感想

以下、古賀くんの感想の要約になります

オブジェクト指向や関数型といったパラダイムや型クラスなどの概念は知っていましたが、完成するサービスが同じなら、どんな言語で書いても同じだと思っていました。笑
Scala Matsuriに参加して、言語の特徴によってサービスの向き不向きがあると知りました。例えば、Saasのように長期運用が前提でバグの少なさが求められるサービスには、型安全性を担保できるScalaが向いています。反対に、toC向けのリリース速度が求められるサービスならRailsなどが向いているなど。。
自分が使っている言語とScalaとの比較からそれぞれの良し悪しや、自分が将来、サービスの技術選定する上できっかけとなる知識を今回のイベントで得られたな、と感じています。

筆者はScalaについてほとんど知識がなかったのでフワッと、どんな言語で、どんな特徴があるのか、

「ふむふむ、なるほど」

と、普段使用している言語との違いを認識することができました。

いろいろお話を聞いてみて、
自分でも少し調べてみたいなと思ったので、以下に簡単にまとめてみました!

Scalaってどんな言語?

  • 関数型でありオブジェクト指向のマルチパラダイム
  • Javaの後継言語である
  • 静的型付けの言語である

いろいろと記事を見てみましたが、大体こんな特徴を紹介していたので、これらについて簡単に紹介できたらと思います。

関数型とオブジェクト指向のマルチパラダイム

Scalaは関数型言語とオブジェクト指向言語の両方の特徴のいいとこ取りをしたハイブリットな言語となっています。

オブジェクト指向言語は、JavaやPHP、C++など様々なプログラミング言語で採用されているパラダイムで、設計図にあたるクラスを定義し、そのクラスから実際のモノであるインスタンスを作成し実行する言語です。大きなプログラムもクラス単位に機能を分割して実装していけるため大規模な開発にも対応可能で、現在の開発の現場において主要なパラダイムとなっています。

関数型言語は、例えば、HaskellやLisp、OCamlなどがあります。「関数型」はモノではなく機能に焦点をあて、関数を中心としてプログラムを書くことができる言語です。特に、副作用が無い純粋関数ということが関数型言語を使う上で重要なキーワードとなります。
「副作用がない」とはあまり耳慣れないと思いますが、プログラムにおける「副作用」とは、関数を実行した際になんらかの状態の変化をもたらす事を指し、同じ入力でも実行するたびに出力が変わり得ます。しかし、副作用がなければ、ある値を入力した時、その時の状態に影響されなく常に決まった出力がされることになるため、テストがしやすくなることや、並列化が安全に行えるという利点があります。

これら二つを掛け合わせているハイブリッドな言語がScalaで、大規模な開発にも向き、開発効率や実行速度も向上させることが出来ます。

対して、
ハイブリッドな言語だからこそ、両方の知識を持っていないとその強みを十分に発揮できないことから、どうしても学習コストが嵩んでしまいます。

勉強すべき箇所が多いので勉強が大好きな人にはうってつけの言語かもしれませんが。。。
ということもあり、今のところ使用ユーザーが少ないみたいです。

Javaの後継言語である

Scalaは、コンパイルされるとJava仮想マシン上で動くバイナリになり、Javaが動く環境ならどこでも実行でき、またJavaのライブラリを使用することも可能ですので、「JavaでできることはScalaでもできる!」と言えます。

すでにJavaで開発している会社であれば、これまでの資産やノウハウを引き継いだままScalaに移行することができます。

静的型付け言語である

Scalaは静的型付け言語であるので、変数や関数など全てに型が付いておりコンパイル時にチェックされます。

例えば、SaaSのように長期運用が前提で、バグの少なさが求められるサービスには、型安全性を担保できるScalaは向いています。PHPなどの動的型付け言語では、Date型を期待する変数にstring型が渡されるなど意図しないデータをバリデーションで実行時に防いでいましたがScalaではコンパイル時に型がチェックされるので実行前に防げます。

teratailでのScala

scala_teratail

言語 タグ登録者 質問数 回答率
Scala 1092人 283件 86.2%
Java 13997人 22050件 90.8%
PHP 15982人 33558件 93.0%

やはりJavaやPHPのような、一般的に利用者の多い言語と比べると全体的に数値が低いですね。。

でも回答率は悪くないので、Scalaを勉強してみてわからないことがあったらteratailで質問してみてください!

終わりに

本日はScalaMatsuri2020に参加した古賀くんの感想と筆者が調べた簡単なScalaの紹介でした。
Scala、何やら良さそうな雰囲気でした!

筆者がよく使用するTwitterでもScalaが採用されているみたいで、調べてみるとScalaを使ったサービスというのは身の回りに多いのかもしれないな、と感じました。
自分が使用しているサービスがどんな言語でできているのかを調べると、知らない言語と遭遇できて運命の出会いが待っているのかもしれません。

今、新サービスの技術選定を進めている方や新しく勉強を始めようかと考えている方は、ぜひ、Scalaを使用・学習の候補に入れてみてください!

ScalaMatsuri2020の講演内容やScalaの転職市場動向などをもう少し知りたいな、という方は、こちらの内容も併せて読んでみてはいかがでしょうか!