Scalaにまつわる誤解を解く
Scala福岡2017
株式会社ドワンゴ 水島宏太
自己紹介
- Twitter ID: @kmizu
- GitHub: kmizu
- Love: Nemerle/Rust/Standard ML/Scala/...
- 自分のプログラミング言語も作ってます
- Japan Scala Association代表理事
Scalaに関する神話や誤解(あるいは真実)
- Scalaって使われてるの?
- Scalaは難しすぎて実用にならない?
- Scalaを使うには圏論の知識が必要?
- Scalaを使うには関数型プログラミングの知識が必要?
- Scalaは記号メソッドが濫用されている?
- Scalaは遅い?
- Scalaはコンパイルが遅い?
- , etc.
質問について
- 不明点があれば、発表を止めて質問してください
- 本当に発表を止めて構いません
Q. Scalaって使われてるの?
A. 世界中で使われてます
Scala採用企業(海外)
- Twitter, Starbucks, Verizon, Goldman Sachs,
Foursquare, MorganStanley, etc.
Scala採用企業(国内)
- ドワンゴ, はてな, サイバーエージェント, ヌーラボ, エフ・コード,
セプテーニオリジナル, Maverick, DMM.com, ビズリーチ, etc.
IEEE Spectrum The Top Programming Languages 2017

Q. Scalaは難しい?
A. はい。しかし…
- トレーニングのための適切な資料と講師さえいれば育成することは十分可能
- 弊社でも毎年、Scalaを使った新人研修を行っています
- そういうサービスを行っている人も居る(?)
Q. Scalaを使うには圏論の知識が必要?
A. いいえ。
- 一部のライブラリでは、名前を圏論の用語から拝借してきている
- ほとんどのライブラリは圏論に関係していない
Q. Scalaを使うには関数型プログラミングの知識が必要?
A. はい。ただし、高度な知識は必要はありません
必要な知識・技能
- Scalaの標準(不変)コレクションライブラリの使い方
- 不変オブジェクトの作り方・活用方法
あると便利な知識・技能
Q. Scalaは記号メソッドが濫用されている?
A. そういうライブラリもあります。昔より濫用傾向は減っています
適切にライブラリを選べば問題にはならない
Q. Scalaは(Javaより)遅いのでは?
A. いいえ。ただし、プログラミングスタイルによります
- ScalaのコードはJavaと同じようにコンパイルされる
- 同じスタイルで書けばほぼ同じ速度
- 関数型プログラミングのスタイルで書いた場合、より遅くなる傾向
- 性能と相談の上で適切なスタイルを
for(int i = 0; i < 100; i++) {
doSomething(i);
}
(Java)の生成コードは
var i = 0
while(i < 100) {
doSomething(i)
i += 1
}
(Scala)の生成コードとほとんど同じ
Java版のバイトコード
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: bipush 100
5: if_icmpge 18
8: iload_1
9: invokestatic #2
12: iinc 1, 1
15: goto 2
18: return
Scala版のバイトコード
public void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_2
2: iload_2
3: bipush 100
5: if_icmpgt 20
8: aload_0
9: iload_2
10: invokevirtual #22
13: iload_2
14: iconst_1
15: iadd
16: istore_2
17: goto 2
20: return
Q. Scalaのコンパイルは(とても)遅い?
A. はい。ただし、和らげることができます
- 金の弾丸
- sbtを立ち上げっぱなしにする
- IntelliJ IDEAを利用の場合:
- sbt shellを使う(sbt 0.13.15以降)
- Scala 2.12.3にバージョンを上げる
Q. Scalaを使えるメンバーが居ないけど、採用して大丈夫?
A. Scalaを使えるメンバーが1人は居た方がいい
- Scala人材は未だにあまり人材市場に出ていない
- Scalaをできる人を最低1人雇うか、トレーニングして育成する必要
Q. implicitという機能が怖いらしい。どうすればいい?
A. 利用する上での規約を定めれば問題ない
- 二つのimplicit
- implicit conversion
- implicit parameter
- implicit conversionは一部を除いて推奨されない
- implicit parameterはより積極的に使って良い
Q. Scalaは後方互換性を軽視している?
A. いいえ
真実
- マイナーバージョンが変化しても互換性は維持
- Scala 2.11.x 〜 Scala 2.11.y の間で、互換性が維持
- xとyは任意のバージョン番号(マイナーバージョン)
- メジャーバージョンが変わると互換性は維持されない
- Scala 2.a 〜 Scala 2.b の間で、互換性は維持されない
- aとbは任意のバージョン番号(メジャーバージョン)
- クロスビルディングにより問題を軽減可能
Q. Scalaコミュニティって怖い人が多いんでしょ?
A. いいえ…であるはず。
Q. sbtって難しくない?
A. はい。ただ、最初の一歩はむしろ簡単
organization := "foo.bar"
name := "hoge"
scalaVersion := "2.12.3"
とりあえずこれくらい書けば始められる!
- 既存プロジェクトのsbtの設定ファイルで学ぶ
- sbt newで適当なプロジェクトを生成する
まとめ
- Scalaに関してよくある疑問に答えてみた
- Scalaを使うかどうか、よく考えて決めてください
質問タイム
- 質問の時間を多めに取りました
- どんどん質問してください