RubyKaigi2010スペシャルレポート

Ruby会議2010 3日目レポート[更新終了]

この記事を読むのに必要な時間:およそ 15 分

Masatoshi SEKIさん「RWikiと怠惰な私の10年間」

SEKIさんの発表です。冒頭で「Castoro,おもしろかった!」と一つ前の発表に言及してから,セッションがはじまりました。

最初に「私」に関する紹介がありました。SEKIさんはとちぎRuby(toRuby)を開催されており,毎月第一水曜日に開催しているとのことです。また,⁠サラリーマン」「自称アーティスト」であると述べ,⁠理想の開発者とかうさんくさい」⁠オープンソースに愛はなく自分のため」などと話し,会場の笑いを誘っていました。

SEKIさんはdRubyの開発者であり,dRubyについて解説された本「dRubyによる分散・Webプログラミング」の初刷が5周年と話し,会場から拍手がありました。RubyKaigiについては5回登壇しており,皆勤賞であるとも語っていました。

RWikiの現状

RWikiはオープンソースソフトウェアとして,cosmixngのsvnで管理されているそうです。ここ最近では特に変更は加えられておらず,Ruby1.9の対応については「飽きた。むしろ1.9がRWikiに対応してほしい」と述べました。RWikiは非公開のものと公開のものとが存在し,非公開のものは2つあり,それぞれ35,000ページと25,000ページにもなっているそうです。

RWikiは10年前にruby-listで公開されたのがはじまりで,8月31日に10周年を迎えるそうです。RubyKaigiの開催日と近いことからRubyKaigiはRWikiの10周年記念イベントであると冗談を交えながら,RWikiはdRubyやERB,RDToolのサンプルとして作られたと説明されました。

RWikiの特徴

RWikiはRDを使うWikiであり,機能としては特徴的なものはないと話します。どちらかと言うと実装の方が自慢とのことです。dRubyの長生きなサーバとCGIで構成されており,CGIは実質ただのHTTPインターフェースであると説明されました。

拡張性については「プラグインはよくわからない」と話し,機能としては用意していないそうです。とは言え,dRubyを用いれば外部から操作し放題とのことです。

ビューについてはHTMLを生成するオブジェクトがあり,RDからERBソースを生成し,さらにそれをコンパイルをしたものを保持しているとのことでした。

RWikiはデータやオブジェクトを全てメモリに配置するとし,ファイルは起動時に読込むそうです。RWikiはデータベースを持たないのでSQLもORMも不要と説明し,むしろRWikiがデータベースのように見えることから「RWikiはドキュメント指向データベース,10年前からバズワードをおさえている」と冗談混りに話されていました。

某サイトの紹介

某サイトの紹介と称し,10年間の運用でおきた問題と対応について話されました。ある大きなチーム向けのRwikiがあり,35,000ページと25,000ページのRWikiが1つのマシンで動作し,プロセスのサイズが1.2GBにもなることから「Rubyは案外強い」と話されていました。実行中のレスポンスも特に問題はないが,再起動に時間がかるのが問題だそうです。

いくつかカスタマイズを加えられているそうで,主にStoryCard拡張やTestSuite生成などが実装されているそうです。StoryCard拡張は運用中でもチケットの属性や書式,ワークフローがどんどん変更できると話し,この紙のような無法ぷりが長期的な運用には必要と説明されました。TestSuite生成はたくさんのテストケースを見せるとやる気をなくすことから,テスト計画,成績などからおすすめのものを抽出する機能だそうです。他にもCSVのブラウズなどに手が加えられているとのことです。

運用中の問題として,⁠基本的には遅いんですけど問題」と称し,起動やirb操作,全文検索が遅いことが問題と話します。起動については,⁠数ヶ月に一度の問題なので我慢できなくもない」と述べ,結局他者に指摘されるまで直さなかったと語られました。また,ページ数が増えるにつれレスポンスが悪化した問題はめずらしく自主的に直した問題だそうで,⁠たまにやると気分がいい」とのことです。

RWikiはirbからdRubyを用いて操作することができるそうですが,メソッド名を打ち間違えると反応が非常に遅くなる問題があったそうです。原因についてruby-devで相談したら,Matzさんから「咳さん」のアクセントについて話題をふられ,そこで議論は終わってしまったそうです。

問題の傾向としては,オブジェクトを一つのプロセスに配置することは自然としながらも,主にそれによるメモリや,速度の問題が多いと話されました。オブジェクト数がボトルネックになることが多く,⁠不要なオブジェクトを保持しない」⁠問題が起きてから考える」とも述べられました。

また,規模については今後のことは予想がつかないので,あらかじめ準備するのは無駄と話し,問題の状況に応じて対応すべきと説明されました。数GBのGCについても少し触れ,そこそこと評しながらも「GC開発者はRWikiに挑戦すべき」と会場の笑いを誘っていました。

ところどころでSEKIさんの挟む小ネタが聴衆の笑いを誘い,終始なごやかなムードの発表でした。

画像

画像

Alex Sharpさん「Practical Ruby Projects with MongoDB」

Alexさんによる,MongoDBの発表です。最初に「SQLの問題」と称し,RDBMSは悪くないとしながらも,RDBMSは開発者のニーズに合わないと話します。開発者はオブジェクトを扱うが,そのオブジェクトとRDBのリレーションが合わないと言及し,ORMはオブジェクトとリレーションをマッピングするが,もっとうまくできるはずと語りました。ストーカーの例をだしながら,MongoDBはjsonでデータを格納することや,RDBMSと違い不要なテーブルを作る必要がないと説明されました。AlexさんはSQLも悪くはないと話しながらも,⁠Rubyistだからこれで満足してはいけない」と述べました。

MongoDBの特徴

MongoDBの特徴として「スキーマがない」⁠アジャイルでイテレーティブな開発に向く」ことをあげていました。マイグレーションについては不要と言い切り,面倒なだけと話します。MongoDBはドキュメント指向でそもそもRDBとは考え方が違うと述べ,embedded documentのおかげでかなり楽ができると話されました。

MongoDBは書き込みと読み込みが早いとし,⁠upsert(Update + Insert)」という概念とインデックスについて説明されました。upsertはドキュメントが存在すれば更新,なければ新規に追加するという概念で,MongoDBのrubyドライバーではsaveメソッドに相当します。MongoDBではインデックスを張ることが可能で,複合キーも用いることができると言います。JOINやトランザクション,参照整合性はサポートされていないと説明がありました。参照整合性については,データベースではなく,アプリケーション側の責任であると説明されました。

Practical Projects

Practical Projectsとしていくつかの事例の紹介がありました。1つ目は簿記アプリケーションでMySQLなどでは複数のテーブルを用意する必要があり,トランザクションが必要になりますが,MongoDBではembedded documentsがあるためデータモデルが簡潔に定義できると説明されました。

2つ目はcapped collectionによるロギングのお話でした。MongoDBにはcapped collectionというmemcachedと似た機能があり,それを用いてログの分析を行われるそうです。

最後に定番な例として,ブログアプリケーションの実装についてお話されました。ブログについては実はSQLよりMongoDBの方が作りやすいとし,SQLではPostモデルはAuthor,Tags,Commentsの3つのモデルが必要になりますが,MongoDBではembedded documentsを用いることでTagsを配列としてPostモデルに格納できるため,簡潔に定義できる上にちゃんと検索できると説明されました。

Object-Document Mappers

MongoDBにもORMのようなものがいくつか存在しており,⁠Ruby Mongo Driver」⁠MongoMapper」⁠Mongoid」の3つが紹介されました。勉強としてRuby Mongo Driverを直接叩くことをおすすめされていました。MongoidについてはRails3と相性が良いと話し,Rails2とRails3それぞれで使えると述べました。

質疑応答

質疑応答ではたくさんの人から質問があり,MongoDBへの注目が伺えました。MongoDBはまだまだ情報が少ないので,実際に使用している方のお話はとても貴重でした。

画像

画像

著者プロフィール

KaigiFreaks レポート班

KaigiFreaksとは,会場に来れなかった人にも,雰囲気や内容を楽しんでもらえるように動画収録や配信を行うことをミッションに,RubyKaigi2008で結成された特別編成チーム。

RubyKaigi2009からはgihyo.jpを中心にテキストと写真で現場の様子を伝えるレポート班が加わり,現在のKaigiFreaksは配信班とレポート班の2班編成。


赤松祐希(あかまつゆうき)

2010年よりフリーランスとして活動するプログラマ。Ruby(on Rails)によるアプリケーション,システムの開発を得意とする。好きな言語ももちろんRuby。コードの質について考える日々。

blog:http://ukstudio.jp/
twitter:http://twitter.com/ukstudio


大和田純(おおわだじゅん)

源氏名はjune29。RubyKaigi2010実行委員,KaigiFreaksレポート班。

ディスカバリーエンジン「デクワス」を開発・運用中のサイジニア株式会社勤務のWebクリエイタ。北海道出身。技術が人々の生活をどのように豊かにしていくかを考えるのが楽しくて,新しいものはどんどん日常に取り入れてみる。好きな言語はRuby。尊敬する漫画家は荒木飛呂彦先生,好きな素数は29。

URLhttp://june29.jp/


すがわらまさのり

ハンドルネームはsugamasao。

若手IT勉強会によく出没する。仕事では Flex での Flash 開発を中心に,自社サービスの iPhone アプリ開発や Ruby での Web アプリケーションの開発を行う。普段はどーすればラクして良い仕事ができるかを考えている。Rubyとアルコールが好きです。伊坂幸太郎さんはもっと好きです。

blog:http://d.hatena.ne.jp/seiunsky/
twitter:https://twitter.com/sugamasao


白土慧(しらつちけい)

ハンドルネームはkei-s。RubyKaigi2010実行委員,KaigiFreaksレポート班。

ディスカバリーエンジン「デクワス」を開発・運用中のサイジニア株式会社勤務のWebエンジニア。札幌市出身。大学時代にWebと複雑ネットワークの楽しさを知る。人と情報のつながりを考えるのが好き。好きな言語はJavaScriptとRuby。好きな小説家は舞城王太郎。

URLhttp://d.hatena.ne.jp/kei-shttp://friendfeed.com/keis


三村益隆(みむらみつたか)

(株)永和システムマネジメントサービスプロバイディング事業部所属。Asakusa.rb。お仕事では,Linuxのカーネル開発やC++での開発等Ruby以外の仕事が多いが,Ruby好き。

blog:http://d.hatena.ne.jp/takkan_m
twitter:http://twitter.com/takkanm