Ruby使いのためのScalaのススメ

18,967 views

Published on

Java使いにばかり注目されているScalaですが、Ruby使いこそScalaを学ぶべきという持論をつらつらと述べていきます。

Published in: Technology

Ruby使いのためのScalaのススメ

  1. 1. Ruby使いのための Scalaのススメ Presented by おおかゆか
  2. 2. 自己紹介: おおかゆか (id: oukayuka) フリーランスのWebプログラマ。 元々はPHPerでしたが、最近はもっぱらRails案件 を生業に活動中。 最近、エンジニアがお金について考えるための rake:money という勉強会を始めました。 10/15に第2回をやるのでATND見てね。 http://atnd.org/events/1626
  3. 3. What's Scala? Scalaって何それおいしいの?
  4. 4. Scalable Language が、その名前の由来。 ただしここで言う「スケーラブル」とは、簡単な スケーラブル スクリプトから大規模な基幹システムまで同じ ように書けるという意味らしい。 JVM上で動く関数型言語で、初版リリースが 2003年とプログラム言語としては最後発の部 類。作者はスイス連邦工科大学のMartin Odersky(マーティン・オダースキー)教授。 Odersky
  5. 5. Scalaはいいとこ取りの言語(1) 最後発であるのをいいことに、Scalaは既存の 言語をいいとこ取りし放題なのが特徴。 まずはJavaからいいとこ取り。 コンパイルするとJavaとまったく同じJVM用の バイトコードになるため、Javaの高度なGCや最 適化されまくりのパフォーマンス、そして膨大な ライブラリ群をそのまま利用することが可能。
  6. 6. Scalaはいいとこ取りの言語(2) その他の言語からも、 Ruby の Mix-in のような Trait、DSLフレンド リーなゆるい文法 OCaml によく似た型推論 Haskell ばりのパターンマッチ、パーサーコン ビネータ Erlang からまんまパクリのアクターモデル 等がいいとこ取りされている。
  7. 7. Scalaはハイブリッド言語(1) Scalaはハイブリッド言語である。 Java以上に徹底したオブジェクト指向言語であ オブジェクト指向言語 ると同時に、関数型言語でもある。 関数型言語 これは作者のOdersky教授の信念で、OOPと 関数型の設計が高度に融合したところに真の スケーラビリティがあるというもの。 Pizza(言語) → Generic Java(コンパイラ) → Scala と一貫してきた彼の思想である。
  8. 8. Scalaはハイブリッド言語(2) Scalaはハイブリッド言語である。 Javaと同様のバイトコードにコンパイルできる コンパイラ言語であると同時に、逐次実行可能 コンパイラ言語 なインタプリタ言語でもある。 インタプリタ言語 scalaコマンドを単独で実行すれば対話型イン タプリタ(Rubyでいうirb)が起動し、他のLLのよ うに随時動作を確認しつつコーディングすると いう開発スタイルも可能。
  9. 9. 私に言わせるなら… ScalaはJavaと同等のパフォー マンスと堅牢性、それにRuby マンス 堅牢性 並みの開発効率を兼ね備えた 開発効率 言語である。
  10. 10. Why Scala? そこでScalaですよ
  11. 11. Ruby使いこそScalaを学ぶべき 現状、Scalaを学ぶプログラマはJava使い が圧倒的に多い。しかし私はRuby使いこ そScalaを学ぶべきだと思う。 ScalaをマスターしてしまったJava使いは、 積極的にJavaを使う理由がなくなる。(そ の生まれからして“Better Java”だから) Java” だがRubyの場合は必ずしもそうではない。
  12. 12. Ruby使いがScalaを学ぶべき理由(1) ScalaはRubyよりもパフォーマンス・堅牢性 ともに上であるが、やはりフットワークの軽 さにおいては一歩譲る。 JVM言語であるがゆえに起動が遅 い、Java文化を引きずった冗長さ、型推論 があるとはいえ基本は静的型付け言語な ので面倒な記述を強いられることがある 等。
  13. 13. Ruby使いがScalaを学ぶべき理由(2) 負荷の高い内部処理をScalaで、頻繁に変 更が発生するインターフェース部分を Ruby(Rails)で実装するという使い分けを しているサービスも存在する。 これなどはScalaとRuby双方の利点を活用 している事例だろう。
  14. 14. Ruby使いがScalaを学ぶべき理由(3) 一撃必殺だが直線的で射程の短い八極拳と、威力 八極拳 は譲るが曲線的で予測しづらく遠距離戦を得意と する劈掛掌を共に学ぶことで「八極に劈掛を加え 劈掛掌 れば、鬼神も恐れる」と言われるほどの無敵さを誇 れば、鬼神も恐れる」 ると言う。(※『拳児』少年サンデーコミックス参照) Ruby使いがScalaを学ぶことで死角がなくなり、八 極拳×劈掛掌の使い手のように並のプログラマー が束になってかかってもかなわないほどのパワー を手に入れられるのではないだろうか。
  15. 15. Scala, Famous Hackers tell about 教えてエロい人
  16. 16. “If I were to pick a language to use today other than Java, it would be Scala” James Gosling 「今日、もしJava以外に自分で使いたい言語が あるとすれば、それはScalaだろう」 ジェームズ・ゴスリン(=Javaの生みの親)
  17. 17. “Scala, it must be stated, is the current heir apparent to the Java throne. No other language on the JVM seems as capable of being a ‘replacement for Java’ as Scala, and the momentum behind Scala is now unquestionable” Charles Nutter 「はっきり述べておきたいのは、Scalaが現時点での最も有力なJava の王位継承者候補だということだ。JVM上で動く他の言語には『Java の代替』になれるような器を持ったものは見当たらず、Scalaの勢い にはすでに疑う余地がない」 チャールズ・ナター(=JRubyプロジェクトのリーダー)
  18. 18. “I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy” James Strachan 「2003年(註:Groovyの開発が開始された年)当時、Martin Oderskyの『Programming in Scala(邦題:Scalaスケーラブルプ ログラミング)』を誰かに見せてもらっていたなら、正直なところ Groovyは作らなかっただろうと思う」 ジェームズ・ストラッチャン(=Groovyの作者)
  19. 19. 「面白い。いろんな点でGroovyを思い出させるが、もっ とずっと革新的かも」 「Rubyに似たところがあるなあ、と思ってたんだけど、 多重継承を廃止しMix-inを持つなど、新しくなってより 似てきた感じ」 「Erlangとは違う形で(分かりやすい/扱いやすい)並 列プログラミングを提供する言語になる、かも」 「ScalaのActorはJVMのスレッドプールを使って実現さ れているそうだけど、十分な性能が出るなら(これが難 しい)、ErlangではなくScalaが次世代を席巻するかも」 まつもとゆきひろ
  20. 20. “Scala is the Java of the future” Martin Odersky 「Scalaは未来のJavaだ」 マーティン・オダースキー
  21. 21. Who uses Scala? あらこんなところにもScalaが
  22. 22. みんな大好きTwitter 現状、Twitterのメッセージキュー、およびミドルウェアと APIのほとんどは、Scalaで実装されている。(ちなみに Twitterのアクセスの80%がAPI経由とのこと) 最初、TwitterはRubyベースのメッセージキューを使用 していたが、すぐにパフォーマンスの壁に突き当たって しまった。 色々検討した結果Scalaを採用することとなり、その結 果それまで2時間半かかっていた処理が20秒で済むよ うになったという。
  23. 23. その他の事例 求人特化型SNSのLinkedInが以前からScalaを 使っているのは有名。Odersky教授を招いて技 術セッションを行っている様子をYouTubeで見る ことができる。 あとSony ImageworksがDBミグレーションライブ ラリをScalaで開発してオープンソースで公開す るなど、社内での開発にScalaを使用している様 子。
  24. 24. Let's Scala! Scala使いたくなったでしょ?

×