[質問]
お仕事でJavaを使っている方
    (予想:10人位?)
    (発表後追記:2人しかいませんでした...)
本日のお客様
「もっと柔軟に
 システム構築したい!」
   というJavist
「俺はRubyで
  仕事がしたいんだ!」
   というJavist
「 隣のRubyistと
    仲良くなりたい!」
    というJavist
そんなあなたに
おすすめなのが
  こちら
JRuby
という事で
JRubyの活用パターンを
    ご紹介します
Javaと
Rubyの
すてきな関係
 @garden_tree
本日ご紹介する活用パターン
本日ご紹介する活用パターン

初級編: Ruby On Java
本日ご紹介する活用パターン

初級編: Ruby On Java
中級編: Java Meets Ruby
本日ご紹介する活用パターン

初級編: Ruby On Java
中級編: Java Meets Ruby
上級編: It's A Java World
初級編
Ruby On Java
構成イメージ
構成イメージ
Java
構成イメージ
Java



Java
構成イメージ
Java



Java   Java
構成イメージ
          Ruby
Java



Java   Java
イメージ図
         Ruby


  Java
例
普通のJava
        java demo.JavaOnly で起動




https://github.com/gardentree/demo20120222
普通のJava
        java demo.JavaOnly で起動



               1.SQLを作成




https://github.com/gardentree/demo20120222
普通のJava
        java demo.JavaOnly で起動



               1.SQLを作成




                          2.データベースにアクセス




https://github.com/gardentree/demo20120222
普通のJava
        java demo.JavaOnly で起動



               1.SQLを作成




                          2.データベースにアクセス


               3.検索結果を出力

https://github.com/gardentree/demo20120222
普通のJava
        java demo.JavaOnly で起動



               1.SQLを作成    書きづらい




                          2.データベースにアクセス


               3.検索結果を出力

https://github.com/gardentree/demo20120222
普通のJava
        java demo.JavaOnly で起動



               1.SQLを作成    書きづらい




                          2.データベースにアクセス


               3.検索結果を出力       面倒

https://github.com/gardentree/demo20120222
Ruby On Java
jruby beginner.rb で起動
Ruby On Java
jruby beginner.rb で起動



        1.ヒアドキュメントでSQLを作成
Ruby On Java
         jruby beginner.rb で起動



                 1.ヒアドキュメントでSQLを作成




2. Javaのメソッドでデータベースにアクセス
Ruby On Java
         jruby beginner.rb で起動



                 1.ヒアドキュメントでSQLを作成




2. Javaのメソッドでデータベースにアクセス




                        3.簡潔に検索結果を出力
Ruby On Java
         jruby beginner.rb で起動
                   でも、おまじないが必要


                 1.ヒアドキュメントでSQLを作成




2. Javaのメソッドでデータベースにアクセス




                        3.簡潔に検索結果を出力
[利点]
•Rubyでプログラミング出来る
•既存のJavaプログラムを使える
        [欠点]
•Rubyに見せかけてJava
•おまじないが必要
[利点]
 •Rubyでプログラミング出来る
 •既存のJavaプログラムを使える
         [欠点]
 •Rubyに見せかけてJava
 •おまじないが必要
=>これじゃRubyistと仲良くなれない!
では欠点を克服するには?
中級編
Java Meets Ruby
構成イメージ




提供:NASA/JPL-Caltech
構成イメージ


                      Java




提供:NASA/JPL-Caltech
構成イメージ

                               Ruby




                      Java




提供:NASA/JPL-Caltech
イメージ図

       Ruby


Java
イメージ図

       Ruby


Java
イメージ図

           Ruby
JRubyで作る
 Java
イメージ図

           Ruby
JRubyで作る   使う
 Java
つまり
          Java
            +
        RubyDSL
(domain-specific language)
例
Java
        java demo.Intermediateで起動




https://github.com/gardentree/demo20120222
Java
        java demo.Intermediateで起動

      Rubyメソッドを定義




https://github.com/gardentree/demo20120222
Java
        java demo.Intermediateで起動

      Rubyメソッドを定義




        RubyDSLを評価する =>RubyDSLへ



https://github.com/gardentree/demo20120222
RubyDSL
 (続き)
RubyDSL
 (続き)




  初級編と同じ
RubyDSL
  (続き)




   初級編と同じ




SQLとブロックを指定
RubyDSL
         (続き)




          初級編と同じ




Javaで提供されたメソッドを使用する =>Javaへ



      SQLとブロックを指定
Java
(続き)
Java
         (続き)



RubyDSLからSQLとブロックが渡される
Java
              (続き)



     RubyDSLからSQLとブロックが渡される


SQLを使用して、データベースにアクセス
Java
              (続き)



     RubyDSLからSQLとブロックが渡される


SQLを使用して、データベースにアクセス



         1レコードずつ、ブロックに渡す =>RubyDSLへ
RubyDSL
 (続き)
RubyDSL
 (続き)




  レコードを出力
RubyDSL
 (続き)
+おまじないは不要




  レコードを出力
[利点]
RubyDSLはRubyそのもの
      [欠点]
Javaの実装はちょっと複雑
[利点]
  RubyDSLはRubyそのもの
         [欠点]
   Javaの実装はちょっと複雑


=>これならRubyistと仲良くなれる!
さらに世界を広げてみましょう!
上級編
It's A Java World
Javaで書かれたRuby実装
    JRubyについて
   お話ししてきました
これまでの構成
イメージ図


Ruby




        Java
イメージ図


Ruby




  JRuby
          Java
イメージ図


Ruby




  JRuby
          Java
Javaで書かれた実装は
    他にもあるよ
Javaで実装されたJavaScript
      Rhino
イメージ図


Ruby




  JRuby
          Java
イメージ図

                  Java
Ruby
                 Script



  JRuby
          Java
イメージ図

                      Java
Ruby
                     Script



  JRuby          Rhino
          Java
イメージ図

                      Java
Ruby
                     Script



  JRuby          Rhino
          Java
と、いうことは・・・?
イメージ図

                      Java
Ruby
                     Script



  JRuby          Rhino
          Java
イメージ図

       つながる!    Java
Ruby
               Script
Javaを介して
別々の言語をつなげよう!
構成イメージ
構成イメージ
  Ruby
構成イメージ
  Ruby
         JavaScript
構成イメージ
  Ruby
         JavaScript



            Python
構成イメージ
  Ruby
         JavaScript



            Python



             Scala
構成イメージ
  Ruby
           JavaScript



              Python



               Scala


  Groovy
構成イメージ
          Ruby
                   JavaScript



                      Python



                       Scala

Clojure
          Groovy
構成イメージ
          Ruby
                   JavaScript



  Tcl                 Python



                       Scala

Clojure
          Groovy
構成イメージ
          Ruby
                   JavaScript
Scheme


  Tcl                 Python



                       Scala

Clojure
          Groovy
構成イメージ
          Ruby
                   JavaScript
Scheme


  Tcl                 Python
          Java
                       Scala

Clojure
          Groovy
構成イメージ
          Ruby
                   JavaScript
Scheme


  Tcl                 Python
          Java
                       Scala

Clojure
          Groovy

    みんな友達!
例
Rubyで
JavaScriptの
 Testを書く
用意するもの
•RSpec
•Underscore.js
•Jambalaya(自作)
用意するもの
•RSpec
•Underscore.js
•Jambalaya(自作)
 RubyとJavaScriptの相互変換ライブラリ
仕組み
  Ruby
   ↓↑
   Java
   ↓↑
JavaScript
Jambalayaを使うと
Jambalayaを使うと
        JavaScriptが
_.filter([1,2,3,4,5,6],function(n){
  return n % 2 == 0;
});
Jambalayaを使うと
        JavaScriptが
_.filter([1,2,3,4,5,6],function(n){
  return n % 2 == 0;
});

       Rubyで動かせる
_.filter([1,2,3,4,5,6]){¦n,i,c¦
  n % 2 == 0
}
だから
だから
Underscore.jsの
だから
Underscore.jsの




   Testが
だから
Underscore.jsの




   Testが
RSpecで書ける!
実装についても
ご紹介したいところですが・・・
実装についても
ご紹介したいところですが・・・



 詳しくはWebでね★
 https://github.com/gardentree/jambalaya
まとめ
これとか
          Ruby
Java



Java   Java
これとか

                               Ruby




                      Java




提供:NASA/JPL-Caltech
これで
          Ruby
                   JavaScript
Scheme


  Tcl                 Python
          Java
                       Scala

Clojure
          Groovy

    みんな友達!
隣のRubyistと
仲良くなれるよ!
そう、JRubyならね。
Javaと
Rubyの
すてきな関係
 @garden_tree

JavaとRubyのすてきな関係