Ruby 1.8.x には分散オブジェクトシステムを実現するためのライブラリ「dRuby」が標準添付されており、ごく普通の Ruby オブジェクトをプロセス/ネットワークを越えてシームレスにやりとりできることをご存じでしょうか?
本書では、dRuby について、最新の情報をまとめること、そして dRuby とその周辺のライブラリを理解し応用するためのチュートリアルとなることを目的として、その仕組みからアプリケーションの作成方法までを、dRuby の作者自身が解説しています。
本書は読者に分散オブジェクトシステムについての知識を要求しません。 分散アプリケーションの設計方法や実装方法、そしてはまりやすい点までもを豊富な図とサンプルでわかりやすく解説しています。 他方、DCOM や CORBA といった他の分散処理システムに慣れた読者にとっても、dRuby の設計思想を知り、Lightweight-Language 特有の「手軽さ」を味わえる構成となっています。特に Web アプリケーションへの分散処理システムの応用は刮目に値するでしょう。
「Ruby や dRuby でアプリケーションを書きたい」、「分散システムやマルチスレッドプログラミングに好奇心をかきたてられる」、「J2EE などちょっと大掛かりなシステムに疑問を感じている」、「クライアント/サーバ型のネットワークプログラミングや CGI/JSP/ASP/Servlet などウェブプログラミングに興味がある」、どれかにあてはまる人に本書はおすすめめの一冊です。
関といいます。
もう覚えている人も少ないと思いますが、dRuby という分散オブジェクトシステムを作りました。 Ruby の普通のオブジェクトをマシン/ネットワークを越えて交換したり、メソッド呼び出したりできる小さな仕様のライブラリです。 気軽でかっこいい Ruby のような使い心地に近付くことを意識しました。 ですから、Java RMI や CORBA や DCOM、Sun RPC を学んだ方には、ぜひその手触りの違いにがっかりして欲しいと思っています。
先日、その dRuby を用いたプログラミングの本を出版させてもらいました。 二度目の出版の機会を与えてくれたオーム社の森田さんに感謝しています。 ルビーをくわえたツバメの表紙がステキな本です。 表紙のカバーを取り外したときの色使いもなかなかのものです。 もし手に入れたら、一度カバーを外してみることをおすすめします。
この本では、irb を 使った対話的な実験をたくさん用意しました。 対話的に別プロセスのオブジェクトを操作しながら、dRuby の不思議な感覚に触れてることができると思います。
ruby-1.8.x に添付される最新の dRuby に関して解説しているほか、dRuby の周辺にある ERB、Div や Rinda、Ring といった有名無名のライブラリも紹介しています。
この中で ERB は唯一、広く知られているように思います。 文書の中に Ruby スクリプトを埋め込み評価するライブラリの一つです。
Div は Web GUI のためのフレームワークの一つで、セッション管理を行う Tofu とページ生成、リクエストのハンドリングを行う Div::Div で構成されます。 RDBMS に関する機能を、わざと入れていない辺りが Rails と大きく違います。
Rinda はプロセス間協調糊言語 Linda の Ruby による実装です。 タプルスペースと呼ばれる、複数のプロセスが協調するためのしかけを提供します。 Rinda と dRuby を利用して、コンフィギュレーションなしで名前サービスや依存するサービスとの同期を行うのが Ring です。www.druby.org の CMS は Ring を利用して作られています。
そうそう。
この本のタイトルは「dRuby による分散・Web プログラミング」です。 実は本書、dRuby を使用して分散プログラミングを解説する本なのです。 「分散プログラミングはこういうものなのだっ!」と声高に言えないシャイな私は、dRuby やその周辺の解説をする振りをして、行間にそれを書くことにしました。 どんな時に、どんな風にプロセスを分割するのか、複製をいかにもたせるのか、 スレッドにすべきか、どうやって協調するのか、いろいろなことを考えるきっかけになると、とてもうれしいです。
Ruby が私の OOP 観を再構築してくれたように、dRuby が誰かのプログラミングの幅を拡げることを願っています。なんてね♪
はじめに
謝辞
この本の内容について
読者対象
動作環境
この本の構成について
凡例
著者紹介
■1章 分散オブジェクトシステムdRuby
1.1 分散オブジェクトシステム
1.2 RPCとRMI
1.3 プログラミングから見た分散オブジェクト
1.4 代表的な分散オブジェクトシステム
1.5 dRubyの特徴
1.5.1 Pure Ruby
1.5.2 Rubyの特徴をそのままに
1.5.3 値渡しと参照渡し
1.6 まとめ
■2章 Hello, dRuby
2.1 Hello, World.
2.1.1 印字サーバ
2.1.2 irbからの利用
2.1.3 スクリプト版クライアント
2.1.4 dRubyのURI
2.2 Reminder
2.3 まとめ
■3章 eRuby
3.1 eRuby
3.2 ERB
3.2.1 ERBのインストール
3.2.2 erubyとの違い
3.2.3 ERBクラス
3.2.4 ERB使用例
3.3 Reminder CGIインタフェース
3.3.1 CGIの準備
3.3.2 一覧表示
3.4 まとめ
■4章 参照渡しと値渡し
4.1 参照渡しと値渡し(pass by reference、pass by value)
4.1.1 Rubyではどうなる?
4.1.2 dRubyでは?
4.1.3 どちらがサーバでどちらがクライアント?
4.2 自動的な参照渡し
4.2.1 can't dump
4.2.2 DRbUndumped
4.3 未知のオブジェクトとDRbUnknown
■5章 マルチスレッド
5.1 dRubyとマルチスレッド
5.1.1 いつでもマルチスレッド
5.2 Rubyのマルチスレッド
5.2.1 スレッドの操作
5.2.2 セーフレベル
5.3 スレッド間の通信
5.3.1 排他制御
5.3.2 スレッド間のオブジェクトのやりとり
■6章 Webアプリケーション
6.1 プロセスの分割とオブジェクトの配置
6.1.1 オブジェクトの配置
6.1.2 Rubyのバグトラッキングシステムの報告より
6.2 DivとTofu
6.2.1 Divのセッション管理の戦略
6.2.2 Div::Div
6.2.3 Tofu
6.2.4 Divのインストール
6.2.5 First Div
6.2.6 Div::Div more.
6.2.7 セッション管理
6.2.8 DivCal
6.2.9 DivをWEBrickで使用する
6.3 まとめ
■7章 Rindaによるプロセスの協調
7.1 LindaとRinda
7.1.1 Linda
7.1.2 Rinda
7.2 Rindaの基本操作
7.2.1 TupleSpaceの生成
7.2.2 タプルとwrite、take
7.2.3 readとread_all
7.2.4 タイムアウトとinp、rdp
7.2.5 タプルとパターンマッチング
7.3 基本分散データ構造体
7.3.1 Bag
7.3.2 Struct, Hash
7.3.3 Array, Stream
7.4 アプリケーションに向けて
7.5 Rindaの拡張??タプルの有効期限
7.5.1 有効期限とRenewer
7.5.2 TupleEntryを用いた明示的なキャンセル
7.6 Rindaの拡張:notify
7.7 Hashタプル
7.8 moveとTupleSpaceProxy
7.9 Rindaの拡張:Ring
7.9.1 ネームサーバの場所
7.9.2 TupleSpaceの検索
7.9.3 TupleSpaceを利用したネームサーバ
7.10 Ringを使ったアプリケーションの例
7.10.1 待ち合わせのいろいろ
7.10.2 tiny I like Ruby.
■8章 GCとのつきあい
8.1 GC
8.2 dRubyとGC
8.3 アプリケーションで工夫しよう
8.4 DRbIdConvでGCを防ぐ
8.4.1 DRbIdConvのカスタマイズ
■9章 dRubyのセキュリティ
9.1 dRubyの態度
9.1.1 $SAFE
9.1.2 ACL
9.1.3 UNIXドメインソケット
9.2 SSHによるポートフォワーディング
9.2.1 実験
9.2.2 dRubyゲートウェイ
■付録
参考文献
分散、並列、マルチスレッド
プログラミング一般
Ruby
利用例
Rubyist Magazine では、一周年記念企画として本書のプレゼントを行っています。詳しくは 【一周年記念企画】 プレゼント をご覧ください。