SlideShare a Scribd company logo
Scala

稟議の通し方
@teppei_tosa
今日のゴール
•経営層の人に、Scala導入を判断しても
らうためのヒントを持ち帰ってくださ
い
難しさ
•低レイヤーのテーマを高レイヤーの人
に伝えること

•感覚的に理解している常識を言語化す
ること

•詳細な知識をベースに適度に抽象化す
ること
経営層の人
• プログラミング経験はない/忘れた
• 経営・ビジネス視点での判断を行う
• 新技術をまずリスクととらえる
判断ポイント
•プロジェクトにおける影響範囲
•技術習得レベル・要員確保具合
•Scalaのメリット
五つの攻め手
五つの攻め手
1. 権威・実績
五つの攻め手
1. 権威・実績
2. JVM言語のため他資源との親和性高い
五つの攻め手
1. 権威・実績
2. JVM言語のため他資源との親和性高い
3. コード量が減り生産性向上
五つの攻め手
1. 権威・実績
2. JVM言語のため他資源との親和性高い
3. コード量が減り生産性向上
4. 雄弁な型情報により品質向上
五つの攻め手
1. 権威・実績
2. JVM言語のため他資源との親和性高い
3. コード量が減り生産性向上
4. 雄弁な型情報により品質向上
5. 関数型言語のため保守性向上
実践
シチュエーション

•
•
•
•
•

一般的な業務系WEBシステムの開発

•

プロジェクトとしてのリスクヘッジ策の説
明は済ませたが、別途時間を設けて、Scala
自体の紹介をすることになった。

•

時間は15分

ScalaベースのOSSフレームワークを採用
業務共通機能をScalaで開発
業務個別機能はJavaで開発
プロジェクト立ち上げ審査会にて新技術リ
スクに対する指摘
新言語「Scala」御紹介
第1開発部
アジェンダ
n

Scalaとは

n

Scalaのメリット

n

Scalaのデメリット
Scalaとは

n

後発(2003年リリース)のメリットを生かし
て、他言語のいいとこ取りの設計がされている
JVM 言語
JVM言語とは
n

Javaとは異なる言語仕様ながら、Java環境
(JVM : Java Virtual Machine)で稼働するプロ
グラミング言語
※

JavaもScalaもコンパイルすると.classファイル
が生成される
Java: .java → .class
Scala: .scala → .class
JVM言語のメリット
n

インフラ面のメリット
•

クロスプラットフォーム

•

優れたメモリ管理機能(GCアルゴリズム)

•

高い実績を持つAPサーバ

Javaのインフラメリットを
そのまま受け継ぐことができる
JVM言語のメリット
n

アプリケーション面のメリット
•

Javaの既存の豊富なライブラリ群を利用可能

•

Javaプログラムの部品として開発可能

利用する側・利用される側の両方の面で、
Javaアプリケーションと親和性が高い
Scalaの注目度
Javaの父 James Gosling
「とあるセミナで、ある参加者がJames
Goslingに興味深い質問をした。「『今』、
Java以外でJVM上で稼働させたいプログラ
ミング言語は何か」それに対して驚くほど、
素早く、且つはっきりと答えた「Scalaだ」
と」
Groovy開発者 James Strachan
2003年当時、Martin Oderskyの
Programming in Scalaという本を誰かに見
せられていたら、正直なところGroovyは
作っていなかっただろう。
Scala事例
n

Twitter社
バックエンドの実装をRubyからScalaに置き換え。
http://it.slashdot.jp/story/09/04/10/0421223/Twitter%E3%80%81Ruby-on-Rails
%E3%81%8B%E3%82%89Scala%E3%81%B8

n

富士通
開発メニューに加える方向で調査・検討開始。
http://itpro.nikkeibp.co.jp/article/NCD/20130620/486613/?rt=nocnt
Scalaのメリット
1. 少ないコード量で生産性向上
2. ドキュメント性の高い型情報で品質向上
3. モジュール性の高い実装で保守性向上
Scalaのメリット
1. 少ないコード量で生産性向上
n

例

Javaの例
List<User> list = new ArrayList<User>();
list.add(user01);
....
Collections.sort(list, new Comparator<User>(){
@Override
public int compare(User o1, User o2){
return 01.id - o2.id;
}
});

Scalaの例
val list = List(.... User ....)
list sort (_.id < _.id)
Scalaのメリット
1. 少ないコード量で生産性向上

n

実証結果
•

○○プロジェクトでは、Javaプログラムから
Scalaプログラムへの作り替えを試行
→ ○○%のコード量削減を実現
Scalaのメリット
1. 少ないコード量で生産性向上
n

スクリプト言語並みの冗長性を排した文法
•

スクリプト言語はデータ型付けを稼働時に行うこと
(動的型付け)で冗長性を排した文法を実現。
一方で、性能面での劣化や品質面での課題を持つ。

•

Scalaは型推論機能により、静的型付けを維持しつつ
冗長性を排した文法を実現。
Scalaのメリット
2.ドキュメント性の高い型情報で品質向上
n

Scalaは「型」が持つ情報が豊富で、従来であれ
ばドキュメントに記載が必要だった設計情報も
含ませることができ、コンパイラチェックが強
力になっている。
→

プログラミング時により多くのバグをふる
い落とすことが可能になる。
Scalaのメリット
2.ドキュメント性の高い型情報で品質向上
n

Javaの例
public String sampleMethod()

String型の値を返すと宣言されたメソッドだが、値
が返らない(Nullが返される)かどうかは稼働しな
いと分からず、想定外にNullが返る場合には
NullPointerExceptionが発生する。
Scalaのメリット
2.ドキュメント性の高い型情報で品質向上
n

Scalaの例
def sampleMethod():Option[String]

Option型の利用によって、値が返らない(Noneが
返される)ことがありえることが明示的に宣言され
ており、Noneに対応した実装が要求される(実装
しないとコンパイラから警告される)。
Scalaのメリット
3. モジュール性の高い実装で保守性向上
n

関数型言語の特徴によって実現しやすくなる、
副作用の無い実装によって、モジュール性を高
め易くなっている。
→

処理同士が粗結合になるため、修正時の影
響が少なく、保守性高くメンテナンスが可
能になる。
Scalaのメリット
3. モジュール性の高い実装で保守性向上
n

副作用の有る実装
引数

メソッド

外部変数

戻値

インプットされる引数だけでなく、メソッド外部の情報に依存したり、
戻り値をアウトプットするだけでなく、メソッド外部の情報を更新したりする
→ 外部変数を更新・参照する他のメソッドと
  密結合になり、保守性が低下する
Scalaのメリット
3. モジュール性の高い実装で保守性向上
n

副作用の無い実装
引数

関数
戻値

インプットされる引数だけに処理結果(戻り値)が依存する
→ 他の処理と粗結合のため、保守性が向上する
Scalaのメリット
1. 少ないコード量で生産性向上
2. ドキュメント性の高い型情報で品質向上
3. モジュール性の高い実装で保守性向上
Scalaのデメリット
1. 記法の自由度が高い
コーディング規約の整備や、レビュー運用の確立が必要

2. コンパイル速度が遅い
開発端末のスペックアップが必要

3. 新言語としての制約残存
継続的なキャッチアップ・コミュニティの貢献が必要
ご清聴ありがとうございました
補足
• 関数型言語の説明として、「マルチコ
アのための並列処理を実装しやすい」
という説明をするべきか

→ 多くの場合、非現実的な説明
出典
James Gosling
http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming
http://nighthacks.com/roller/jag/resource/JAG2001.jpg
Charles Nutter
http://softwaregr.org/2010/03/02/charles-nutter-jruby-in-2010-where-weve-been-where-were-going/
http://blog.headius.com/2009/04/future-part-one.html

James Strachan
http://www.techcn.com.cn/index.php?doc-view-136034.html
http://macstrac.blogspot.jp/2009/04/scala-as-long-term-replacement-for.html

まつもとゆきひろ
日経SYSTEMS 2013年2月号
http://www.mitaka.ne.jp/ruby/ruby2012/image/profile/matsumoto.jpg
決裁を穫れ

以上

More Related Content

Scala稟議の通し方(公開版)