reading 1st druby

53
銀座ライオン 浜松有楽街・松竹ビル店 Reading (株) 永和システムマネジメント アジャイル事業部 Ruby x Agile グループ 伊藤 浩一 (@koic) 1st dRuby 2015.03.28 (Sat ) 浜松Ruby会議01 ライトニングトークス Head First Remote Method Invocation

Upload: koichi-ito

Post on 15-Jul-2015

1.043 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Reading 1st dRuby

銀座ライオン 浜松有楽街・松竹ビル店

Reading

(株) 永和システムマネジメント アジャイル事業部

Ruby x Agile グループ 伊藤 浩一 (@koic)

1st dRuby

2015.03.28 (Sat)浜松Ruby会議01 ライトニングトークス

Head First Remote Method Invocation

Page 2: Reading 1st dRuby

大事なことは 最初に

Page 3: Reading 1st dRuby

浜松開催おめでとうございます

Page 4: Reading 1st dRuby
Page 5: Reading 1st dRuby
Page 6: Reading 1st dRuby
Page 7: Reading 1st dRuby
Page 8: Reading 1st dRuby

自己紹介

Page 9: Reading 1st dRuby

伊藤 浩一 (@koic)•Rubyをもちいた受託開発によるチーム開発のリーダーやってます

•ヘヴィメタルとか好きです •静岡県は26年ぶり2度目です

Page 10: Reading 1st dRuby

よろしくお願いします

Page 11: Reading 1st dRuby

今日の話

Page 12: Reading 1st dRuby

ruby-list:15406

Page 13: Reading 1st dRuby

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/15406

Page 14: Reading 1st dRuby

1st

Page 15: Reading 1st dRuby

dRuby

Page 16: Reading 1st dRuby
Page 17: Reading 1st dRuby

http://docs.ruby-lang.org/ja/2.2.0/library/drb.html

Page 18: Reading 1st dRuby
Page 19: Reading 1st dRuby

‘’私のオススメは自分が使っているオープンソースのライブラリだったりソフトウェアだったりのソースを読むといいと思います。’’

Q. オススメのソース、勉強したソースなどはありますか?

須藤 公平 先生 (名著『リーダブルコード』を解説者と一緒に読み解こう ~3章 誤解されない名前~)

https://schoo.jp/class/1502

Page 20: Reading 1st dRuby

2/20

とある受託開発での活用

Page 21: Reading 1st dRuby

• 某組み込み開発

• 2ヶ月前にお祈りした組み込み案件が戻ってきて、2ヶ月分遅延していた

• 引き継げる参照実装 (C) がなくスクラッチでの Ruby で開発した

• プロセス間通信

• 某分散ミドルウェア開発

• 開発期間が1年→半年→3ヶ月と倍々に減った

• 実行速度 (C++) ではなく開発速度 (Ruby) に倒した

• プロセス間通信、ホスト間通信

2008年春の珍事ほか

転ばぬ先の杖

Page 22: Reading 1st dRuby

使い方についてはこちら

dRubyによる分散・Webプログラミング

http://www.amazon.co.jp/dp/4274066096関 将俊 著

Page 23: Reading 1st dRuby

1st dRuby 3つのポイント

Page 24: Reading 1st dRuby

•#1 Marshal •#2 TCPSocket •#3 メタプログラミング

3つのポイント

Page 25: Reading 1st dRuby

#1•#1 Marshal •#2 TCPSocket •#3 メタプログラミング

3つのポイント

Page 26: Reading 1st dRuby

http://docs.ruby-lang.org/ja/2.2.0/class/Marshal.html

Page 27: Reading 1st dRuby

Marshal.dump

Marshal.load

Page 28: Reading 1st dRuby

コピペ

Page 29: Reading 1st dRuby

#2•#1 Marshal •#2 TCPSocket •#3 メタプログラミング

3つのポイント

Page 30: Reading 1st dRuby

http://docs.ruby-lang.org/ja/2.2.0/library/socket.html

Page 31: Reading 1st dRuby
Page 32: Reading 1st dRuby

• デフォルトで DRbProtocol は DRbTCPSocket を要素として持つ配列を保持している • DRb::DRbProtocol.class_eval(‘@protocol’) # => [DRbTCPSocket]

DRb::DRbProtocolhttps://github.com/ruby/ruby/blob/v2_2_0_preview2/lib/drb/drb.rb#L1019

• 721行目以降にDRbProtocolの各種メソッドの定義があるが、いずれも@protocolへの委譲となっている

Page 33: Reading 1st dRuby

• DRbTCPSocket.open は、TCPSocket.open で接続を行う

DRb::DRbTCPSockethttps://github.com/ruby/ruby/blob/v2_2_0_preview2/lib/drb/drb.rb#L815

• DRbTCPSocket.open_server は、TCPServer.open でサーバー接続をオープンする

Page 34: Reading 1st dRuby

DRbProtocolは デフォルトで

DRbTCPSocket

Page 35: Reading 1st dRuby

#3•#1 Marshal •#2 TCPSocket •#3 メタプログラミング

3つのポイント

Page 36: Reading 1st dRuby

DRbServer Side (DRb.start_service)

:Client

:Front

DRbServerDRbObject

<<Stub>>__send__(*args)

<<LocalObject>>

Client Side (DRbObject.new_with_uri)write

method_missing(:name, …)

druby://localhost:8989

URIとリモートオブジェクト

• method_missing • __send__

Page 37: Reading 1st dRuby

呼び出す側 (よく分からないところピックアップして書いて動かしてみる。いろいろ端折ってます。)

Page 38: Reading 1st dRuby

http://docs.ruby-lang.org/ja/2.2.0/method/BasicObject/i/method_missing.html

Page 39: Reading 1st dRuby
Page 40: Reading 1st dRuby

method_missingが適切な例

『Ruby Magazine 出張版 正しいRubyコードの書き方講座』65ページより抜粋

どんな場合ならmethod_misssingを使ってもよいのでしょうか。例えばmethod_missingの「よい」応用例としてはdrb (Distributed Ruby) が挙げられます。drbではリモートオブジェクトにメソッドを転送するためにmethod_missingが効果的に使われています。 !1つめは、転送先のオブジェクトにどんなメソッドがあるのか効率よく判断できないことです。Rubyではいつメソッドが追加されるかわからないうえに、method_missingのような機構があるため、実際にメソッドを呼んでみなければ本当にメソッドが存在しないのか判定できません。 2つめは、すべてのメソッドが対等に扱われるということです。drbにおいて、method_missingが拾われたメソッド呼び出しは基本的にすべて転送されます。「すべて」というところがポイントです。 (以下略)

Page 41: Reading 1st dRuby

呼ばれる側 (よく分からないところピックアップして書いて動かしてみる。いろいろ端折ってます。)

Page 42: Reading 1st dRuby

http://docs.ruby-lang.org/ja/2.2.0/method/Object/i/__send__.html

Page 43: Reading 1st dRuby
Page 44: Reading 1st dRuby
Page 45: Reading 1st dRuby

まとめ

Page 46: Reading 1st dRuby

•#1 Marshal •#2 TCPSocket •#3 メタプログラミング

3つのポイント

Page 47: Reading 1st dRuby

こう組み合わせれば出来るんだ

Page 48: Reading 1st dRuby

•コミュニケーション

•シンプルさ

•フィードバック

•勇気

•敬意

XPの5つの価値

Page 49: Reading 1st dRuby

シンプルなのはカッコいい

Page 50: Reading 1st dRuby

https://github.com/ruby/ruby/blob/trunk/lib/drb

Further Reading

Page 51: Reading 1st dRuby

予習復習研究はこちら

dRubyによる分散・Webプログラミング

http://www.amazon.co.jp/dp/4274066096関 将俊 著

Page 52: Reading 1st dRuby
Page 53: Reading 1st dRuby

https://twitter.com/koic/status/541961871675240448