reading 1st druby
TRANSCRIPT
銀座ライオン 浜松有楽街・松竹ビル店
Reading
(株) 永和システムマネジメント アジャイル事業部
Ruby x Agile グループ 伊藤 浩一 (@koic)
1st dRuby
2015.03.28 (Sat)浜松Ruby会議01 ライトニングトークス
Head First Remote Method Invocation
大事なことは 最初に
浜松開催おめでとうございます
自己紹介
伊藤 浩一 (@koic)•Rubyをもちいた受託開発によるチーム開発のリーダーやってます
•ヘヴィメタルとか好きです •静岡県は26年ぶり2度目です
よろしくお願いします
今日の話
ruby-list:15406
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/15406
1st
dRuby
http://docs.ruby-lang.org/ja/2.2.0/library/drb.html
‘’私のオススメは自分が使っているオープンソースのライブラリだったりソフトウェアだったりのソースを読むといいと思います。’’
Q. オススメのソース、勉強したソースなどはありますか?
須藤 公平 先生 (名著『リーダブルコード』を解説者と一緒に読み解こう ~3章 誤解されない名前~)
https://schoo.jp/class/1502
2/20
とある受託開発での活用
• 某組み込み開発
• 2ヶ月前にお祈りした組み込み案件が戻ってきて、2ヶ月分遅延していた
• 引き継げる参照実装 (C) がなくスクラッチでの Ruby で開発した
• プロセス間通信
• 某分散ミドルウェア開発
• 開発期間が1年→半年→3ヶ月と倍々に減った
• 実行速度 (C++) ではなく開発速度 (Ruby) に倒した
• プロセス間通信、ホスト間通信
2008年春の珍事ほか
転ばぬ先の杖
使い方についてはこちら
dRubyによる分散・Webプログラミング
http://www.amazon.co.jp/dp/4274066096関 将俊 著
1st dRuby 3つのポイント
•#1 Marshal •#2 TCPSocket •#3 メタプログラミング
3つのポイント
#1•#1 Marshal •#2 TCPSocket •#3 メタプログラミング
3つのポイント
http://docs.ruby-lang.org/ja/2.2.0/class/Marshal.html
Marshal.dump
Marshal.load
コピペ
#2•#1 Marshal •#2 TCPSocket •#3 メタプログラミング
3つのポイント
http://docs.ruby-lang.org/ja/2.2.0/library/socket.html
• デフォルトで 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への委譲となっている
• 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 でサーバー接続をオープンする
DRbProtocolは デフォルトで
DRbTCPSocket
#3•#1 Marshal •#2 TCPSocket •#3 メタプログラミング
3つのポイント
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__
呼び出す側 (よく分からないところピックアップして書いて動かしてみる。いろいろ端折ってます。)
http://docs.ruby-lang.org/ja/2.2.0/method/BasicObject/i/method_missing.html
method_missingが適切な例
『Ruby Magazine 出張版 正しいRubyコードの書き方講座』65ページより抜粋
どんな場合ならmethod_misssingを使ってもよいのでしょうか。例えばmethod_missingの「よい」応用例としてはdrb (Distributed Ruby) が挙げられます。drbではリモートオブジェクトにメソッドを転送するためにmethod_missingが効果的に使われています。 !1つめは、転送先のオブジェクトにどんなメソッドがあるのか効率よく判断できないことです。Rubyではいつメソッドが追加されるかわからないうえに、method_missingのような機構があるため、実際にメソッドを呼んでみなければ本当にメソッドが存在しないのか判定できません。 2つめは、すべてのメソッドが対等に扱われるということです。drbにおいて、method_missingが拾われたメソッド呼び出しは基本的にすべて転送されます。「すべて」というところがポイントです。 (以下略)
呼ばれる側 (よく分からないところピックアップして書いて動かしてみる。いろいろ端折ってます。)
http://docs.ruby-lang.org/ja/2.2.0/method/Object/i/__send__.html
まとめ
•#1 Marshal •#2 TCPSocket •#3 メタプログラミング
3つのポイント
こう組み合わせれば出来るんだ
•コミュニケーション
•シンプルさ
•フィードバック
•勇気
•敬意
XPの5つの価値
シンプルなのはカッコいい
https://github.com/ruby/ruby/blob/trunk/lib/drb
Further Reading
予習復習研究はこちら
dRubyによる分散・Webプログラミング
http://www.amazon.co.jp/dp/4274066096関 将俊 著
https://twitter.com/koic/status/541961871675240448