Scalaについて今日は紹介するよ!
- Scalaとは?
- Scalaができることって?
- Scalaの勉強方法は?
- Scalaの将来性は?
などの疑問をお持ちの方の悩みを解決できる記事になっています!
この記事では、現役のフリーランスエンジニアがScalaの特徴、できること、将来性、勉強方法について解説します!
記事を読めば、Scalaの特徴や効率的な勉強方法について理解できますよ!
それでは、見てみましょう!
- Scalaに興味がある人
- Scalaで何ができるか知りたい人
- Scalaの学び方を知りたい人
目次
Scalaとは?
Scalaは、2001年にスイス連邦工科大学のマーティン・オーダスキー氏によって設計されたプログラミング言語です。Scalaの最大の特徴は、オブジェクト指向と関数型プログラミングが統合されている点です。Javaをベースとしたオブジェクト指向に、関数型の機能を提供しています。そのため、ただのJavaの後継言語というわけではなく、Scalaの作法をしっかりと覚える必要があります。また、処理はJVMというJavaを動かすソフトウェア上で動作するため、Javaで書かれたライブラリを利用することができます。
Scalaは、主にバックエンド(サーバーサイド)で動作するプログラミング言語です。そのため、APIサーバー開発に使われることが多いです。
Scalaの特徴とは?
Scalaの特徴は、次の通りです。
- 静的型付け言語
- オブジェクト指向言語
- 関数型言語
- sbtでライブラリ管理
- Webアプリケーションフレームワークが充実
- 本・ドキュメントサイトが充実している
静的型付け言語
Scalaは、「静的型付け言語」です。
静的型付け言語とはプログラムが実行される前に、プログラムの整合性や合理性を担保する仕組みをもったプログラミング言語です。
プログラミング言語には、「静的型付け言語」と「動的型付け言語」があります。
Scalaは静的型付け言語であり、プログラム上で使われる値の型を定義することで安全性を確保しています。
Scala以外の静的型付け言語は次のものがあります。
- Java
- Kotlin
- TypeScript
- Swift
一方、「動的型付け言語」とはプログラムが実行されるタイミングでプログラムの整合性をチェックします。そのため、プログラムが実行されるまでバグに気付きづらいです。
Scalaと同じサーバーサイドで実装されるRuby、PHPなどは、「動的型付け言語」です。そのため、型を定義する必要はありません。しかし、プログラムを実行するまで正しい値が使われているかは分からず、エンジニア自身が安全性を担保する必要があります。
主要な動的型付け言語は次の通りです。
- PHP
- Ruby
- Python
- JavaScript
両者ともメリット、デメリットがあるので覚えておきましょう。
種類 | メリット | デメリット |
動的型付け言語 |
|
|
静的型付け言語 |
|
|
オブジェクト指向言語
Scalaは、Javaをベースとしたオブジェクト指向を取り入れているプログラミング言語です。
オブジェクト指向とは、あらゆるデータや対象を「もの」として扱い、「もの」を効率的に組み立ててプログラムを作る手法です。オブジェクト指向は、大量のデータや機能を扱うような大規模開発に向いています。
オブジェクト指向自体は、一つの概念なので他のプログラミング言語でも使うことができます。
Scala以外で、オブジェクト指向を取り入れてるプログラミングは次の通りです。
- Java
- Ruby
- PHP
- JavaScript
- Python
- C++
関数型言語
Scalaは、関数型プログラミング言語です。
プログラミングの手法には大きく分けて二つあります。
- 手続き型
- 関数型
手続き型とは、一般的なプログラミングスタイルで、プログラムの命令を一つずつ順番に実行していく手法です。
関数型とは、単一の処理を関数という単位にまとめて、それを合成してプログラムを組み立てるプログラミングスタイルです。
手法 | 特徴 | 主なプログラミング言語 |
手続き型 | プログラムの命令を一つずつ順番に実行していく手法 | C |
関数型 | 処理を関数単位にまとめて、それを合成してプログラムを組み立てる手法 | Haskell |
Scalaは、この関数型プログラミングの機能を多く備えています。
- モナド構文
- カリー化
- 関数合成
- 高階関数
関数型プログラミング言語に慣れていない人は難しい印象を抱くかもしれません。しかし、使いこなせれば強力な武器になることは間違いないでしょう。JavaScripなどでも関数型のアプローチは注目され、言語仕様として取り入れられています。
Scalaから関数型言語の思考を学ぶのはおすすめですよ!
sbtでライブラリ管理
引用元: sbt
Scalaのパッケージ管理は、「sbt」を使います。sbtは、Scalaのバージョンやライブラリの管理を行うツールです。
ライブラリ管理とは、アプリケーション開発で必要な機能を管理することです。
ライブラリとは、便利な機能がまとまったものです。例えば
- ログイン機能ライブラリ
- 検索機能ライブラリ
- データベースの接続ライブラリ
- メール送信ライブラリ
- テスト管理ライブラリ
- フォーム管理ライブラリ
などがあります。ライブラリは、プログラミング開発をサポートするために作られたひとまとまりの機能です。自分のサービスにメールやログイン機能を追加するときは、「自分で実装する」か「ライブラリを使用する」ことになります。開発の現場では、「ライブラリを使用する」機会が圧倒的に多いです。なぜなら、「自分で実装する」場合はゼロから作らなければならず、コストがかかるからですね。その点、ライブラリは既に出来上がっているのですぐに機能を追加できます。
エンジニアはアプリケーションで必要なパッケージをインストールしますが、パッケージの数が多くなると管理も大変になります。その管理の複雑性を解決するために、sbtが使われます。
ライブラリの依存関係は、build.sbt
というファイルに次のように書きます。
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2"
こうすることで、sbtで依存関係のあるライブラリを起動時に解決してくれます。
インストール可能なScalaライブラリの詳細は、Scaladexで確認できます。
引用元: Scaladex
Scaladexでは、依存関係の情報をコピーし、build.sbt
にペーストできます。
必要なライブラリを適宜、build.sbt
に記述するようにしましょう。
Webアプリケーションフレームワークが充実
Scalaのコミュニティは活発で、現在でもWebアプリケーションフレームワークの開発が充実しています。
Webアプリケーションフレームワークとは、Webアプリケーションを開発するためのサポート機能がまとまっているツールのことです。
Webアプリケーションには、データベースの操作、httpリクエストの処理、メールなど多くの機能が必要とされます。これら全ての機能をゼロから作ると大変ですよね。Webアプリケーションフレームワークは、そのようなWebに関わる機能が備わっています。そのため、初心者の人でもすぐにアプリケーション開発ができるようになっています。
Scalaで使われる主要なWebアプリケーションフレームワークは次の通りです。
- Play Framework
- Lift
- Xitrum
- Scalatra
Play Framework
引用元: Play Framework
Play Frameworkは、Scalaで最も使われているWebアプリケーションフレームワークです。Play Frameworkは、オープンソースのフレームワークでRubyのRuby on Railsに影響を受けています。そのため、MVCアーキテクチャを標準で採用しています。
Play Frameworkは、軽量ながらも高速に動作するのが特徴です。
また、RestfulなどのWebアプリケーションフレームワークの基本的な機能と、ホットリローディグやエラーのログ出力など、開発効率を上げるための機能も提供されています。
Lift
引用元: Lift
Liftは、コントローラーがないView firstのフレームワークです。View firstとは、画面から作成して、そのあとにサーバーサイドで行う処理を実装します。
Xitrum
引用元: Xitrum
Xitrumは、NettyとAkkaをベースに作られたフルスタックのWebアプリケーションフレームワークです。Xitrumの思想は、同じフレームワークの「Scalatra」よりもパワフルで「Lift」よりも簡単にできることを目的としています。
Scalatra
引用元: Scalatra
Scalatraは、軽量でパフォーマンス性に優れているフレームワークです。シンプルで簡単に記述でき、素早い開発に向いています。
いわゆるマイクロフレームワークなので、小規模で高いパフォーマンス性が必要なプログラムが最適です。
RubyのSinatraフレームワークに影響を受けています。
どのフレームワークを使えばいいのか
はじめは「Play Framework」がいいいでしょう。
理由は次の通りです。
- フルスタックで多機能
- MVCアーキテクチャ
- 各ライブラリは好きなもの使える(ORMやテンプレートエンジンなど)
- 日本語情報も多い
Play Frameworkは一番有名なフレームワークで、多くの企業でも使われています。
PHPやRuby on Railsなどの開発経験がある人が、馴染みやすいのも理由の一つです。
書籍・ドキュメントサイトが充実している
Scalaの書籍は充実しています。日本語の書籍も多く、最新のバージョンを学ぶことができます。
書籍はたくさんありますが、いくつかおすすめをご紹介しておきます。
「実践Scala入門」で基礎を習得し、次に「Scala関数型デザイン&プログラミング」で実践的なScalaの使い方や関数型プログラミングの作法を学習しましょう。
また、本に加えて、Scalaのサイトを見ておくのをおすすめします。
Scalaを使うと何ができるの?
Scalaを使うと様々なアプリケーションを開発できます。
よく開発されるアプリケーションは、次の通りです。
- Webアプリケーション
- スクレイピングプログラム
- APIサーバー
Webアプリケーション
Webアプリケーションとは、Webで提供されているサービスのことです。
例えば、ショッピングサイトや求人サービス、ブログなどです。
ScalaのWebアプリケーション開発では、Webアプリケーションフレームワークが使われるのが主流です。前述した通り、フレームワークはWebアプリケーション開発に特化した機能が提供されています。エンジニアはゼロから構築しなくても、フレームワークを使えばすぐにWebアプリケーション開発をすることができます。
今では、独自のフレームワークで開発している企業は少ないでしょう。一部、大企業は独自フレームワークを使っているかもしれませんが、ほとんどの企業はオープンソースのScalaフレームワークを使っています。
そのため、上述したフレームワークの使い方を覚えておくといいでしょう。
スクレイピングプログラム
スクレイピングとは、Webサイトにある情報を取得して加工する技術です。
例えば、複数の求人サービスのデータを一度に確認できるWebサイトがあるとしましょう。複数の求人サービスのデータ取得を人の手でやることも可能ですが、膨大な時間がかかります。
その作業をコンピュータにやらせるのが、スクレイピングプログラムです。
Scalaでは、「jsoup」などでスクレイピングを作ることができます。
APIサーバー
Scalaは、APIサーバーの開発にも使われます。
APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略で、「プログラム同士をインターフェースを通じで繋げる機能」です。
APIの仕組みを使うと、様々なプログラムを組み合わせて一つのサービスを作ることができます。
例えば、TwitterやインスタグラムもAPIを提供しており、API経由でツイートや写真を取得できます。そして、その取得したデータを自分のWebサイトに表示させることができます。
APIサーバーは、APIの仕組みを利用して、データを提供するサーバーです。
APIサーバー構築でもフレームワークは使われます。
Scalaで作られているサービス
Scalaは人気があり、需要の高いプログラミング言語です。日本国内でも多くの企業がScalaを使用しています。
Scalaが使われている代表的なサービスは次の通りです。
- ビズリーチ
- Ameba
- Typetalk
- Backlog
- Mackerel
- はてなブックマーク
- SmartNews
これからバックエンドエンジニアを目指す人は、Scalaも検討してみましょう!
近年、多くの企業がScalaに注目しています。
関数型プログラミング言語に触れたいという人にもおすすめですよ。
すぐに習得はできませんが、使いこなせるようになれば強力な武器になります。
Scalaが使えるとなれる職種
Scalaが使えると、バックエンドエンジニアになれます。
バックエンドエンジニアは、Webサイトの裏方の役割をします。
裏方の役割とは、サーバーやデータベースの仕組みを作ることです。
例えば、ショッピングサイトでは、商品の管理や在庫の管理、決済の手続きなど多岐に渡ってやることがあります。
その一つ一つの機能はサーバーという場所で処理がされます。
そのサーバーで行われる処理を作るのがバックエンドエンジニアです。
バックエンドエンジニアの詳しい解説は、こちらをご確認ください。
Scalaエンジニアの年収は?
Scalaエンジニアの年収は、どのくらいでしょうか。Scalaエンジニアを目指す人は気になるところでしょう。
転職支援サービスなどを見ると、Scalaエンジニアの年収は500〜900万円程度とされています。
実際に「求人検索エンジン「スタンバイ」プログラミング言語別年収ランキング2018」によると、年収は600万〜1300万で設定されています。
引用元: 求人検索エンジン「スタンバイ」調べ
日本の平均年収と比べると、かなり高い傾向ですね。
スキルの高いScalaエンジニアは独立して、もっと稼いでいます!
エンジニアは作ってナンボの世界なので、スキル次第ではもっと高い年収を狙うことも可能です。
Scalaの今後の将来性は?
Scalaは、今後も一定の需要が期待されます。
なぜなら、Scalaのコミュニティは活発で日々進化を遂げているからです。学習のしやすさと実用性の高さからエンジニアの間でも高い人気があります。エンジニアが求めるプログラミング言語は、企業でも使われる傾向が高いです。Scalaは、Javaエンジニアが転向しやすい言語でもあります。そのため、関数型のアプローチを活用して効率性を上げたいと思う人も多いでしょう。
さらに現在、日本のIT業界は深刻な人手不足に陥っています。実際に、経済産業省のデータによると、2025年には約40万人、2030年には約45万人が不足すると試算されています。
労働人口が年々減少しているのも関わらず、企業はITへの投資をするため、エンジニアの需要が高くなっているのです。
求人サイトでもScalaの需要が高いのがわかります。実際に、私の周りでもバックエンドエンジニア、特にScalaを使えるエンジニアを探している企業はたくさんいます。
これからバックエンドエンジニアを目指す人は、Scalaを検討してみてください!そして、新しい技術を常にキャッチアップしていけばエンジニアの価値を高め続けられますよ!
Scalaを習得するには
Scalaを習得するためには、まずは基礎を学習して、次に実践学習をしましょう。
- プログラミング学習サイトでScalaを始める
- プログラミング本でScalaの仕様を理解する
- ポートフォリオを作る
プログラミング学習サイトでScalaを始める
基礎を身につけるには、プログラミング学習サイトがおすすめです。
なぜなら、プログラミング学習サイトは、環境構築が不要ですぐにプログラミングを始められるからです。
例えば、Progateなどのプログラミング学習サイトを活用すれば、簡単にプログラミングを始められます!
Progateは「Git」「コマンドラインツール」を学べるので試してみてください!
ドットインストールでは、Scalaの基礎を学習できるコースがあります。
プログラミング本でScalaの仕様を理解する
基礎学習では、プログラミング本も有効です。
プログラミング学習サイトでは扱えきれない細かい仕様を学べます。
前述した、おすすめの本を活用してみましょう。
ポートフォリオを作る
次に実践として、ポートフォリオやアプリを作りましょう。
アウトプットすることでプログラミングをより理解できます。
基礎ではプログラミング言語の特徴や使い方を学び、実践ではアウトプットすることで効率的にプログラミングを習得できます。
エンジニアへの具体的なステップ
プログラミングを学習しただけでは、エンジニアにはなれません。
エンジニアになるための具体的なステップは次の記事で解説しているので、参考にしてくださいね!
最短でエンジニアになりたい人は
最短でエンジニアを目指すひとは、プログラミングスクールに行きましょう!
独学でも勉強できますが、時間がかかるのは事実です。
実践的なスキルをつけるにはプログラミングスクールの方が効率的です。
なぜなら、プログラミングスクールだと実践的な課題をやったり、プロのエンジニア講師にいつでも質問できるので独学よりも早く習得できるからです。
初心者の頃は、エラーに遭遇すると挫折しやすいです。プロに教わった方が自分で調べるより遥かに効率的です。
その他にも、プログラミングスクールでは実践的なプログラムが用意されています。独学ではできない体系的なプログラミング学習と転職支援を受けられます。
例えば、TechAcademyだとScalaの実践的なコースがあります。
プログラミングスクールは当たり外れがあると言われてます。実際に、無料のプログラミングスクールで失敗したという人もいます。
こちらの記事では、失敗しないために厳選したプログラミングスクールをまとめています。すぐにエンジニアに転職した方は検討してくださいね!
まとめ
この記事では、Scalaについてまとめました。
今ではたくさんのプログラミング学習サイトや本があります。実際にコードに触れると、プログラミングの雰囲気を掴めますよ!
皆さんがエンジニアになれるのを応援しています!