注目のプログラミング言語「Scala」とは?Javaとの関係性やScalaで作られたサービスを解説
ITトレンドに敏感な方が注目する「Scala」というプログラミング言語はご存知でしょうか?本記事では注目のプログラミング言語「Scala」について、その成り立ちやメリット・デメリット、実際にScalaが使用されているサービスなどを幅広く解説します。「Scala」言語について体系的に学びましょう。
目次
Scalaとは
Scalaの成り立ち
Scalaはオブジェクト指向言語と関数型言語それぞれの特徴を持ったハイブリッド言語です。スイス連邦工科大学のマーティン・オーダスキー氏によって設計・開発されました。
ScalaにはJavaで出来る事が全て出来ると言う特徴が有り、「Javaの後継言語」「幅広い開発領域で使用する事ができる言語」としてじわじわと人気が出てきています。
オブジェクト指向と関数型プログラミングという少々難しい単語も出てきましたが、 Scalaの優位性を知る上でこの2つは理解する必要があるのでそれぞれを次の項目で説明します。
オブジェクト指向とは?
オブジェクト指向とは、共通点のある要素を「クラス」としてまとめ、管理する開発手法です。
たとえば、何か機能を作りたい場合、1から全てを作ろうとすると大変です。しかし、オブジェクト指向で書くことで、クラスにデータを渡すだけで、簡単に機能を用意することが可能です。このようにオブジェクト指向とは、開発を楽にするために考えられた物と言って良いでしょう。
大型開発の際にはミスや工数の削減など、共同作業の利便性を上げるための開発手法です。
関数型プログラミングとは?
関数型プログラミングは、数学的な関数の組み合わせで記述する開発手法です。
数学的な関数とは、例えば y=2x。xが2ならばyは4になりますし、xが4ならyは8になります。
関数型プログラミングとは、この関数の方式をプログラミングに落とし込んだもので、xに何を入れるかによってyの表示結果を決定しようとする方式です。
このように、引数の値(x)が定まれば結果(y)も定まることを、参照透過性と言います。
一連の記述が数式的に行われ、プログラムの細部まで細かい静的処理が行われることで、強固なプログラムを組むことができるのが特徴です。
ScalaとJavaの関係
ScalaはJVM(Java Virtual Machine )と呼ばれるJava仮想マシン上で動作する事ができます。
JVMとは、Javaで記述したソースコードをパソコンで読みとってもらうための通訳機能です。Javaで記述されたソースコードはJVMで処理され、JVMがMac、Windows、Linuxなど様々なOSとやり取りしてくれます。
つまり、Javaで行う膨大な処理を簡単に記述できるようにしたものがScalaであると思って良いでしょう。
ScalaはこのJVM上で動かす事ができるため、OSを気にしたプログラミング処理を行う必要がありません。また、誕生から20年以上蓄積されてきたJavaの膨大なライブラリーを好きに使用出来るわけですから、他の言語と比較しても大きな有用性があると言えます。
Javaとの具体的な共通点と相違点は?
ScalaはJavaとの関係性が深い言語ですので、プログラムソースの書き方や関数について類似する部分が多くあります。当然ながら、Javaとの違いも数多く見られます。
ここではJavaとScalaの共通点と相違点について、その一部を説明しましょう。
変数の宣言
JavaとScalaに共通する要素の一つが変数の宣言です。Scalaで使われる代表的な変数の型は「var」と「val」です。
「var」は代入が可能な変数、「val」は代入不可の変数(定数)を表します。一方、Javaでは先頭に「final」という文字を置くことで定数を宣言します。
メソッドの定義
Javaではメソッドという形で一連の決められた処理を定義して、プログラムの中で使いまわすことが一般的です。Scalaでも同様にメソッドを定義することができます。
メソッド定義の際に、引数、戻り値やそれらの型を記載する必要がある点は、JavaもScalaも同じです。一方で、メソッド定義の前に「def」という文字を置くのがScalaに独特な部分となります。
型の宣言
多くのプログラミング言語と同様に、Scalaでも数字や文字列の型を使います。しかも、Scalaで使う型はJavaとある1点を除いて同じです。
1点の違いとは、Javaで使う型が全て小文字で表されるのに対して、Scalaでは一文字目が大文字になるということです。
具体例な例をあげると、Javaではint型変数をintで宣言しますがScalaで「Int」という表記で宣言します。Javaの経験がある人にとっては、Scalaの型は非常になじみのある部分になります。
Scalaのメリット
オブジェクト指向でも関数型プログラミングでも好きな方を選択出来る
章の最初でオブジェクト指向と関数型プログラミングについて触れましたが、Scalaでは、どちらかを使ってプログラミングしてくださいと言ったルールが存在しません。そのため開発者はオブジェクト指向の記述が適しているところはオブジェクト指向で、関数型プログラミングが適しているところは関数型プログラミングで好きに記述する事が出来ます。
他の言語と比べて年収が高い
2018年にビズリーチが行なった国内のプログラミング言語別の平均年収ランキングによると、Scalaは600万円と一番高水準に位置しており、最大額は1300万円にものぼる事が分かりました。
これは、世界的にもScalaを使用した開発を推奨している企業が増えているのに対して、コードを書けるエンジニアが少ない事が原因のようです。
高収入を狙いたいエンジニアの方はScalaを勉強してみると言うのも一つの手だと思います。
Scalaのデメリット
Javaとの親和性が高く、将来性もあるScalaですがデメリットもあります。ここからはScalaのデメリットについて見ていきましょう。
プログラミング初心者にとって習得のハードルが高い
Scalaはオブジェクト指向と関数型プログラミングの2つの考え方を含むため、当然ながら両方の考え方について知っておく必要があります。
Javaの経験者であれば、オブジェクト指向の考え方は身についている一方で、初心者にとってはオブジェクト指向と関数型プログラミングの両方を習得していくのは厳しい道のりだといえます。
統合開発環境(IDE)が発展途上
Scalaはまだまだ後発のプログラミング言語です。そのため、メジャーな言語と比較するとIDEの種類もまだまだ充実しているとはいえません。そういった面では、やはり学習ハードルは高い言語と言えるでしょう。
現状では「IntelliJ IDEA」と「Eclipse」が主流なIDEとなっていますが、今後Scalaの利用が増えていくにつれてより高機能なIDEがリリースされていくものと思われます。
Scalaで作れるもの
Scalaで作れるものは全てJavaで作れるものです。Javaは開発の現場全てで使用する事ができるため、Scalaは何でも出来ることになります。
PHPやRuby、Pythonといった言語で作成される事が一般的なWebサイトの開発もScalaで行う事ができます。
会計システムや業務処理といった業務システムも可能ですし、PC向けのアプリケーション、モバイルアプリでももちろん制作可能です。
もちろん全ての開発において優位性があるわけではなく、機械学習であればPythonの方が優れている部分があり、iOSアプリを制作したいのであればSwift言語を使用した方が効率的です。
しかし、Scalaを覚えればほぼ全てのことが出来るようになるため覚えればかなり強いスキルの一つになるのではないでしょうか。エンジニアとしてスキルアップしたい方におすすめの言語です。
Scalaで製作されたWebサービス
国内の有名サービス
実際にScalaで開発された身近な国内のサービス例を紹介します。
・SmartNews
スマートニュースは国内外の政治経済、エンタメ、グルメ、2chまとめなど400チャンネル以上のコンテンツから好きな情報を毎日更新して届けるキュレーションメディアです。
iOS、Androidのアプリケーションとして主にモバイルユーザーをターゲットにしたニュース発信を行なっています。
・Chatwork
Chatworkはクラウド型のビジネスチャットツールです。Lineなどの会話に特化したメッセージングアプリケーションとは違いファル共有機能やタスク管理、ビデオを使用したグループ通話機能などを盛り込むことで、日本やアジア地域で広く使用されています。
海外の有名サービス
続いて海外でScalaを使用して開発された有名サービスも紹介します。
アメリカの会社が運営しているSNS(ソーシャル・ネットワーキング・サービス)で、140文字以内の短文や画像を気軽に発信できるサービスを提供しています。月間のアクティブユーザーは日本国内で4 ,500万人、世界全体で見ると3億3,000 万人と巨大なユーザー数を獲得しています。
・Linkdin
Linkdinもアメリカの会社が運営しており、世界最大のビジネス特化型SNSです。経歴やバックグラウンド、現在のポジション、上司、同僚、取引先などの繋がりといったビジネス上で知りたい情報が全て乗っています。世界中で5億4 ,000 万人以上が使用しており、2016年にMicrosoftによって2兆7 ,000億円という巨額の金額で買収されました。
まとめ
本記事ではScalaについて出来るだけ分かりやすく説明しましたが、Scalaで出来ることやJavaとの関係など理解できたでしょうか。
Scalaは幅広く様々な開発に使用することができ、有用性が高いためその需要は増えています。他のエンジニアよりも高収入を稼ぎたい、Scalaを使用して開発している会社に就職したい、と考えている方は是非トライしてみてください。
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事