SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
「愛されたい!」と
思ったときに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に固める

Weitere ähnliche Inhalte

Was ist angesagt?

Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)
Kazuhide Maruyama
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.js
Akio Ishida
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
Osamu Monoe
 

Was ist angesagt? (20)

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

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

JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
Kengo Toda
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方
Shuyo Nakatani
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
TakumiIINO
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
Kikuta Go
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
 

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

JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
named_scope more detail
named_scope more detailnamed_scope more detail
named_scope more detail
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Objective-C/Swift コードの共用
Objective-C/Swift コードの共用
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Clojure
ClojureClojure
Clojure
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
LLoT2016 Java Update
LLoT2016 Java UpdateLLoT2016 Java Update
LLoT2016 Java Update
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 

Mehr von Koichiro Ohba

20140517 岡山オープンセミナー
20140517 岡山オープンセミナー20140517 岡山オープンセミナー
20140517 岡山オープンセミナー
Koichiro Ohba
 
Agile Shibuya github_enterprise
Agile Shibuya github_enterpriseAgile Shibuya github_enterprise
Agile Shibuya github_enterprise
Koichiro Ohba
 
Cuvic OnDemand on JRuby
Cuvic OnDemand on JRubyCuvic OnDemand on JRuby
Cuvic OnDemand on JRuby
Koichiro Ohba
 
Social Coding With JRuby
Social Coding With JRubySocial Coding With JRuby
Social Coding With JRuby
Koichiro Ohba
 
Abstraction of JRuby Kaigi2010
Abstraction of  JRuby Kaigi2010Abstraction of  JRuby Kaigi2010
Abstraction of JRuby Kaigi2010
Koichiro Ohba
 
Introduction of JRuby Kaigi 2010
Introduction of JRuby Kaigi 2010Introduction of JRuby Kaigi 2010
Introduction of JRuby Kaigi 2010
Koichiro Ohba
 
AppEngine/Jruby at SendaiRubyKaigi02
AppEngine/Jruby at SendaiRubyKaigi02AppEngine/Jruby at SendaiRubyKaigi02
AppEngine/Jruby at SendaiRubyKaigi02
Koichiro Ohba
 
The Power to Produce Termtter
The Power to Produce TermtterThe Power to Produce Termtter
The Power to Produce Termtter
Koichiro Ohba
 
JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12
Koichiro Ohba
 
The Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2ndThe Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2nd
Koichiro Ohba
 

Mehr von Koichiro Ohba (20)

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

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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