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

11,127 views

Published on

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

  1. 1. Scala 稟議の通し方 @teppei_tosa
  2. 2. 今日のゴール •経営層の人に、Scala導入を判断しても らうためのヒントを持ち帰ってくださ い
  3. 3. 難しさ •低レイヤーのテーマを高レイヤーの人 に伝えること •感覚的に理解している常識を言語化す ること •詳細な知識をベースに適度に抽象化す ること
  4. 4. 経営層の人 • プログラミング経験はない/忘れた • 経営・ビジネス視点での判断を行う • 新技術をまずリスクととらえる
  5. 5. 判断ポイント •プロジェクトにおける影響範囲 •技術習得レベル・要員確保具合 •Scalaのメリット
  6. 6. 五つの攻め手
  7. 7. 五つの攻め手 1. 権威・実績
  8. 8. 五つの攻め手 1. 権威・実績 2. JVM言語のため他資源との親和性高い
  9. 9. 五つの攻め手 1. 権威・実績 2. JVM言語のため他資源との親和性高い 3. コード量が減り生産性向上
  10. 10. 五つの攻め手 1. 権威・実績 2. JVM言語のため他資源との親和性高い 3. コード量が減り生産性向上 4. 雄弁な型情報により品質向上
  11. 11. 五つの攻め手 1. 権威・実績 2. JVM言語のため他資源との親和性高い 3. コード量が減り生産性向上 4. 雄弁な型情報により品質向上 5. 関数型言語のため保守性向上
  12. 12. 実践 シチュエーション • • • • • 一般的な業務系WEBシステムの開発 • プロジェクトとしてのリスクヘッジ策の説 明は済ませたが、別途時間を設けて、Scala 自体の紹介をすることになった。 • 時間は15分 ScalaベースのOSSフレームワークを採用 業務共通機能をScalaで開発 業務個別機能はJavaで開発 プロジェクト立ち上げ審査会にて新技術リ スクに対する指摘
  13. 13. 新言語「Scala」御紹介 第1開発部
  14. 14. アジェンダ n Scalaとは n Scalaのメリット n Scalaのデメリット
  15. 15. Scalaとは n 後発(2003年リリース)のメリットを生かし て、他言語のいいとこ取りの設計がされている JVM 言語
  16. 16. JVM言語とは n Javaとは異なる言語仕様ながら、Java環境 (JVM : Java Virtual Machine)で稼働するプロ グラミング言語 ※ JavaもScalaもコンパイルすると.classファイル が生成される Java: .java → .class Scala: .scala → .class
  17. 17. JVM言語のメリット n インフラ面のメリット • クロスプラットフォーム • 優れたメモリ管理機能(GCアルゴリズム) • 高い実績を持つAPサーバ Javaのインフラメリットを そのまま受け継ぐことができる
  18. 18. JVM言語のメリット n アプリケーション面のメリット • Javaの既存の豊富なライブラリ群を利用可能 • Javaプログラムの部品として開発可能 利用する側・利用される側の両方の面で、 Javaアプリケーションと親和性が高い
  19. 19. Scalaの注目度 Javaの父 James Gosling 「とあるセミナで、ある参加者がJames Goslingに興味深い質問をした。「『今』、 Java以外でJVM上で稼働させたいプログラ ミング言語は何か」それに対して驚くほど、 素早く、且つはっきりと答えた「Scalaだ」 と」 Groovy開発者 James Strachan 2003年当時、Martin Oderskyの Programming in Scalaという本を誰かに見 せられていたら、正直なところGroovyは 作っていなかっただろう。
  20. 20. 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
  21. 21. Scalaのメリット 1. 少ないコード量で生産性向上 2. ドキュメント性の高い型情報で品質向上 3. モジュール性の高い実装で保守性向上
  22. 22. 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)
  23. 23. Scalaのメリット 1. 少ないコード量で生産性向上 n 実証結果 • ○○プロジェクトでは、Javaプログラムから Scalaプログラムへの作り替えを試行 → ○○%のコード量削減を実現
  24. 24. Scalaのメリット 1. 少ないコード量で生産性向上 n スクリプト言語並みの冗長性を排した文法 • スクリプト言語はデータ型付けを稼働時に行うこと (動的型付け)で冗長性を排した文法を実現。 一方で、性能面での劣化や品質面での課題を持つ。 • Scalaは型推論機能により、静的型付けを維持しつつ 冗長性を排した文法を実現。
  25. 25. Scalaのメリット 2.ドキュメント性の高い型情報で品質向上 n Scalaは「型」が持つ情報が豊富で、従来であれ ばドキュメントに記載が必要だった設計情報も 含ませることができ、コンパイラチェックが強 力になっている。 → プログラミング時により多くのバグをふる い落とすことが可能になる。
  26. 26. Scalaのメリット 2.ドキュメント性の高い型情報で品質向上 n Javaの例 public String sampleMethod() String型の値を返すと宣言されたメソッドだが、値 が返らない(Nullが返される)かどうかは稼働しな いと分からず、想定外にNullが返る場合には NullPointerExceptionが発生する。
  27. 27. Scalaのメリット 2.ドキュメント性の高い型情報で品質向上 n Scalaの例 def sampleMethod():Option[String] Option型の利用によって、値が返らない(Noneが 返される)ことがありえることが明示的に宣言され ており、Noneに対応した実装が要求される(実装 しないとコンパイラから警告される)。
  28. 28. Scalaのメリット 3. モジュール性の高い実装で保守性向上 n 関数型言語の特徴によって実現しやすくなる、 副作用の無い実装によって、モジュール性を高 め易くなっている。 → 処理同士が粗結合になるため、修正時の影 響が少なく、保守性高くメンテナンスが可 能になる。
  29. 29. Scalaのメリット 3. モジュール性の高い実装で保守性向上 n 副作用の有る実装 引数 メソッド 外部変数 戻値 インプットされる引数だけでなく、メソッド外部の情報に依存したり、 戻り値をアウトプットするだけでなく、メソッド外部の情報を更新したりする → 外部変数を更新・参照する他のメソッドと   密結合になり、保守性が低下する
  30. 30. Scalaのメリット 3. モジュール性の高い実装で保守性向上 n 副作用の無い実装 引数 関数 戻値 インプットされる引数だけに処理結果(戻り値)が依存する → 他の処理と粗結合のため、保守性が向上する
  31. 31. Scalaのメリット 1. 少ないコード量で生産性向上 2. ドキュメント性の高い型情報で品質向上 3. モジュール性の高い実装で保守性向上
  32. 32. Scalaのデメリット 1. 記法の自由度が高い コーディング規約の整備や、レビュー運用の確立が必要 2. コンパイル速度が遅い 開発端末のスペックアップが必要 3. 新言語としての制約残存 継続的なキャッチアップ・コミュニティの貢献が必要
  33. 33. ご清聴ありがとうございました
  34. 34. 補足 • 関数型言語の説明として、「マルチコ アのための並列処理を実装しやすい」 という説明をするべきか → 多くの場合、非現実的な説明
  35. 35. 出典 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
  36. 36. 決裁を穫れ 以上

×