scalaをやる時にどのJDKを選べば良いのか問題について
gakuです。
最近scalaを勉強しています。
scalaはJVM上で動く言語で、動作させるのにJDKをインストールする必要があります。
で、そのJDKですが、ありとあらゆるJDKが存在し、かつバージョンもいろいろあり、導入時点でものすごく悩みます。
javaを長年触っている方であれば簡単な問題かもしれませんが、
scalaやる時に結局どのJDKでどのバージョンを利用すれば良いのよ?
と思ったので自分が忘れないためにもどのJDKを利用すれば良いか少しまとめたいと思います。
JDKのLTSという概念
JDKにはLTSという概念があります。
LTSとは「長期サポートを保証しますよ」というものらしく、JDK8とJDK11はLTSとして配布されていますが、最新のJDK15とかJDK14とかはLTSではないです。
「JDKは8をインストールしましょう!」とか「JDKは11をインストールしましょう!」とかそういった記事が多いのは、このLTSという概念があるためです。
個人・企業とわず、長期サポートは欲しいため、この時点でJDKのバージョンは8 or 11に絞られます。
ちなみに、JDKの時期LTSは2021年の秋頃に配布予定のJDK17となるようです。それまでは8 or 11を利用すれば大丈夫だと思います。
scalaの推奨JDKバージョンについて
javaで実装する場合、最新の言語仕様を利用し開発したいと思うので、LTSを考慮するとJDK11をインストールしておけば間違いないですが、scalaの場合は一概にそうとは言えないようです。
scalaは利用するJDKバージョンによって利用可能なscalaバージョンが決まっています。
scala公式のドキュメントを参照すると、以下のようになっています。
JDK Compatibility | Scala Documentation
JDK8だと「2.13.4, 2.12.12, 2.11.12, 2.10.7」のscalaバージョンが利用でき、JDK11だと「2.13.4, 2.12.12, 2.11.12」となっており、JDK8の方が利用可能なscalaのバージョンが多いです。 なので、scalaをやるならJDK8を利用した方が良いと思います。
どのJDKがいいの?
OracleJDKとかOpenJDKとかありとあらゆるJDKがありますが、JDKの選定は「好きなものを選べば良い」と思っています。
(正直JVM系言語初心者にはどのJDKが良いかは不明です。
個人的にbrewから簡単に導入可能でかつ、無料なadoptopenjdkを利用しています。
HotSpot or OpenJ9
adoptopenjdkのダウンロード選択肢としてHotSpotかOpenJ9のどちらをインストールするか選ばないといけません。
HotSpot: OpenJDK コミュニティのJVMで現在最も利用されているJVM。
OpenJ9: EclipseコミュニティーのJVM で、低メモリ使用量と高速起動用に設計されている。
とのことなので、特にこだわりがなければHotSpotで問題ないかなと思います。
結論
scalaをやるなら
「adoptopenjdkのバージョン8でjvmはHotSpot!」
まとめ
正直、java業界はJDK界隈が乱立してて混沌としてる気がしてならない。
JVM系言語の参入障壁がこのJDKに起因している気がするので、なんとかして欲しいものだなと思います。
(ここが理解できていなくて、長年JVM系言語を触ってこなかったのはこの僕です。
とりあえず、現状の解を持てたので、この環境構成で楽しくscala開発をやっていきたいと思います!