【漫画でIT入門】とあるIT企業の社員活動日誌 第24話「プログラミング学習のすゝめ⑩ Scalaとは?特徴と出来る事」

パソコンを使う人のありそうでなさそうなお話や、ガジェットのお話を漫画で紹介させていただくコーナーです。

とあるIT企業に務める彼女たちは日々楽しく真面目に業務に励んでいます。その中で、起こったハプニングや困った事などを活動日誌を通して覗き見していきましょう。

※当ブログは、アフィリエイトプログラムに参加して商品を紹介しております。当ページのリンクを介して商品を購入すると著者に収益が発生することがあります。

【漫画で入門】「とあるIT企業の社員活動日誌」各話一覧はこちら



Scalaとは?

Scalaは2013年にリリースされたオブジェクト指向型言語関数型言語それぞれの特徴を持ったハイブリッド言語です。

スイス連邦工科大学のマーティン・オーダスキー氏によって設計・開発されました。
ScalaにはJavaで出来る事が全て出来ると言う特徴が有り、「Javaの後継言語」「幅広い開発領域で使用する事ができる言語」としてじわじわと人気が出てきています。

Scalaは2003年の暮れに内部で公開された後、2004年の始めにJavaのプラットフォームにリリースされ、2004年の6月に.NETのプラットフォームに公開されました。Ver2.0は2006年3月にリリースされましたが、.NETのサポートは2012年に中止になっています。

2021年5月12日 コードネームdottyと呼ばれていたコンパイラを抜本的に再設計して作られたScala3がリリースされ、多くの機能が追加されています。また、現在も活発に開発が続けられています。

Javaの後継言語といわれる所以

ScalaはJavaの仮想マシン(JVM)上で動かす事が出来ます。

また、Javaとの互換性も高い言語であることも後継言語とされる点とも言えます。下記が互換性の例です。

・ScalaからJavaのメソッドを呼び出す
・JavaからScalaのメソッドを呼び出す
・Javaで書かれたクラスを継承する
・Scalaで書かれたクラスをJavaが継承する

Scalaの特徴とは?

Scalaは「Javaの後継言語」と呼ばれるだけあり、Javaと似たような特徴を持っています。

しかし、Javaと異なりScalaの最大の特徴もあります。それらについて詳しく見ていきましょう。

Scalaの特徴①「オブジェクト指向型言語であること

ScalaはJavaに代表されるオブジェクト指向型言語の性質を持っています。その為、Javaに近いと言えます。

従来のプログラミング言語は、処理を一から十まで記述していかなければならず、複雑なプログラムになるほど作り上げるのに大変手間がかかりました。Javaでは、関連するデータや処理をまとめた「クラス」という部品を作っておき、その部品を自由に組み合わせ、必要であれば再利用することで効率よくプログラムを組むことができます。このように機能を部品化し、部品を組み合わせてプログラムを完成させる考え方のことを「オブジェクト指向」といいます。

Scalaの特徴②「Javaのライブラリを利用出来る

ScalaはJavaの仮想マシン(JVM)で動かすことが出来ます。その為、Javaのライブラリを利用して開発を行う事が出来ます

Javaのライブラリを利用して開発が出来るという事は現行でJavaで開発されているシステムをScalaに移行する事が容易にであるとも言えます。この点も「Javaの後継言語」とされる所以かもしれません。

Scalaの特徴③「関数型言語であること

Scalaはオブジェクト指向型言語であると同時に関数型言語でもあります。両者の記述方法の好きなほう、記述しやすい方を選択して記述することが出来ます。また、両者を組み合わせて記述することも出来るため、両者の良いところ利用することが出来ます。

関数型言語とは、数学的な関数の組み合わせで記述する開発手法です。
数学的な関数とは、例えば y=2x。xが2ならばyは4になりますし、xが4ならyは8になります。
関数型言語とは、この関数の方式をプログラミングに落とし込んだもので、xに何を入れるかによってyの表示結果を決定しようとする方式です。
このように、引数の値(x)が定まれば結果(y)も定まることを、参照透過性と言います。

一連の記述が数式的に行われ、プログラムの細部まで細かい静的処理が行われることで、強固なプログラムを組むことができるのが特徴です。

Javaとの比較について

ScalaはJavaの後継言語と呼ばれる事が多いです。

その理由は上記でも述べた様に様々の互換性があるという点です。

では、改めてJavaとの類似点そして相違点について見ていきましょう。

Javaとの比較①「変数の宣言

JavaとScalaに共通する要素の一つが変数の宣言です。

Scalaで使われる代表的な変数の型は「var」と「val」です。
「var」は代入が可能な変数、「val」は代入不可の変数(定数)を表します。一方、Javaでは先頭に「final」という文字を置くことで定数を宣言します。

Javaとの比較②「メソッドの定義

Javaではメソッドという形で一連の決められた処理を定義して、プログラムの中で使いまわすことが一般的です。Scalaでも同様にメソッドを定義することができます

メソッド定義の際に、引数、戻り値やそれらの型を記載する必要がある点は、JavaもScalaも同じです。

一方で、メソッド定義の前に「def」という文字を置くのがScalaに独特な部分となります。

Javaとの比較③「型の宣言

多くのプログラミング言語と同様に、Scalaでも数字や文字列の型を使います。しかも、Scalaで使う型はJavaとある1点を除いて同じです。

1点の違いとは、Javaで使う型が全て小文字で表されるのに対して、Scalaでは一文字目が大文字になるということです。

具体例な例をあげると、Javaではint型変数を「int」で宣言しますがScalaで「Int」という表記で宣言します。

Javaの経験がある人にとっては、Scalaの型は非常になじみのある部分になります。

Javaとの比較④「記述量と実行速度

ScalaはJavaと比べると少ない記述量でプログラムを組むことが出来ます

その為、実行速度という点でもScalaはJavaよりも優位にたっています。

他のプログラミング言語との比較

Pythonとの比較

Scalaは大規模なデータの処理をするようシステム構築に最適とされている言語です。

そのようなシステム開発で使用される 言語としてPythonも良く使用されています。(人工知能開発など)

コードの書き方については類似点はなく別物です。

実行速度はScalaの方が速く記述の簡単さではPythonの方が優位です。

Kotlinとの比較

KotlinはAndroidのアプリ開発でよく使われている言語です。

もともとAndroidアプリの開発ではJavaが主流だったのですが、そこからKotlinに移行していきました。仕様としても、Javaの改良版として誕生しています。

ScalaもKotlinもJavaとの関係性が深いということです。経緯からわかる通りScalaとKotlinは類似点も多いですが違いもあります。具体的には、Scalaがオブジェクト指向と関数型のハイブリッドであるのに対し、KotlinはJava同様オブジェクト指向です。

またKotlinはJavaとの互換性が高くコードを混ぜるようなことも可能ですが、Kotlinと比較するとScalaはJavaとの互換性がそこまでは高くないという違いもあります。

Scalaで出来ること

Scalaで作れるものは全てJavaで作れるものです。Javaは開発の現場全てで使用する事ができるため、Scalaは何でも出来ることになります。

PHPやRuby、Pythonといった言語で作成される事が一般的なWebサイトの開発もScalaで行う事ができます。

会計システムや業務処理といった業務システムも可能ですし、PC向けのアプリケーション、モバイルアプリでももちろん制作可能です。

もちろん全ての開発において優位性があるわけではなく、機械学習であればPythonの方が優れている部分があり、iOSアプリを制作したいのであればSwift言語を使用した方が効率的です。

Scalaで開発されているもの

近年はコード記述量の少なさ、実行速度の速さを考慮し、これまでであればJavaで開発されていたであろう場面でScalaを開発言語として採用しているアプリ等が多く見られます。

Scalaで開発されているもの①「SmartNews

スマートニュースは国内外の政治経済、エンタメ、グルメ、2chまとめなど400チャンネル以上のコンテンツから好きな情報を毎日更新して届けるキュレーションメディアです。

iOS、Androidのアプリケーションとして主にモバイルユーザーをターゲットにしたニュース発信を行なっています。

公式HP:https://www.smartnews.com/ja/

Scalaで開発されているもの②「Chatwork

calaの言語特性として、バグの少なさ、開発納期の短さ、機能の改善や変更が比較的容易である点が挙げられます。

この特性が評価され、安定性が求められる大規模なサービスの開発や、変化の激しい業界でのスピードを求められる開発に活用されている事例があります。

具体的な活用例としては、チャットサービスの代表格である「ChatWork」がこの点でScalaを採用しています。

公式HP:https://corp.chatwork.com/ja/

Scalaで開発されているもの③「Twitter

TwitterはRudyで開発していたバックエンド部分を2009年にScalaに移行した事を発表しています。

Scalaで開発されているもの④「Microsoftの機械学習ライブラリ

Microsoftの機械学習ライブラリSynapseMLはScalaで開発されており、その開発者は「私たちはScalaが言語の女王だと感じているのでほとんどScalaでしか開発しません」とコメントしています。

公式HP:https://microsoft.github.io/SynapseML/

その他

上記以外にも多くシステム、アプリがScalaを利用してします。

例えばイギリスの大手新聞社ガーディアンは2011年にwebサービスをJavaからScalaに移行しています。

他にもスイス銀行やLEGO、ニコニコ生放送やスタディアプリもScalaを利用して開発されています。

Scalaはオワコン言語なのか

よくweb検索をするとScalaはオワコンの様なサジェストが表示されます。

しかし、このネガティブなイメージはごく一部の意見です。ネガティブなイメージを持っている方の多くがオブジェクト指向型もしくは関数型どちらかしか理解できていないが為にレベルの高い言語と捉えている節があります。また、2012年に.NETフレームワークの開発が中止あれたこともこのオワコンイメージに拍車をかけているのかも知れません。

ですが、Scalaは非常によく作られた汎用性の高い未来のあるプログラミング言語だと言えます。Javaの様に多くのシステムを開発することが出来る上に記述量、実行速度を削減、高速化することが出来ます。また、多くのライブラリも利用する事も出来ます。そして、オブジェクト指向型と関数型の良いところを組み合わせて開発をすることが出来る事は将来性しか感じません。

また、Scalaを操る事に出来るエンジニアは他のプログラミング言語のエンジニアよりも高単価であるとされています。また、フリーランスや転職サイトなど見てみるとScalaを利用出来るエンジニアを求めるものが多くあります。

このような点からScalaはオワコン言語ではなく将来性の高い言語であると言えるでしょう。

Scalaのデメリット

他のプログラミング言語にもデメリットは存在します。もちろんScalaにもデメリットは存在しています。

そんなScalaのデメリットについて簡単に見ていきます。

Scalaのデメリット①「初心者にはハードルが高い」

Scalaの大きな特徴といえば、オブジェクト指向型言語であると同時に関数型言語であるという事でしょう。

しかし、この大きな特徴が逆にプログラミング初学者にとっては大きなハードルと言えます。

前提としてScala以外のプログラミング言語はオブジェクト指向型か関数型のどちらかであり、まずはどちらかの考え方をマスターし、プログラミングとはどの様な物なのかを知る必要があります。

しかし、Scalaオブジェクト指向型と関数型の両方の考え方を同時に要求されています。その為、初学者にはハードルが高い言語である言わざるを得ないでしょう。

Scalaのデメリット②「統合開発環境(IDE)が発展途上」

Scalaはまだまだ後発のプログラミング言語です。そのため、メジャーな言語と比較するとIDEの種類もまだまだ充実しているとはいえません。そういった面では、やはり学習ハードルは高い言語と言えるでしょう。

現状では「IntelliJ IDEA」と「Eclipse」が主流なIDEとなっていますが、今後Scalaの利用が増えていくにつれてより高機能なIDEがリリースされていくものと思われます。

まとめ

Scala言語は前回ご紹介したプログラミング言語「Rust」と同様に新進気鋭のプログラミング言語と言えます。

「Rust」がC言語の後継であるすれば「Scala」はJavaの後継といえ、これからのプログラミング言語環境のトップに踊り出るポテンシャルを持っている言語です。つまりは将来性のある言語と言えるでしょう。

しかし、「Rust」同様新進気鋭のプログラミング言語であるが故に情報量が少ないという事が難点と言えるかもしれません。そしてオブジェクト指向型と関数型両方の考え方を理解し、巧みに操る技術も求められる為、習得するのが難しいかもしれません。

これらの点から、プログラミング所学者が勉強するにはハードが高いと言われてしまうかもしれませんが、逆を言えば操ることの出来る人間が少ないと言え事なので求人や単価という点では非常に魅力的な言語となっています。

さらに学べるおすすめ書籍

Scalaスケーラブルプログラミング 第4版 impress top gearシリーズ

実践Scala入門

プログラミングScala

漫画作者紹介

たんれ~

イラストレーター兼漫画家
主にインターネットの海で女の子を描くのが好きな人
猫派よりも犬派

Twitter:@tanrei0303

Pixiv:tan0

あとがきイラスト