IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Scalaって何?Javaとの関係性やメリット・デメリット、転職市場を解説

プログラミング言語を調べていくと「Scala」という言語を見聞きすることがあると思います。しかし、Scalaは未経験者におすすめされている情報も少なく、どういった言語かよくわからない、と感じる方も多いのではないでしょうか? 

この記事では、Scalaの特徴やJavaとの関係性、転職市場の状況などを解説しています。ぜひともご確認ください。

 

※参考:The Scala Programming Language

 

  1. Scalaとは

2003年にリリースされた、オブジェクト指向の言語と関数型言語の特徴をあわせ持ったハイブリッドなプログラミング言語です。2つのプログラミング概念の統合により、小さなプログラムから大規模な開発まで対応できます。また、ScalaはJavaのJVM(Java Virtual Machine|Java仮想マシン)で実行され、Javaのライブラリも利用できるようになっているため、JVM言語にも分類されています。ScalaはJavaの特徴を引き継いで、Javaをより進化させた上位互換の後続言語として、海外、そして日本でも広がりを見せています。

 

ここではまず、関数型プログラミングとオブジェクト指向について説明します。

 

  1. 関数型プログラミング

関数の定義を用いて、関数を組み合わせることによってプログラミングをしていく開発手法です。関数型のプログラミング言語としては、Scala以外に、「Haskell」、「Erlang」、「Scheme」などがあります。

 

関数型プログラミングでは、オブジェクト指向にある、変数を定義し、代入をしてプログラムを構築する手法を用いません。関数型プログラミングは関数の式を重視し、関数を変数のように利用することでプログラミングをしていきます。オブジェクト指向のようにクラスを定義しないため、データの状態を保持せず、あるプログラムの実行が他の処理に悪影響を与える「副作用」がなくなるメリットがあります。

 

また、関数型プログラミング言語には「純粋関数型」と「非純粋関数型」があります。純粋型関数は、参照透過性(関数の数式に同じ値を入れたら、常に同じ処理と同じ計算結果を返す式)を持った記述しかできないもので、非純粋関数型は純粋関数ほど厳格ではなく、ある程度の副作用を許容するものです。Scalaは関数型とオブジェクト指向を組み合わせることができるため、非純粋関数型に分類されます。

 

  1. オブジェクト指向プログラミング

【object】とは、英語で物、物体、目的などの意味を持つ言葉です。オブジェクト指向では、システム全体をモノ(オブジェクト)とモノの組み合わせととらえ、全体を開発していく考え方です。「クラス」という設計図を定義付け、クラスに役割を与え、全体の関係性を決めていくことで開発をしていきます。JavaやPython、Ruby、PHPなど、近年主に利用されているプログラミング言語はオブジェクト指向のものが多くなっています。また、オブジェクト指向は、管理がしやすく柔軟な対応ができ、効率的に開発ができるといったメリットがあります。

 

これら以外のオブジェクト指向の特徴などについては関連記事にまとめていますので、こちらをぜひご参考ください。

 

関連記事:オブジェクト指向とは?初心者向けにわかりやすく解説!

 

  1. Scalaの特徴

Scalaの特徴を4つお伝えします。

 

  1. ハイブリット言語

上記のとおり、Scalaは関数型とオブジェクト指向を組み合わせて開発ができるため、プログラミングの幅が広がります。オブジェクト指向では記述が長くなるコードでも、関数型で記述をすることでコードを短縮できたり、その逆も然りです。そのため、プログラム全体を簡潔に理解しやすくできます。

 

  1. JVMで動作可能

 ScalaはJVMで実行されるため、OSの違いを吸収し、実行環境を選ばずに開発できます。また、Javaと互換性を持ちながらシンプルな記述ができ、Javaのライブラリも利用可能です。そのため、JavaができることのほとんどはScalaでもおこなうことができ、JavaからScalaにシステム移行をしているケースも見受けられます。

 

  1. 非同期プログラミング

非同期プログラミングとは、ひとつのタスクを実行している間に他のタスクにも応答する方法です。Scalaには「Future」という非同期プログラミングに利用するライブラリが標準搭載されているため、大量同時アクセスが発生した場合でもすばやく処理ができます。

 

  1. 並行・分散プログラミング

並行・分散プログラミングとは、一度に複数の手続きをおこなうことです。Scalaは「Akka」というライブラリも標準搭載しており、Akkaはアクターというコンポーネント間のやりとりにより並行・分散プログラミングをおこなうことで、大量同時アクセスに強いシステムを開発できます。

 

  1. Scalaでは何ができる

ScalaはJavaの上位互換のプログラミング言語のため、Javaができることであればなんでもできます。そのため、Webアプリケーションやデスクトップアプリ、スマートフォンアプリ、組み込みシステムなどの開発が可能です。企業では、TwitterやLinkedin、ドワンゴやサイバーエージェントなどがScalaを利用してシステム開発をしています。

あなたに合った仕事が必ず見つかる!
IT・WEB・ゲーム業界の案件が3,000件以上!!
  1. ScalaとJavaの違い・類似点

 JavaとScalaの文法や表記の違いを3つピックアップしています。

 

  1. データ型の宣言

Javaはデータ型を宣言するときにすべてを小文字で記述しますが、Scalaは頭文字を大文字にして記述します。Javaの「short」、「byte」、「int」、「long」などは、Scalaでは「Short」、「Byte」、「Int」、「Long」などとなります。また、Javaのデータ型の種類とScalaのデータ型の種類は同じものが多くなっています。

 

  1. 変数の宣言

Scalaでの変数宣言では、Javaの通常の変数に相当する「var」と、Javaの「final」に相当する「val」を用います。変数宣言の型は【var 変数名:データ型 = 初期値】あるいは【var 変数名 = 初期値】です。また、【var 変数名1,変数名2 = 初期値】で複数の変数を一度に定義できます。

 

  1. メソッドの定義

呼び出し、引数、戻り値など、JavaとScalaのメソッドの定義は似ていますが、 Scalaでは「def」を先頭に置かないとメソッドの定義ができなくなっています。

 

※参考:基本 – Scala Documentation

 

  1. Scalaのメリット

Scalaのメリットを2つお伝えします。

 

  1. エンジニアが少ないため年収が高い

弊社R-Stoneでは、転職時の年収を、企業が提示する想定年収として記載をしております。

 

 

Scalaの求人は全39件と少ないものの、想定最低年収が600万円以上の求人が19件、想定最高年収1,000万円を超える求人が25件、平均年収が約898万円と、給与水準が全体的に高くなっています。IT業界全体を見回しても同じような傾向が見られ、需要のあるプログラミング言語にも関わらず、Scalaを使えるエンジニアが少なくなっていると考えられます。そのため、案件数は少なくとも、Scalaのスキルを習得することで収入が高い企業で働ける可能性があります。

 

  1. オブジェクト指向・関数型プログラミングともに対応している

Scalaはオブジェクト指向と関数型プログラミングに対応しているため、プログラミング時に適切な記述方法を選ぶことでコードを簡潔にし、管理しやすいシステムを開発することができます。また、関数型プログラミングの参照透過性と、Javaに比べてコードの記述量が少なく済む特徴があり、エラーが起きにくいというメリットもあります。

 

  1. Scalaのデメリット

Scalaのデメリットを2つお伝えします。

 

  1. 統合開発環境が充実していない

Scalaは比較的新しいプログラミング言語の部類に入り、2011年頃のTwitterでの利用を機に注目され始めたため、現在でも成長途中といえます。そのため、Scalaに対応している統合開発環境(IDE)の種類が少なくなっています。Javaでよく利用される「Eclipse」や「IntelliJ IDEA」はScalaに対応していますが、他のIDEでの開発を試してみたい方にとって、IDEの選択肢が少ないことはデメリットといえるでしょう。

 

  1. 初心者には難易度が高い

Scalaを使いこなすためにはオブジェクト指向と関数型プログラミングを覚えなくてはいけません。そのため、初心者がいきなりScalaから学習していくとハードルが高くなり過ぎて挫折しかねません。学習プランとしては、まずはJavaから覚え、最終的にはScalaを習得する流れになるでしょう。しかし、Javaも主流のプログラミング言語のなかでは学習難易度が高いものとなっているため、Scala習得までには相応の努力が必要になると認識しておきましょう。

  1. Scalaエンジニアになるために必要なスキル・経験

Scalaエンジニアになるために必要なスキルや経験を5つお伝えします。

 

  1. Scalaの開発経験

Scalaエンジニアとして転職活動をおこなうためには、当然ながらScalaのスキルや経験を持っていたほうがよいでしょう。しかし、Scalaの記述はJavaに似ているため、Javaの開発経験があれば評価をする企業もあります。また、弊社R-StoneのScalaに関する求人では、Javaを含めた他のプログラミング言語の経験があれば応募できるものも存在します。転職後にScalaエンジニアになる方法もあるため、求人条件に該当する方は積極的に応募していきましょう。

 

  1. JVM言語における開発経験

JVMはJavaやKotlin、GroovyなどのJVM言語で利用されているため、いずれかの言語経験があるとScalaエンジニアになるための手助けになります。また、他の主流プログラミング言語は、JVMのようにコンパイル作業をしない、インタプリタ言語が多くなっています。そのため、これからScalaエンジニアを目指す方は、最初のプログラミング言語としてJVM言語を選択するようにしましょう。

 

  1. Javaの知識

ScalaはJavaと文法が似通っていながら、Javaよりもシンプルなコード記述ができるプログラミング言語です。そのため、Javaの知識を蓄え、Javaの文法を意識しながらScalaを学習することにより、効率的に習得できるでしょう。また、ScalaはJavaのライブラリや「Play Framework」、「Spring Boot」といったフレームワークも利用できるため、これらを用いた開発があればそちらも活かすことができるでしょう。

 

  1. オブジェクト指向に関する知識

現在主流のプログラミング言語のほとんどはオブジェクト指向の考え方を採用しており、Scalaの開発でもオブジェクト指向への理解は不可欠です。クラスやインスタンス、メソッドなどの違いを明確に把握し、開発経験を積んでいきましょう。また、プログラミング未経験者の方が効率よく学習するためには、知識のアウトプットが重要になります。学習を続けていくなかで、自分の手を動かしてプログラミングをするようにしましょう。

 

  1. サーバーサイド開発経験

Scala以外でも共通することですが、Webアプリケーション開発ではサーバーサイドの知識が必要になります。そのため、Scala自体への理解はもちろん、GCPやAWSなどのクラウドサービス、データベース言語のSQL、ApacheやNginxなどのWebサーバーのスキルや開発経験があったほうがよいでしょう。また、 Scalaは「Scala.js」を利用すればフロントエンド開発もできるようになります。そのため、Webアプリケーション開発の専門性を高めようと思った際は、Scala.jsの習得を視野に入れることもおすすめします。

 

  1. Scalaエンジニアの将来性

Scalaの需要は日本国内でも増加傾向にあり、Javaの後続言語としても期待されてきています。実際に、PHPやRubyから移行したケースも見受けられ、上述したTwitter、Linkedin、ドワンゴ、サイバーエージェント以外にも、GMOメディア、ビズリーチ、チャットワークなどでScalaは利用されています。プログラミング言語としての学習難易度は高くなっておりますが、給与水準も高く、大手企業なども採用しているScala習得を目指していくことはいかがでしょうか。

 

  1. まとめ

Scalaエンジニアになるためには、まずはJavaを習得し、Javaでの開発経験を積んでいくことをおすすめします。Javaでの開発経験を通して得たオブジェクト指向やJVM、ライブラリなどの知識やスキルは、関数型プログラミングを含むScala習得へのハードルを下げてくれるでしょう。また、プログラミングの実績があれば、入社後にScalaの知識を身につけさせてくれる企業も存在しています。転職情報をよく調べ、転職エージェントなどにも相談をしながら、希望の進路を選べるように行動していきましょう。