Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Reading 1st dRuby

1,903 views

Published on

浜松Ruby会議01 (http://regional.rubykaigi.org/hamamatsu01)

サンプルコード https://gist.github.com/koic/ea337f39012cd9efa775

Published in: Engineering
  • Be the first to comment

Reading 1st dRuby

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

×