Java開発経験者のための最速Scala入門:覚えるのはこれだけでOK!

最終更新:2020年5月19日

[AD] scalapediaでは記事作成ボランティアを募集しています

「Scalaには興味あるけど、難しそう…」

「どこから手をつけたらいいかわからない…」

というJavaエンジニアの皆さんのために。

この章は、すでにJavaでアプリケーション開発をしたことのある人を対象とする記事です。

最小限の労力でScalaへ移行するために絶対に覚えておきたい知識をまとめます。

JavaからScalaへの乗り換えは必要な知識量が少なく、ハードルが低い!

Javaの開発経験者がまず知っておくべきことは、「JavaからScalaへの乗り換えは必要な知識量が少ない」ということです。

「ScalaはJavaと違って◯◯なんです!」とあれこれ挙げることはできるものの、 なんだかんだ言って、実装上はScalaはJavaのラッパーライブラリみたいなものです。
そう大したものではないのです。

Scala開発チームはこれまでScalaとしての強みを活かせる機能に対して集中して開発リソースを注いできたので、 意外かもしれませんが、実際にはカバーが手薄な分野も多くあります。

正直に言ってしまえば、そのような分野に関してはJavaの機能を使ってもScalaの機能を使った場合と遜色ないコードが書けてしまいます。

現実の開発のシーンにおいても、Scalaエンジニアはコードを書きながら「ここはScalaを使うとよさそう」「ここはJavaのAPIでも十分そう」といった判断を臨機応変に行い、JavaやScalaの機能を適材適所で利用しています。

これを言い換えると、学習の投資対効果が低い分野もあるということです。
このような分野についての学習を後回しにすれば、少ない労力でScalaの魅力を最大限に引き出すことができるのです。

つまり、Scalaを導入するハードルは評判や見た目以上に低いわけですね。

ここまでご理解いただけたでしょうか。それでは、Scalaのメリットを手っ取り早く感じるための方法を以下で解説していきます。

Javaの機能を使えばいいものと、Scalaの機能を使った方がいいものを知っておこう!

Scalaを積極的に使うべき機能の一覧

以下でJavaとScalaを使い分ける具体的な分野について触れていきます。

まずはScalaのAPIを積極的に使った方がいい機能の一覧です。

  • コレクション
  • 非同期処理・並列並行処理
  • 文字列処理
  • 数学処理

これらの機能は、関数型のAPIを使ったり、Scala独自の便利メソッドを使ったりすることでより簡潔に書くことができます。

Scalaを使うことによる恩恵の大きい機能と言えます。

したがって、これらのAPIに関しては積極的に覚えて使うようにしましょう。

Scalaの方が好ましいが、Javaでもよい機能の一覧

以下はScalaのAPIを使ったほうがいいものの、JavaのAPIを使ってもよい機能の一覧です。

  • エラー処理
  • ログ出力
  • テスト

これらは積極的に使ったほうがいい機能ではあるものの、導入コストなど様々な事情により最優先であるとは必ずしも言えない機能です。

もちろん便利ではあるので使ったほうがいいです。 使えそうであればぜひ使ってください。 ただし、覚えるのは最優先ではないですよ、余裕ができ次第でいいですよ、という温度感です。

こうして見ると、重要事項は意外に少ないですよね。

Scalaでやるのも悪くないが、比較的Javaでやったほうがよいものの一覧

次は、どちらかというとJavaを使用した方がよい機能について見ていきます。

  • 日付と時刻
  • IO
  • ファイル操作
  • ネットワーク
  • データベース

これらは関数型言語が苦手とする分野です。

Scalaの強みが活かせない分野なので、素直にJavaのAPIを使えばOKです。

このような場合にも「結局Javaを使ってるじゃん…」と引け目に思うことは全くありません。

ポジティブに捉えれば、Javaと相互運用可能なScalaならではの使い方であり、 Scalaのオブジェクト指向的な良さを活かしているんだとも言えるわけですからね。

2つの大原則

さて、ここまで具体的な機能分野を例に、ScalaのAPIを使うのがいい場合とJavaのAPIで十分な場合について見てきました。

ここでScalaが得意なこととそうではないことを見分ける大原則を挙げます。

  1. JVMの内側だけで済むものはScalaで書く
  2. JVMの境界を跨ぐものはJavaのAPIを活用する

もちろん例外はありますが、原則これに従えばScalaのAPIを使うのがいい場合とJavaのAPIで十分な場合を区別することができます。

1:JVMの内側だけで済むものはScalaでスッキリ書こう

JVMの内側であれば、Scalaの関数型言語としての強みを存分に活かすことができます。

以下のような機能分野に関しては、ScalaのAPIを積極的に活用していきましょう。

  • コレクション

  • 非同期処理・並列並行処理

  • 文字列処理

  • 数学処理

  • エラー処理

  • ログ出力

  • テスト

2:JVMの境界を跨ぐものはJavaのAPIを使えばOK

Scalaに限らず、関数型言語はコンピュータの外部とのやり取りに難があります。

状態が変化するものの扱いが苦手です。

以下のようなJVM外部とのやり取りに関しては、結局のところオブジェクト指向的に操作するのが便利なのです。

  • IO
  • ファイル操作
  • ネットワーク
  • データベース

したがってJavaのAPIを使いましょう。

他の関数型言語では実装が難しいところなので、ここはオブジェクト指向と関数型のハイブリッド言語であるScalaの強みが活きていると言えますね。

大前提:Scalaのコードを書き、その中でJavaのAPIを臨機応変に使っていこう

さて、そもそもの話ですが、Scalaの機能を最大限に活用するためには、当然ですが、Scalaのコードを書く必要があります。

ここまでJavaを使ってもいいんだよと申し上げてきましたが、それはJavaのAPIを使うのはOKという意味でした。
Javaのコードを書くことを積極的に勧めているわけではありません。

Scalaのコンパイラは .java の拡張子のついたファイルに書かれたJavaのコードを認識することができます。
つまりScalaに馴染めないという場合にはJavaを使用することができるわけです。
ただ、それではScalaの機能を最大限に活用することはできません。

ScalaはJavaとの相互運用性を最重要視しているので、JavaっぽいScalaを書くことができるようになっています。
まずはJavaっぽくてもいいからScalaのコードを書くようにしてください。

Javaでできることは、Scalaでも概ね簡単に実現できます。 しかし、Scalaで簡単にできることがJavaでも同様に簡単にできるわけではありません。 ほぼ実現不可能なコードもあります。

これを踏まえると、「とりあえずScalaで書いておくのがおトク」です。

まとめ:まずはコレクションの使い方だけ覚えてScalaを書こう!

Scalaのメリットを感じるための手っ取り早い方法はわかりましたか?

学習の投資対効果の高い分野と低い分野がわかるようになれば、Scalaを使った開発をスムーズに始めることができますね。

もっともScalaの恩恵を感じられるのがコレクションですから、まずはコレクションの操作を覚えましょう。

そしてScalaを書きながら、重要分野を押さえていくのがベストです。

Scala開発のスタートダッシュが決まるといいですね。

サイト内検索