RubyKaigi2009 スペシャルレポート

Ruby会議2009 2日目レポート[更新完了]

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

小島克俊さん「ビジネスユースでのRuby導入のポイントと解決策」⁠

続いて,LT後のセッションです。CTCの小島さんの発表は,Ruby技術者認定試験の制定までの話を中心としたものでした。

甲冑を着た男性の写真を挿絵にはさみながら,社会情勢等の外部要因に左右されることなく個々に想いを持って開発に取り組んでいる社内のエンジニアたちを「Samurai」と呼び,彼らへの敬意を丁寧に語ってくれました。そんなSamuraiエンジニアたちの熱中の対象はRubyであるとのこと。

「どのようにして彼らを認めていけばよいだろうか。ただ単に一企業として彼らを優遇するだけではなく,もっと広く,Rubyプログラマに評価できる仕組みがほしい」として,辿り着いたひとつの答えがRuby技術者認定試験だったと述べました。

CTCは,まつもとゆきひろさんやRubyアソシエーションと協力して,この試験を2007年10月にスタートしています。認定試験を通じて,企業には「資格保持者が○○人いる」という外部への価値を,個々のエンジニアには「資格を持っていると給料アップ」といった価値を提供できます。

発表の残りの時間では「あまり知られていないであろう松江市を紹介します」として,ときには英語で,会場の皆さんに松江市をアピールしていました。海外の方には,誤解を与える内容だったかもしれません :-D

画像

画像

成田智也さん,浜中慶さん「Ruby,Railsによる「ケータイ」ポータルの作り方!」

2人は,Rails製Webアプリケーションの運用を行ってきた経験から,⁠ケータイ」向けサイトの開発・運用に役立つ知見を紹介してくれました。

実際に稼働しているRailsで作られたサービスには,@nifty TimeLineアバウトミーなどがあるとのこと。初めて@niftyでRailsアプリケーションが稼働を始めた2007年から今に至るまで,さらにいくつかのサービスがリリースされていると述べました。

まず,通常のWebアプリケーション開発・運用とは異なる「ケータイ」サイトの特徴として,⁠仕様変更当たり前」⁠機種依存当たり前」⁠多様なターゲット層と利用シーン」を挙げ,Railsを活用した開発がどのように効果的か,話していました。

サービスごとに「メーリング処理」⁠画像加工処理」等の必要機能をモジュールとして実装する現状の開発スタイルを「垂直統合型」と呼び,これではモジュールの再利用ができず,開発コストが膨らむ問題があると整理していました。それを受け,今後は機能モジュールを共通化し開発の効率化を目標とした「水平分業型」に移行し,もっとスピーディなケータイサイト構築を目指すと意気込んでいました。

また,RubyKaigiのスポンサーを務めたり,大学でRubyを教える講義を持ったりと,Ruby界に様々な形で貢献しています。

画像

画像

吉見和也さん「実戦投入Rails - RubyKaigiEdition」

株式会社RAWHIDE.のCTOを務める吉見さんが,業務で培ったRails開発のノウハウを紹介しました。WEB+DB PRESS Vol.51 特集1「実戦投入Rails」では語り尽くせなかった内容も含むRubyKaigiEditionとのこと。

事例として紹介されたのは,某有名企業内で使用される「10万人以上が利用する人事管理システム」でした。筆者には,想像も及ばない規模のアプリケーションです。運が悪いことには,すでに運用が始まっている既存プロジェクトからのシステム移行が必要であり,なおかつ,そのプロジェクトが大炎上していたそうです。

旧システムはとても手を触れられるような状態ではなく,何かひとつ機能を追加しようとすればそれだけで数ヶ月を要してしまう…そんな状態で,旧システムと,Railsで作る新システムをいかに上手に共存させるかが,プロジェクト成功の鍵でした。

「Railsは,用意されたRailをはみ出さないように走ることで,効率を上げることができる。すでに存在するシステムに合わせて作らなければならないときは,ナチュラルキーなどを活用して,とにかくRailに乗せてあげましょう」と,苦労した経験からつかんだ知見を披露してくれました。

ちなみに,件のプロジェクトは無事に進んだようで,今では「信頼」を得られたと,吉見さんは誇らしく話していました。

画像

画像

大井宏友さん「Railsサイト安定運用の心構え ~8つのサービスから学ぶ」

多数のWebアプリケーションを運用されているMedia Technology Labs(以下,MTL)から,大井さんの発表でした。RubyKaigi2009スタッフ打ち上げの参加登録に利用されているATNDも,MTL発のRailsアプリケーションですね :-)

MTLは「自社だけではなく,世の中に対して貢献していきたい」という高い志しのもと,スピーディにWebアプリケーションをリリースしているとのこと。組織として,開発言語には特にこだわりがないそうで,採用ルールは「担当するエンジニアが最も早く開発できるもの」というシンプルなもの。結果として,Railsが採用されることが多いようです。

アプリケーションごとに,使用しているRailsのバージョンはばらばら,WebサーバもMongrel,Thin,Passengerだったりとバラバラで,基本的にそのときの最新安定版を選ぶそうです。開発が「スピード重視」であることが伺えます。

「Perl,PHPはCPUを食う」⁠Railsはメモリを食う」という特徴に着目し,これらを組み合わせて1台のサーバ上で運用すると,上手く共存できるという,現場ならではのノウハウは面白かったです。⁠一度はハマっておこう」という失敗談の事例では,⁠DB Tuning」⁠Log rotation」⁠Restart Mongrel」の3つを具体的に紹介しました。

最後に,⁠サン・マイクロシステムズがオラクルに買収されたので,クレジットがどうなるか分かりませんが…」と前置きしつつ,Mash up Awardを告知しました。

画像

画像

須藤功平さん「CとRubyとその間」

Lightning TalksではActiveLdapの話をしてくれた須藤さん。この発表でも,他の自作ライブラリを「さっきリリースしました」と紹介し,たくさんの拍手を集めていました。

Rubyの得意なことは「直感的・柔軟」⁠苦手なことは「高速な動作」と整理し,その逆の特徴をもったC言語と,どのように使い分けていこうか,という内容でした。

考え方のパターンは,⁠Rubyの苦手をカバーするか」⁠Rubyの得意を活かすか」の2種類であることを指摘しました。

最初に「苦手をカバー」の例が取り上げられました。ここで例として挙げたものは,全文検索groongaの機能をRubyから利用するためのライブラリ「Ruby/groonga」と,ActiveRecordライクにgroongaにアクセスするための「ActiveGroonga」です。

C言語で実装されたgroongaは高速な全文検索が可能であり,これは,Rubyの「高速な動作が苦手」を補うものと説明しました。ActiveGroongaを使えば,Railsアプリケーションのモデルの柔軟性はそのままに,groongaによる全文検索機能を取り入れることができるそうです。近く,Ruby/groongaは,ニコニコ大百科buzztterのバックエンドに採用されるかも…とのことでした。

画像

画像

黒田雄一さん,松村章弘さん「オープンソース開発を始めよう~扉を開けば奇跡が起きる~」

黒田さんと松村さんの2人による発表です。黒田さんと松村さんは,ともに所属の異なります。しかし,2人が同じ壇上に立ったのは,オープンソースプロジェクトSKIPがつないでくれたからです。

2人の主張は一貫して「オープンソース開発は素晴らしい」⁠オープンソース開発で奇跡を体験した」⁠オープンソース開発を始めよう」というものでした。この発表では,オープンソース開発を進める上で問題となったことと,その解決策について,そして,2人の体験した奇跡について語ってくれました。

黒田さんからは,SKIPと連携するWikiシステムである「SKIP-Wiki」「オープンソースで」開発した経験と,そこで得られた知見を話してくれました。SKIP-Wikiは,⁠Sonic Garden」⁠三菱UFJインフォメーションテクノロジー」⁠永和システムマネジメント」の3社で共同開発されているプロジェクトです。

通常の,社内に閉じた開発体制と異なり,面と向かって話をできる機会が少なく,認識のズレによる無駄な作業の発生しがちです。これに対しては,自作のSKIPを活用して情報を一箇所に集め,密なコミュニケーションを実現できたそうです。また,プロジェクト全体の状況把握が困難になる問題には,コード管理にGitHubと,プロジェクト管理にRedmineをそれぞれ当てて,対処できたとのことでした。

続いて,松村さんのお話です。SKIPをオープンソースプロジェクトとして公開してからの1年間,本当に色々なことがあったと,熱っぽく語りました。ユーザから不具合報告をもらってバグに気付けたこと,角谷さんからパッチが届いたこと,セキュリティ専門家の監査を受けられたこと。⁠8ヶ月前のコードに対する34,000行のパッチで160個のコンフリクト」として紹介された体験談では,SKIPを国際化するためのパッチが海外の開発者から届いたときの喜びを伝えてくれました。

発表の最後には,友情出演として共同開発者の諸橋さんが壇上に登り,⁠SKIPはよくできているのでぜひ使ってみてほしい。共同開発を通じて,こちらもたくさん勉強させてもらった」と話しました。

オープンソースプロジェクトの素晴らしさがよく伝わってくる発表でした。

画像

画像

画像

後藤幸生さん,大城学さん,西澤無我さん「Ruby による楽天の大規模サービスと基盤技術」⁠

楽天の後藤さん,大城さん,西澤さんからは,超大量のアクセスを受ける楽天の大規模サービスを支える基盤技術の紹介が行われました。

まず,Railsアプリケーションを実践投入する前に,CakePHPアプリケーションとのパフォーマンス性能比較を行ったことを説明しました。結果から,Railsが大きく劣ることはないと判断し,本格的な実践を目指して動き出したそうです。

運用上,しばしば問題になるのは,⁠データベースの応答性能」「Apache graceful問題」であり,前者にはRailsのモデル内でのテーブル分割を,後者には「gracefulを避ける」を対策としていました。このように,Railsアプリケーションを本稼働できるところまでノウハウを蓄積しています。

後半はROMAを紹介しました。ROMAは,まつもとさんがフェローを務める楽天技術研究所で研究開発が進められている「楽天製KVS」です。実例としては,楽天市場でのユーザの商品閲覧履歴データなどを保持する高性能なストレージとして利用されるそうです。

また,ROMAはプラグイン機構を持ち,シンプルなコードでデータに対する処理を記述できるため,⁠ある値を格納したら,ある値を削除する」といった類の処理を,1回のHTTPリクエストでアトミックに行うことができることを説明しました。

画像

画像

Ilya Grigorikさん「Ruby C10K challenge: High Performance Networking」

RubyのWebアプリケーションでのスケーラビリティやパフォーマンスについて,PostRankのファウンダーであるIlya Grigorikさんが発表しました。

多くのWebアプリケーションでは,⁠アプリケーションのボトルネックより,I/Oのネックのほうが大きい」と言及しました。この問題のために,EPollやKQueueをRubyで扱うライブラリ,EventMachineを紹介しました。

EventMachineを用いることで,並行化して実行したいコードを,イベントのコールバックとして記述できるため,実装のみに集中できます。また,イベントにタイマーを設定したり,長いプロセスを非同期に実行させることも可能です。

また,実際にWeb開発をするにあたって,ステージング環境を用意したのは良いが,本番環境との差が大きく,ベンチマークをとることが難しい場合が多いとのこと。紹介したem-proxyは,EventMachineを利用したプロキシです。届いたHTTPリクエストを複製し,実際のトラフィックを本番環境とベンチマーク環境に渡すことができます。これにより,実際のデータを使ってベンチマークを取れたり,レスポンスの違いをチェックすることもできます。

最後に紹介したBeanstalkdは,メモリ上に構築するワークキューです。スケジューリングや優先度を設定できます。

しかし,多くのメモリを必要とするため,EC2などで利用する場合コストがかかってしまいます。そこで,em-proxyを利用し,直近で必要なジョブのみをBeanstalkdに渡し,それ以外のジョブをMySQLに格納することで,メモリ使用量を減らす実例を示しました。

Mohammad A. Aliさん,Ehab El-Badryさん「NeverBlock and I/O Concurrency in Ruby」

MohammadさんとEhabさんは,RubyでI/Oを並行に実行するためのライブラリNeverBlockを紹介しました。

Ruby1.9では,Fiberをつかってノンブロッキングなコードを書くことができます。 とても速く,メモリ消費も少なく,I/O以外のコードでは競合状態が発生しません。しかし欠点として,スケジューリングを手動で行わなければならず,明示的に管理しなければいけない部分があります。

そこで,Fiberを拡張し,欠点を補ったものがNeverBlockであることを説明しました。DB接続などで用いると,クライアント側は並列化を意識することなくコードを書くことができます。Rubyの高速なWebサーバThinを対象に,Thinの内部で利用されているEventMachineをNeverBlockに置き換え,高速化したことを示しました。

NeverBlockは,Net/HTTP,ActiveRecord,ActiveResouce,Thinをサポートしています。今後,PasserngerやSequelのサポートを計画しており,Erlang並みの速さを目指しているそうです。

会場から,Windowsで動作するかとの質問があり,これに対しては,⁠短いスパンではNo,長い目で見てもNoだろう」と答えていました。しかし,⁠githubで公開しているので,貢献してくれるとうれしい」とも述べていましたespace's neverblock at master - GitHub)⁠

本セッションでは,サンプルコードを豊富に示し,コードをシンプルに記述できることをアピールしていました。

Thomas Eneboさん,Nick Siegerさん「JRuby Update 2009」

JavaVM上で動作するRuby,JRubyの作者,Thomas Eneboさん,Nick Siegerさんの発表です。⁠私たちはとてもFriendlyなので,Ruby,Java,JRuby,ガンダム,タイヤキに興味がある方はぜひ話しかけてください」と自己紹介されました:-)

「Javaは多くの導入実績があり,JRubyは既にあるJavaアプリケーション上にデプロイが可能です。JVMを利用するため,高機能なGCが搭載され,HotSpotによって動的に高速化可能な部分を解析します」と述べ,JRubyで複雑な数式処理を繰り返し行い,だんだん高速になるデモを披露しました。

なお,現在JRubyはRuby 1.8.6またはRuby 1.9に対応しています。Javaのライブラリや関連技術を利用することができ,手持ちのJavaコードを利用したり,ScalaやJavaScriptなど他のJVM系言語を利用することもできることも説明しました。JRuby版のirbであるjirbで,JavaのSwingを呼び出し対話的にGUIアプリケーションを作成するデモを行いました。

JRubyのコードベースは絶えず改善されており,2~3ヶ月ごとにリリースされています。 現状のJRubyで足りない部分は,ネイティブC拡張を利用できないことですが,よく使われるものはJavaに移植されているし,必要であればJavaで拡張を書くか,FFIを利用するとよいと答えていました。

6月15日にリリースされた,JRuby 1.3.1についても言及しました。GAE/Jへの対応,timeout.rbが40%の速度向上,irbが1.9モードで動作可能,メソッドキャッシュの改善などが特徴です。JRuby 1.4.0は9月頃のリリースを予定しているそうです。 Invokedynamic(JSR 292)のサポートや,Javaとの統合をより緊密にすること,他のJVM系言語との連携の改善を予定しているとのこと。

また,ruby2javaライブラリを使って,Rubyで書いたコードからJavaの実行ファイルをコンパイルし,Pure Javaで動作させるデモも披露しました。

JRubyを使ったサービスの事例をあげ,クロスプラットフォームや,GUIへの対応のためにJRubyを用いるケースが多いことを示しました。 Githubをプライベートネットワークで利用できるGitHub:fiも,ソースコードの難読化やOS間の可搬性のためにJRubyを採用しているそうです。

質疑応答の場面では,質問者の方に「JRuby会議2009」と書かれたJava Tシャツがプレゼントされました!

著者プロフィール

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

ハンドルネームはjune29。RubyKaigi2009当日スタッフ(KaigiFreaks)。

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

URLhttp://june29.jp/


白土慧(しらつちけい)

ハンドルネームはkei-s。RubyKaigi2009当日スタッフ(KaigiFreaks)。

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

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

コメント

コメントの記入