1. トップページ>
  2. お役立ちコンテンツ一覧>
  3. 【入門編】絶対押さえておくべきScalaの特徴を徹底的に解説!

【入門編】絶対押さえておくべきScalaの特徴を徹底的に解説!

記事画像
TwitterやLinkedInなど海外の有名サービスを中心にScalaが使わており、日本国内でも徐々にScalaを採用するプロジェクトが増えてきています。本記事ではこれからScala開発に携わっていきたいと考えている人向けに、必ず押さえておくべきScalaの特徴や開発環境構築手順といった、Scalaに関する入門レベルの知識を紹介します。また将来参画するであろう案件のイメージを持っていただくために、現在募集中のScala案件も掲載します。今後のScala学習をスムーズに進めていくためにも最後まで読んでみてください。

Scalaとは?

Scalaはスイス連邦工科大学 (EPFL)の教授であるMartin Odersky(専攻: 型理論と関数型プログラミング)氏によって2001年に設計され、2003年にリリースされたプログラミング言語です。「汎用言語はスケーラブルでなくてはならず、同じ概念で小さいプログラムも大きなプログラムも記述できるべきである」「スケーラビリティは関数型言語とオブジェクト指向言語の2つのプログラミングの概念を統合することで実現する」という設計理念のもとにScalaは開発されました。Scalaという名前もスケーラブル(Scalable)という言葉からきています。Scalaのメリットやデメリット、将来性については以下の記事を読んでみてください。

Scalaの将来性・需要は?平均年収や案件数についても解説

押さえておくべきScalaの特徴

これからScalaを扱う上で押さえておくべき特徴を5つ紹介します。これらを理解することで、スムーズにScalaの学習を進めることができるでしょう。

関数型かつオブジェクト指向プログラミング言語

Scalaでは関数型プログラミングが可能です。「関数を引数や戻り値として使用できる」という性質を利用し、副作用を持たない(データの内部状態を変更しない)関数を使用してプログラムを構築できます。また、ScalaはJavaと同様オブジェクト指向型でのプログラミングもできます。クラスを使用することができ、クラスの中にフィールド(クラスの特性を表す情報)とメソッド(振る舞い)を定義しnewキーワードでインスタンス化することが可能です。Scala開発では実現したいことの性質に応じて、関数型プログラミングとオブジェクト指向型プログラミングを使い分けることができます。

関数

関数とはある値(引数)を与えると何らかの値(返り値)を返す処理のまとまりを指します。関数そのものはオブジェクト(ファーストクラスオブジェクト)として扱われます。Scalaでは関数を次のように定義します。
(変数名:型名,...) => 処理
処理が複数行のときは、処理をでくくります。以下はadd関数を定義し、実行する例です。
val add = (x: Int, y: Int) => x + y
printIn(add(1,2)) // 「3」が出力

メソッド

メソッドと関数はよく似ていますが、違いがあります。メソッドはクラスやオブジェクトの中で定義する関数を指し、thisによりクラスやオブジェクトを参照することができます。Scalaではメソッドを次のように定義します。
def 関数名(変数名: 型名, ...): 返り値の型 = 処理
処理が複数行のときは関数同様、処理をでくくります。以下はaddメソッドを定義し、実行する例です。
def add(x: Int, y: Int) => x + y
printIn(add(1,2)) // 「3」が出力

トレイト

トレイトはJavaでいうインタフェースのようなものです。Javaでは2つ以上のクラスから継承(多重継承)することはできません。

ただし1つのクラスやインタフェースに、複数のインタフェースのインタフェースの実装を持つことができます。Scalaでも多重継承はできませんが、インタフェースの代わりにトレイトを使用でき、Javaのインタフェースのように扱うことができます。トレイトは自身で実装を持つことが持つことが可能です。

トレイトを作成する際は、traitキーワードを使用します。
// 使用例(トレイトの定義と継承)
trait Human {
  def walking = printIn("歩く")
}

class Teacher(val name: String) extends Human

ミックスイン

「トレイト」のところで説明した、1つのクラスやインタフェースに複数のインタフェースの実装をもたせることをミックスインといいます。トレイトをミックスインするときは以下のようにwithキーワードを使用します。
class Lion extends Animal with TraitA with TraitB

Scalaの環境構築手順

Dockerを使用した環境構築手順を示します。環境構築したあとは実際にScalaのコードを書いて動かしてみましょう。

  1. Dockerをインストール

Dockerからダウンロード及びインストールを行いましょう。

  1. Dockerイメージの取得

以下のコマンドでDockerイメージを取得しましょう。

% docker pull hseeberger/scala-sbt:8u222_1.3.5_2.13.1

使用したイメージはこちらです。このDockerイメージはopenjdkをもとに作られており、Scalaのビルドツールの「sbt」も含まれています。

  1. Dockerコンテナの起動

以下のコマンドでScala開発環境が整ったコンテナを動かすことができます。-vオプションで、ローカルのディレクトリとコンテナ内のディレクトリを紐付けることができます。

% docker run -it --rm -v /User/ユーザー名/作業ディレクトリ:/root イメージ名:タグ名
  1. 実際にソースコードを書く どのエディタでも良いので、Scalaのソースコードを書いて作業ディレクトリ内に保存しましょう。試しに以下のようなコードを書き、ファイル名を「hello.scala」とします。
object Hello {
  def main(args: Array[Strings]): Unit = {
    printIn("Hello World!")
  }
}
  1. ソースコードを動かす コンテナ内で以下のコマンドをたたきましょう。
root@a74afbee4db7:~# sbt run
初回は環境構築で実行結果が出るまでにかなりの時間がかかりますが、待ちましょう。 最終的にはビルドが完了し、実行されて「Hello World」の文字が表示されます。

FAworksで現在募集中のScala案件

FAworksでは保有するScala案件数が増えてきており、現在募集中のScala案件が40件あります。その中から3つのScala案件をご紹介します。リンクを押していただくと、案件詳細の確認や案件への応募ができます。

大規模金融系アプリ開発案件

Fintech系スタートアップ企業での開発案件です。立ち上げから間もないプロジェクトに参画していただき、Scalaでの開発だけでなくサービス要件を詰めていく業務にも携わることができます。ビジネス志向の強いエンジニアにおすすめの案件です。

詳細はこちら

顧客管理パッケージカスタマイズ案件

業務でScala使用経験がない方でも応募可能な案件です。リファクタリングや新規機能追加が主な作業です。これからScalaエンジニアとしてキャリアを積んでいきたいエンジニアにおすすめの案件です。

詳細はこちら

広告配信システム開発案件

広告配信システムは消費財ではなく生産財のため、日常生活でみることはほとんどないでしょう。普段分からないインターネット広告の裏側を覗くことができる点で、知的好奇心旺盛な方におすすめです。既に稼働している広告配信システムの新規機能追加がメインです。

詳細はこちら

フリーランスエンジニアのための案件・求人紹介サイト

  • エンド直案件多数
  • 支払いサイト0日も可能!

簡単60秒無料登録

フリーランスの経験はございますか?

新着案件

フルリモート案件

アクセスランキング

関連記事