Slide 1

Slide 1 text

dRubyの紹介 19年目のdRuby 中島 滋(@ledsun) 株式会社ラグザイア 2024/09/25 第三回 町田SE-meetup

Slide 2

Slide 2 text

dRubyとは 今日はdRubyについて紹介したいと思い ます。dRubyはRubyのライブラリーの1つ です。 dRubyのdはdistributedのdです。 分散の意味です。

Slide 3

Slide 3 text

分散 ここでの分散は、複数のプロセスに分散す るという意味です。

Slide 4

Slide 4 text

たとえるなら リモートプロシジャコールの仲間です。 CORBAやJavaのJava Message Service、SOAPを使ったWebサービスな どをイメージしてもらうえるとわかりやすい と思います。 例えが古いんですけど、dRubyも1999年 生まれ。20世紀のテクノロジーです。

Slide 5

Slide 5 text

irbで試してみる Rubyにはirbという対話型のシェルがあり ます。これを使ってdRubyを試してみま しょう。 irb -r drb

Slide 6

Slide 6 text

試してみましょう サーバー class Foo def greeting = puts 'Hello, World.' end DRb.start_service 'druby://localhost:54320', Foo.new

Slide 7

Slide 7 text

試してみましょう (続き) クライアント foo = DRbObject.new_with_uri 'druby://localhost:54320' foo.greeting どうなるでしょうか?

Slide 8

Slide 8 text

試してみましょう (まとめ) Remote Method Invocationできるこ とがわかりました。

Slide 9

Slide 9 text

最初の面白い点 RubyではdRubyがRubyに標準添付さ れています。 JavaのJMSの場合は、J2SEには入ってい なくて、J2EEに入っていました。

Slide 10

Slide 10 text

データの共有 サーバーでハッシュ公開します。 DRb.start_service 'druby://localhost:54321', Hash.new

Slide 11

Slide 11 text

データの共有 (続き) クライアントで数値を設定します。 kvs = DRbObject.new_with_uri 'druby://localhost:54321' kvs[:number] = 1

Slide 12

Slide 12 text

データの共有 (続き) クライアントをもう1つひらいて、値を確認 kvs = DRbObject.new_with_uri 'druby://localhost:54321' kvs[:number] さらに、値を設定 kvs[:number] = 2

Slide 13

Slide 13 text

データの共有 (続き) クライアント1に戻って kvs[:number] どうなるでしょうか?

Slide 14

Slide 14 text

データの共有 (まとめ) 値を共有できていることがわかります。 こんな感じで、dRubyを使うと簡単にサー バーを経由して値を共有できます。 この仕組みをつかってテストを並列分散実 行する仕組みを作っている人達もいるみた いです。

Slide 15

Slide 15 text

変な物を共有する Rubyには$stdoutというグローバル変数 があります。 文字通り標準出力を表してます。 $stdout.puts 'hi' hi が表示されます。 puts ‘hi’ と同じ動きです。

Slide 16

Slide 16 text

変な物を共有する (続き) クライアント1で DRb.start_service kvs[:stdout] = $stdout

Slide 17

Slide 17 text

変な物を共有する (続き) クライアント2で kvs[:stdout].puts 'Hello' どうなるでしょうか?

Slide 18

Slide 18 text

変な物を共有する (続き) エラーになる 1. クライアント1で’Hello’が表示される 2. クライアント2で’Hello’が表示される 3.

Slide 19

Slide 19 text

変な物を共有する (続き) クライアント1に’Hello’表示されます。 この動き、ぶっとんでいると思いません か?

Slide 20

Slide 20 text

変な物を共有する (まとめ) クライアント1の DRb.start_service がミ ソ。クライアントだけどサーバーにもなって います。

Slide 21

Slide 21 text

リモート呼び出しとのちがい 最初CORBAやJMSに似てるって言った。 けど、すこしちがう。CORBAやJMSは、ク ライアントからサーバーを呼び出す仕組み をつくって、あとは使う人がよしなにって感 じ。 dRubyには、クライアントから共有したオブ ジェクトを別のクライアントから呼び出す呼 び出す仕組みも入っている。クライアント2 はクライアント1のURLを知らなくても呼び 出せる。

Slide 22

Slide 22 text

分散 全てのノードがクライアントにもサーバーに もなりやすい仕組み。クライアント-サーバー を作るための仕組みじゃなくて、分散コン ピューティングするための仕組み。 dRubyのdはdistributedのdです。 分散の意味です。

Slide 23

Slide 23 text

まとめ だからなんなの?って思うじゃないです か?僕もよくわかっていません。 dRubyの存在を2005年に知って、そのと き試してわからなかった。19年経っても全 然わっかんねーわ

Slide 24

Slide 24 text

参考文献 関 将俊 “n月刊ラムダノート Vol.2, No. 1(2020)” 関 将俊 “dRubyによる分散・Webプログ ラミング” @makicamel “dRuby 入門者によるあ なたの身近にあるdRuby 入門”

Slide 25

Slide 25 text

提供