ScalaScalaは2004年にリリースされた比較的新しい言語でありながら、メジャーIT企業にも採用されているたぐいまれな言語です。 ただScalaはJavaのメリットを引き継いでいるので、その実績も当然といえば当然です。 将来フリーランスのエンジニアになりたいと考えている人にとっては、Scalaは強力な武器になるでしょう。それはScalaがJVM上で動作するからです。JVM(Javaバーチャルマシン)は、その名のとおりJavaの仮想マシンです。JavaがどのOSでも動くことができるのはJVMのおかげです。 JVMの大きな恩恵を受けられるのは、Scalaエンジニアの大きな特権といえます。つまりフリーランスのScalaエンジニアは、Mac案件でもWindows案件でもLinux案件でも受注できます。 「仕事を選ばずとにかく稼ぎたい」と考えるフリーランスのScalaエンジニアは、「Scalaを選択してよかった」と感じていることでしょう。 Scalaの成り立ちや特徴を紹介しながら、フリーランスのScalaエンジニアが活躍できる分野などを詳細に解説していきます。 Scalaの特徴とは Scalaの特徴を、Scalaの歴史を追いながら解説していきます。 Scalaは、スイス連邦工科大学ローザンヌ校のマーティン・オーダスキー教授が2001年に、開発に着手しました。そして2004年に公開されました。 Scalaはオブジェクト指向の言語であり関数型言語でもあります。そのため、クライアントのニーズに合わせて機能を拡張できるアジャイル開発に向いています。 アジャイル方式は従来のウォーターフォールモデルによるはるかに短い期間で開発できます。アジャイルとは「早い」「機敏」という意味で、システムを小さな単位に区切って実装やテストができる特徴があります。 そのため一度アジャイル方式を採用したソフト開発企業は、もう後戻りできないでしょう。すなわち、一度Scalaで開発した経験がある企業は、次のプロジェクトでもScalaエンジニアを使うことになるのです。 Scalaの強みとニーズ Scalaの強みは、Javaのライブラリやフレームワークをほとんどそのまま使えることです。ScalaがJVMで動作するのでそれが可能になっています。 ライブラリとは、よく使う機能や高レベルの機能をまとめてそろえておく「便利グッズ」です。クライアントが「Scalaエンジニアの仕事は早い」と評価するのは、Scalaエンジニアが豊富なライブラリやフレームワークを使いこなしているからです。 したがってエンジニアがScalaの強みを惜しみなく発揮するには、地道にライブラリとフレームワークのスキルを積み重ねていく必要があります。 またScalaは高速処理を得意とし、冗長な記述を必要としません。 こうした魅力が評価され、Scalaはツイッター、アマゾン、ゼロックス、NASA、バンクオブアメリカ、シーメンスなど、欧米のメジャーIT企業やSNS、宇宙産業、メジャー銀行などで採用されています。 日本でもドワンゴ、サイバーエージェント、チャットワークといった、著名なIT企業、ネット企業がScalaでサービスを構築しています。 Scalaのニーズは今後ますます増えるでしょう。 Scalaで気を付けること Scalaには欠点らしい欠点がありません。 唯一「欠点かもしれない」といえるのは、学習コストが高いことです。Scalaは難しい言語なので、スキル獲得に必要な時間や労力が他言語より多くなります。 Scalaのスキル獲得が難しいのは、オブジェクト指向の言語でありながら関数型言語であるためです。どちらの思想も理解していないと、Scalaの長所を生かしたプログラミングができません。 ただ学習コストの高さは「明確な欠点」とはいえません。スキルを獲得できた暁(あかつき)には、オブジェクト指向の言語と関数型言語の2つの特長を生かしたプログラミングができるからです。 先ほど紹介したように短期間での開発やアジャイル開発が可能になるので、Scalaエンジニアは会社やクライアントから重宝されます。 また学習コストが高いので、自然とScalaのスキル獲得を敬遠する人が多くなります。つまりScalaエンジニアには「プレミア」が付くのです。 エンジニアとしてのプレミアは、フリーランスには強力な武器になります。スキルや業務内容が陳腐化しにくいので、長期にわたって高単価の仕事(案件)を獲得することも可能です。 したがってやはりScalaは欠点らしい欠点がない言語なのです。 Scalaエンジニアの募集要項のトレンドとは Scalaエンジニアは、どのようなポジションで働くことが求められているのでしょうか。案件票の募集要項などを参考に、Scalaエンジニアの働き方のトレンドを探っていきます。 サーバーサイドエンジニアのポジションで働くことができる サーバーサイドエンジニアとは、Web開発においてユーザーの目に触れないサーバー側のプログラムを開発するエンジニアのことです。またデータを管理するエンジニアもサーバーサイドエンジニアと呼ばれます。 Scalaエンジニアは、このサーバサイド業務のポジションを得ることができます。 例えばDSP広告やインフィード広告のシステムを手掛ける企業が、年収350万~550万円でサーバーサイドエンジニアとして働く正社員のScalaエンジニアを募集しています。 DSP広告とは広告主のために最適化したオンライン広告のことで、インフィード広告とはSNSに表示される広告のことです。 この会社でのサーバーサイドエンジニアの仕事は、DSP広告やインフィード広告の新規実装や既存商品の改修、アプリの開発、GitやSubversionのバージョン管理、Haskellなどの関数型言語を用いた開発です。 Scalaエンジニアが活躍している業界、分野 Scalaを使っているのはツイッターやアマゾン、バンクオブアメリカ、ドワンゴ、チャットワークなどです。 すなわちScalaエンジニアは少なくとも、SNS、ネット通販、金融、ゲーム、通信の分野で働くことができます。 そしてすでにこれらの分野にScalaエンジニアたちが配置されています。 そしてここで注目したいのはAI(人工知能)分野です。すでにフリーランスとして活躍している方なら、クライアントから「AIのことはわかりますか」と聞かれたことが、一度や二度はあるはずです。さまざまな業界の企業がAIに詳しいフリーランスのエンジニアを探しています。 そして会社員エンジニアも、上司からAIの知見を身につけておくよう指示されているのではないでしょうか。 エンジニアがライバルと差別化できる付加価値を持つには、AI案件への苦手意識を払拭しなければなりません。 ScalaとAI開発の相性 さてScalaとAI開発の相性についてですが、その前に、AIに最も適した言語について紹介します。 例えばこれからエンジニアの勉強を始める若者がいて、その人が将来、AI開発に携わりたいと考えていたとします。ほとんどのベテランエンジニアはその人に、Pythonの取得をすすめるでしょう。 人工知能のプログラムは何万行ものソースコードになることは珍しくありません。そのためAI開発には文法が単純化されている言語が向いています。 その点Pythonは高い汎用性を持ちながら高水準な言語なので、文法を単純化させるニーズにマッチしています。 またPythonは完全なオープンソースなのでライブラリがつくられやすいのです。現にAI開発用のPythonライブラリも多数登場しています。つまりPythonエンジニアなら、世界の人たちと一緒にAIを開発できるのです。 また同じく汎用性が高いJavaもAI開発に向いています。冒頭で紹介したように、JavaはJVM上で動作するので、OSを選びません。MacでもウィンドウズでもLinuxでも動きますし、スマホではMacOSでもAndroidでも動きます。 つまりJavaでつくったAIは、デバイスを選ばないので普及させやすいのです。 さて、ではScalaとAI開発との相性ですが、「現段階では」PythonやJavaよりは劣るといわざるを得ません。しかしScalaでAIを開発している人は少なからず存在します。 Scalaエンジニアであれば、第2言語としてPythonを取得してからPythonでAI開発を手掛ける方法もありますが、なぜScalaでAIを開発するのでしょうか。 それは、ScalaによるAI開発に将来性があるからです。ScalaはすでにSNSや金融やゲームに浸透しています。そしてSNSも金融もゲームも、近い将来にAIを搭載することは間違いありません。それならばScalaで開発したシステムに、Scalaで開発したAIを組み込んだほうが理にかなっています。 これが、「ScalaでもAI開発に携わることができる」理由であり、「ScalaエンジニアがScalaでAIを開発する」モチベーションなのです。 Scalaのフレームワーク事情 Scalaのフレームワークを紹介します。 最初に獲得するのにふさわしいScalatra ScalatraはWebマイクロフレームワークです。アクションが激しく見飽きないホームページやサイトは、Scalatraを使っていることが少なくありません。Scalatraを使えば、高性能なWebページを短期間でつくることができます。 またScalatraは、コンパイル時にエラーを検出できることもユーザーに支持されています。そのほか、拡張のしやすさ、学習の容易さ、メンテナンス性の高さといった長所もあります。Scalatraは「Scalaエンジニアが最初に獲得するフレームワーク」といわれています。 フルスタックを希望するならPlay2 Play2はJava向けのフルスタックフレームワークです。Javaで使えるのでScalaでも使えるのです。 Play2はIDE(統合開発環境)に依存していないので、開発環境の構築が容易で、エンジニアはすぐに開発に着手できます。 AI開発ならDeeplearning4j Deeplearning4jはフレームワークではなくライブラリですが、AI開発の「便利グッズ」としてここで紹介します。 Deeplearning4jはJava用のライブラリなのでScalaでも使うことができます。 AI開発ではPythonのほうが優位なのは説明したとおりですが、Deeplearnig4jはScalaエンジニアがPythonエンジニアを猛追するときに強い味方になるはずです。 日本人が開発したSkinnyフレームワーク Skinnyフレームワークは、フルスタックWebアプリケーションフレームワークです。開発の生産性が高く、保守性に優れた性質があります。 Skinnyフレームワークは日本人が開発したので、日本語の参考書が豊富で独学しやすいメリットがあります。 Webサイトのデザイン性に優れたLIFT LiftもWebアプリケーションフレームワークです。htmlで視認できるのでデザイン性の高いWebサイトを開発するときに向いています。またコントローラーを撤廃したことで開発スピードを上げることができます。 Scala案件単価事情 フリーランスのScalaエンジニアにはどのような業務が発注されるのでしょうか。案件の単価などを紹介します。 コミュニケーションツールアプリ開発、月85万円 この案件はコミュニケーションツールアプリの開発と運用です。報酬は月85万円となっています。 業務内容は、クエリ設計書やインデックス設計書にしたがってサーバーアプリを改修したり、バージョンの切り替え、Elasticsearchのインデックスのデータ移行などとなっています。 必須スキルは、Scalaを使った開発実務2年以上となっています。 位置情報を活用したマーケティングシステムの開発、月90万円 この案件は、スマホユーザーの位置情報と連動させた広告配信サービスや、小売店舗の在庫情報配信サービス、店舗向け売上分析アプリなどの新規の開発です。つまりマーケティングに関するシステムづくりを任されるわけです。 高度な内容だけに報酬も月90万円と高額です。 求められるポジションはシステムエンジニアですが、報酬額は下がりますがプログラマーも募集しています。 Scala案件の具体的な業務 フリーランスを目指す人にとって、Scalaの獲得は有利です。フリーランスのScalaエンジニア向けの仕事には、高額案件が多いからです。 あるサイトの言語別の平均年収ランキングで、Scalaが626万円で1位になっていました。 以下、2位Python601万円、3位Kotlin577万円、4位Swift562万円、5位Ruby562万円、6位Java552万円。 Scala案件が高額になるのは、Scalaで開発するシステムが、発注企業の利益に直結することが多いからです。 例えばScala案件のなかに広告配信アプリやマーケティング関連業務がありますが、これらはいずれも企業の収益に直結します。 一般的なシステムは通常、「システムを開発して→便利になって生産性が上がって→増収につながる」という順に企業業績に貢献します。システムがお金を生むというより、システムによってビジネス環境が整うことでお金を生みやすくなるのです。 しかし広告などのマーケティングに関するシステムは、顧客を集めることを目的とするので、「システムの完成→収入増」となりやすいのです。 またScala案件には、ネット通販などのEコマース関連のアプリやシステムを開発する業務がありますが、これも「システムの開発→収入増」となりやすいのです。 これまで実店舗のみで販売していた小売業がEコマースに進出する場合、単純に販売チャネルが2倍になるので増収増益を期待できます。 そのため企業には「開発コストをしっかりかけて、システムダウンしないユーザーフレンドリーなアプリをつくってほしい」というモチベーションがわき、報酬が高額になるのです。 こうした仕事を確実に獲得できるフリーランスのScalaエンジニアは、収入を増やすことができます。 Scala案件の案件票をみてみよう フリーランスのエンジニアも、企業の正社員エンジニアの働き方や待遇、福利厚生などを知っておくことは大切です。フリーランスがクライアントと報酬交渉をするときの材料になるからです。 そこで次にScalaエンジニアを正社員で採用する企業の案件票をみてみましょう。 アプリ開発、年収400万~800万円 ネット広告を手掛ける企業が、サーバサイド業務に就くScalaエンジニアを募集しています。年収は400万~800万円と、上限と下限で2倍の開きがあります。 業務内容は、広告効果測定ツールのバージョンアップや、広告クリエイティブに関係するテクノロジーの開発、データフィード管理、動画自動生成、広告運用の自動化オペレーション開発などとなっています。 業務内容が多岐にわたっていることから、スタッフ全体を統括できる人材を必要としているはずです。統括業務ができるScalaエンジニアは、上限年収の800万円に近づくでしょう。 最高年収2,000万円の案件票の内容とは 東証マザーズに上場しているネット広告関連企業がScaleを含む各種言語エンジニアを募集していて、最高2,000万円の年収を提示しています。 この案件票の特徴は、自然言語処理や機械学習、アルゴリズム、データ解析、最適化技術など、まだそれほど実用例がない最先端技術に関わる業務を任されることです。 同社は開発インフラをすべてAWS(アマゾン・ウェッブ・サービス)上に構築していて、トラフィック規模は月100億オーダーです。 同社が最大2,000万円もの年収をScalaエンジニアたちに支払うことができるのは、クライアントが大手広告代理店や大手マスコミだからです。アジャイル方式によるスクラム開発で大規模プロジェクトをこなすことができるのが、この会社の強みです。 そして直近の企業業績は、毎期200%超の成長を誇っています。 大規模プロジェクトや多人数のスタッフをまとめ上げることができるエンジニアは「夢の年収」を獲得できるのです。 まとめ~Scala案件はスケールが大きくダイナミック Scalaエンジニアに任される仕事(案件)には、スケールが大きくダイナミックなものが多い特徴があります。それはScalaが高度かつ複雑なシステムやプログラミングに耐えうる言語だからです。 すなわちScalaエンジニアには高額報酬にふさわしい濃密な仕事が求められるわけです。 またScalaを使ったプロジェクトは多人数で取りかかるものが多いため、スタッフをまとめあげるリーダーシップがあるフリーランスのScalaエンジニアは、高額報酬を獲得できます。