SlideShare a Scribd company logo
「愛されたい!」と
思ったときにJava
で書くRubyクラス
        大場光一郎
 Akasaka.rb, Meadowy.org
今日の目的


•JavaでRubyクラスを書く
JRubyとは

•JavaVMで動くRuby実装

• JIT、事前バイトコンパイル

• Java Integration

• Java 5.0 higher
JRubyを拡張したい

•動かしたいパッケージがC

 • openssl,RMagick4J,i
    mage_voodoo

•速くしたい
Mにおすすめ

•
素直にRubyで書けば5行く
らいですむところを50行で
書く
生もの注意

•
公開APIではなくて言語の
コアに近い部分

•ゴリゴリ変わってます
JRubyを拡張す
    る方法
•Rubyで書く

• Dubyで書く

• Javaで書く
Rubyで書く


•普通にRubyで書く

• Javaクラスも呼べるよ
Dubyで書く

•
型修飾ができるRubyっぽ
い言語

•コンパイラ型

• Hashリテラルっぽい書き方
Dubyの例
def foo(str)
 {str => :string}
 puts str
end
Javaで書く

•速い

• 面倒

• jarパッケージ
Javaで書こう
   Rubyクラス

•Java SE 5.0

• JRubyのソースコード一式
Javaクラスと
  Rubyクラス
•クラス/メソッドの可視性

• オーバーロード

• オープンクラス
Javaで書くとき
   必要なこと

•メモリアロケーション

• アノテーション
メモリアロケー
      ション

•
JRubyのrubyランタイム
にクラスやモジュールを登録
する
コード例
   private static final ObjectAllocator
ICONV_ALLOCATOR = new ObjectAllocator()
{
      public IRubyObject allocate(Ruby
runtime, RubyClass klass) {
        return new RubyIconv(runtime,
klass);
      }
   };
RubyClass iconvClass =
runtime.defineClass("Iconv",
runtime.getObject(), ICONV_ALLOCATOR);
アノテーション

•Java 5から導入

• javadoc/Rdocっぽい

• メソッドやクラスに宣言的
にメタ情報を記述
JRubyアノテー
    ション
•クラス

• モジュール

• メソッド
クラスアノテー
  ション

@JRubyClass(name = Iconv )
class IconvClass {
}
メソッドアノテー
  ション
•引数の数/可変長引数

• インスタンスか、特異か

• ブロックの有無
コード例

@JRubyMethod(name = "open", required = 2,
frame = true, meta = true)
public static IRubyObject open(ThreadContext
context, IRubyObject recv, IRubyObject to,
IRubyObject from, Block block) {
}
メソッドアノテー
  ションの種類
•name,required

• optional,rest

• alias, meta, module

• visibility, etc...
アノテーションを
 Rubyへ定義

•
クラスにどんなアノテーショ
ンがついているかRubyラン
タイムに登録する
コード例
iconvClass.defineAnnotatedMethods(R
ubyIconv.class);
ロードしよう
ロードのJRuby
   拡張

•
.rb .so .dll以外に.class
と.jarの読み込みがサポート
require hogehoge
require hogehoge.class
require hogehoge.jar
.classをロードする
.jarをロードする

•jarredScript

• jarに固めたclassファイル
をロードする仕組み

•gemに含めるのも可
JarredScript

•規約指向

• クラス名とjarファイル名を
合わせる

•LoadService
LoadService

• JRubyがjar内から拡張ク
  ラスを探すきっかけになる
• org.jruby.runtime.load.BasicLoadService
•  パッケージは無し
LoadServiceの
     例
jarに固める
JRubyを拡張し
     よう
•メモリアロケーション

• アノテーション

• jarに固める

More Related Content

PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
JavaScriptユーティリティライブラリの紹介
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
TypeScript超入門
PDF
モダンJavaScript環境構築一歩目
PDF
大規模なJavaScript開発の話
PDF
クライアントサイドjavascript簡単紹介
PDF
わかる LT@2
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JavaScriptユーティリティライブラリの紹介
Javascriptのあれやこれやをまとめて説明してみる
TypeScript超入門
モダンJavaScript環境構築一歩目
大規模なJavaScript開発の話
クライアントサイドjavascript簡単紹介
わかる LT@2

What's hot (20)

PDF
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
PDF
JavaとRubyのすてきな関係
PDF
Phjosh(仮)プロジェクト
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PPT
play framework 勉強会 in 関西
PPTX
Typescriptの中のこと(浅め)
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
PDF
Java初心者がJava8のラムダ式をやってみた
PPTX
TypeScriptをオススメする理由
PDF
TypeScriptは明日から使うべき
PDF
jQuery 対応ライブラリと TypeScript
PDF
Getting start with knockout.js
PPTX
Play frameworkについて
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
PDF
Dark vol4 for_slideshare
PPTX
モテる JavaScript
PPTX
TypeScriptはいいぞ
PDF
IDEALIZE YOU
PDF
JavaScript 研修
PDF
Database.persistentの話
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
JavaとRubyのすてきな関係
Phjosh(仮)プロジェクト
おっさんES6/ES2015,React.jsを学ぶ
play framework 勉強会 in 関西
Typescriptの中のこと(浅め)
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
Java初心者がJava8のラムダ式をやってみた
TypeScriptをオススメする理由
TypeScriptは明日から使うべき
jQuery 対応ライブラリと TypeScript
Getting start with knockout.js
Play frameworkについて
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Dark vol4 for_slideshare
モテる JavaScript
TypeScriptはいいぞ
IDEALIZE YOU
JavaScript 研修
Database.persistentの話
Ad

Similar to 「愛されたい!」と思ったときにJavaで書くRubyクラス (20)

PDF
現実世界のJRuby(ショートバージョン)
PDF
Ruby勉強会@札幌 "Rubyist入門講座"
PDF
現実世界のJRuby
PDF
Ruby でつくる型付き Ruby
PDF
groovy 2.1.0 20130118
ODP
Rubyのコードを読んでみよう(オブジェクト編)
PDF
PHPer のための Ruby 教室
PDF
Meta programing ruby monday
PPTX
低レイヤから見たrubyプログラミング
PPT
Start!! Ruby
KEY
JRubyで作るapiサーバー
PDF
Rubyインスタンス変数
PDF
PDF
Rubyとプログラミング言語の潮流
PDF
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101
ODP
kpfx07 LT ruby-processingでイケメンになりたい
PDF
R5 3 type annotation
PDF
Javaクラスファイルの読み方
PDF
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
ODP
Rubyのソースコードを読んでみよう(入門編)
現実世界のJRuby(ショートバージョン)
Ruby勉強会@札幌 "Rubyist入門講座"
現実世界のJRuby
Ruby でつくる型付き Ruby
groovy 2.1.0 20130118
Rubyのコードを読んでみよう(オブジェクト編)
PHPer のための Ruby 教室
Meta programing ruby monday
低レイヤから見たrubyプログラミング
Start!! Ruby
JRubyで作るapiサーバー
Rubyインスタンス変数
Rubyとプログラミング言語の潮流
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101
kpfx07 LT ruby-processingでイケメンになりたい
R5 3 type annotation
Javaクラスファイルの読み方
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
Rubyのソースコードを読んでみよう(入門編)
Ad

More from Koichiro Ohba (20)

PDF
Focuslight, Jobs and OSS - HackGirls bar vol.2
PDF
20140517 岡山オープンセミナー
PDF
Real legacy
PDF
サラリーマン
PDF
GREE github-enterprise
PDF
Ruby which Supports Social Platform
PDF
グリーを支えるソーシャルコーディングのすべて
PDF
Agile Shibuya github_enterprise
PDF
Cuvic OnDemand on JRuby
PDF
Social Coding With JRuby
PDF
MessagePack for Ruby
PDF
Rava on JRuby
PDF
Abstraction of JRuby Kaigi2010
PDF
Introduction of JRuby Kaigi 2010
PDF
AppEngine/Jruby at SendaiRubyKaigi02
PDF
The Power to Produce Termtter
PDF
Introduction of record_with_operator
PDF
Happy Life Hacking Ruby on Rails
PDF
JRuby Hot Topics 2008-12-12
PDF
The Essence of Using Ruby on Rails in Corporations 2nd
Focuslight, Jobs and OSS - HackGirls bar vol.2
20140517 岡山オープンセミナー
Real legacy
サラリーマン
GREE github-enterprise
Ruby which Supports Social Platform
グリーを支えるソーシャルコーディングのすべて
Agile Shibuya github_enterprise
Cuvic OnDemand on JRuby
Social Coding With JRuby
MessagePack for Ruby
Rava on JRuby
Abstraction of JRuby Kaigi2010
Introduction of JRuby Kaigi 2010
AppEngine/Jruby at SendaiRubyKaigi02
The Power to Produce Termtter
Introduction of record_with_operator
Happy Life Hacking Ruby on Rails
JRuby Hot Topics 2008-12-12
The Essence of Using Ruby on Rails in Corporations 2nd

「愛されたい!」と思ったときにJavaで書くRubyクラス