その他
    ホーム 技術発信 DoRuby dRubyについて

    dRubyについて

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちわ。wryyyです。

    久しぶりのブログ更新です。

    さて、今回はRubyのメソッドを拡張したdRubyについて書いていきたいと思います。

    【dRubyとは何か?】

    Rubyのメソッド呼び出しを拡張し、ネットワーク越しにメソッド呼び出しを行なえるようにするライブラリです。

    【Hello, dRuby】

    では、実際に「習うより慣れろ!」ということで、早速「Hello, dRuby」を印字するプログラムを見ていきましょう。

    ※実際の動作確認ではターミナルを2つ使用します。

    <ターミナル1>
    #server.rb require 'drb/drb' class Puts def initialize(stream=$stdout) @stream = stream end def puts(str) @stream.puts(str) end end uri = ARGV.shift DRb.start_service(uri, Puts.new) puts DRb.uri sleep

    上記プログラムは、サーバとなります。

    サーバを起動させてみます。

    ruby puts.rb druby://localhost:12345
    

    続いてクライアント側で実験をしていきたいと思います。

    <ターミナル2>
    irb irb(main):001:0> require 'drb/drb' => true

    irbからまず始めにdrbをrequireします。続いて

    irb(main):002:0> there = DRbObject.new_with_uri('druby://localhost:12345') 
    => #
    

    DRbObject.new_with_uri はURIを指定してオブジェクトの参照を返します。

    引数にはサーバ側で指定したURIを指定します

    irb(main):003:0> there.puts('Hello, World.') 
    => nil
    

    putsでサーバ側に「Hello, World」を入力しました。

    サーバ側で「Hello, World」が入力されているか確認してみましょう。

    <クライアント1>
    druby://localhost:12345
    Hello, World.
    

    どうでしょう?サーバ側で「Hello, World」が確認できたでしょうか?

    お分かりの通り、dRubyはクライアント側からサーバ側のメソッドを読み出し、サーバ側で処理を行わせることができるのです。

    ここまでのやり方ですと、クライアント側はirbで実行させましたが

    rubyのスクリプトを書いて実行させることも、もちろんできます。

    #client.rb
    require 'drb/drb'
    
    uri = ARGV.shift
    there = DRbObject.new_with_uri(uri)
    there.puts('Hello, World')
    

    上記スクリプトはirbで以前に打ったものとほぼ一緒ですね。

    実際にclient.rbを実行させてみましょう。

    <ターミナル2>
    ruby client.rb druby://localhost:12345
    
    <ターミナル1>
    Hello, World
    

    と表示されるはずです。

    このようにサーバとクライアントを分けて、ネットワーク越しにメソッドを呼び出し

    処理を行えます。

    ここまで、単純な形でしたが、これ以外にもスレッド処理等複雑な処理も

    行えますので、お試しください。