RubyKaigi2011 スペシャルレポート

日本Ruby会議2011 1日目レポート[更新終了]

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

CRuby development team「Next version of Ruby 1.8 and 1.9」⁠

午後最初のセッションは,CRubyのコミッターによる今後のRuby1.9, 1.8について語るセッションです。

まずは,Ruby1.8のメンテナである卜部さんより「Ruby1.8.7には未来がない」というセンセーショナルなスライドが表示され,1.8の今後について話がありました。Rubyのメインバージョンは1.9に移り, 1.8.7についてはゆるやかにメンテナンスはされますが,1.8.6についてはKirk Haninesさんが一回リリースをして終了することを宣言しました。

続いて,Ruby1.9.3のリリースマネージャであるYuguiさんの司会のもと,Ruby1.9についてのセッションが行なわれました。まず,Ruby1.9.3の大きな変更点について紹介があり,それぞれの担当者による紹介がありました。

成瀬さんより,ライセンスの話が紹介されました。現在のRubyのライセンス(狭義のRuby'sライセンス+GPL2互換ライセンス)では,GPLv3と非互換になるという問題点があるそうです。そこで,Ruby1.9.3ではGPL2互換ライセンスを切り離し,BSDライセンスから2つのライセンスを選択することで,GPLv2ともGPLv3とも互換がとれる方法を選択したと言います。 BSDライセンスのみにせず,Ruby'sライセンスを残した理由について,⁠すべての利用者に説明することは大変なため」と理由を述べました。

続いて,1.9.2のリリースマネージャーであった遠藤さんより,PrivateConstantsという機能が紹介されました。Ruby1.9.2では,定数の可視性をprivateにすることはできません。そこで,private_constantというキーワードが新たに作成したと言います(private_constantが指定された定数の可視性は,privateとなります)⁠

class YourLib

class InnerClass

end

private_constant :InnerClass

end

>YourLib::InnerClass

=> private constant YourLib::InnerClass referenced

private_constantで指定された定数はprivateと同じになりますが,今まで通り,オープンクラスでの参照や,Module#const_getにより参照可能なことを説明しました。

最年少コミッタであるsora_hさんは,自身がコミッタになったきっかけであるtest/unitの改善や IO::Write, String#prependを紹介しました。test/unitの改善として,Ruby開発者が使うテストを並列化で実行できるようにすることで,テストの高速化を実現が行なわれたことが説明されました。sora_hさんが行なった実験(2コア,ハイパースレッディングにより4コアになるマシンで実施)によると,最大で2.7倍の高速化ができたようです。

Linuxカーネルのコミッタであり,Rubyのコミッタである小崎さんより,GiantVMLock(GVL)の改善について簡単な紹介が行なわれました。また,RunPaintRunRunさんが作ったIO::adviseという機能も紹介されました。IO::adviseはposix_fadvise(3)という,ファイルへのアクセス方法を宣言するためのposix関数のラッパーです。Linuxでは,:dontneedを指定することで,ページキャッシュを捨ててアクセスできるようになることを説明しました。

YARVの作者であるささださんより,TimerThreadの改善が紹介されました。 現在,Rubyを実行すると2つのスレッドが実行されます。そのうち一つがスレッドがスケジューリングをするためのTimerthreadであり,海外のMLであるruby-coreでよく消費電力が多くなっているという議論がよく行なわれているそうです。

TimerThreadは10msでSleepから復帰して監視をしているため,停止していたCPUが動き,消費電力が大きくなってしまいます。これをPipeを使うことで,CPUが起動することが抑制されるようになりました。

しかしこの改善はPipeを使うため,Passengerのようなファイルディスクリプタを全部閉じてしまうようなアプリケーションを実行すると,Pipeも閉じられるために正しく動作しなくなるそうです。そのようなライブラリを作成する場合は,CAPIの rb_reserved_fd_p()という関数を使用し,そのファイルディスクリプタを閉じてよいかを確認してくださいと述べました。

発表時間の残り30分ほどは質疑応答の時間となりました。質疑応答では,⁠private_constantようなライブラリの開発者にかかわるような機能について,ライブラリ開発者の人にもっとアナウンスや議論があったほうがいい」というライブラリ作成者からRubyコミッタへの意見や,RubyコミッタからRubyコミッタへの質問などが行なわれていました。海外の方からの質問もあり,途中からまつもとさんが翻訳者として飛び入り参加していました。

また,⁠Ruby2.0の開発をどこでやるか?」という議論がなされ,以前の結論の通りTrunkを2.0の開発に使うか,2.0用のブランチを用意するかは議論が活発なため,最後は「続きはMLで」という言葉で発表が終了しました。

画像

画像

舘野祐一さん「Rubyを利用した大規模ウェブサービスの開発・運用」

RubyKaigi2011のゴールドスポンサーであるクックパッドの舘野祐一さんが発表しました。クックパッドでは,毎日の料理を楽しみにすること。技術力を通して,たくさんの笑顔を作りたいとの考えのもとにサービスを運営されていることが話されました。

画像

クックパッドを支える技術

クックパッドは,Ruby1.8.7とRails2.3によって動作しているとのこと。料理の画像をAWS(Amazon Web Services)に配置しており,社内で開発を行ったTofuと呼ばれるサーバを介すことにより,⁠どのサイズで料理画像を取得してくるか」⁠画像を貼り付ける画像はどこか」といった細かい指定を行いながら,画像を扱える工夫が凝らされていると説明しました。

画像

検索には,Apache projectのSolrを使うようになったことが説明されました。Solrを使うことによって得られた利点は,集合を扱ったり,重み付け検索を行える点や,プロトタイプ開発にうれしい機能があり,開発効率が向上したところにあるという話です。 Solrを使うことにより,検索速度が向上したという利点ではないようです。

速度についてクックパッドでは,すべてのwebアプリケーションが200ms以内にレスポンスを返すことを目標にしていると述べます。新しい技術を導入したことで,劇的に高速化するということはなく,定石となっているテクニックをきちんと使いこなすことで200msというレスポンスタイム目標は達成できるとのことでした。

よくRubyやRailsは遅いから他の言語で実装したという話を聞きますが,実行速度が速いことよりも,Rubyが好きなエンジニアが多いのでRubyでコードを書けるということを大事にしていると語りました。

Railsアプリの多人数開発

Railsアプリを多人数で開発するにあたり大切にしていることとして,開発やフィードバック,デプロイのサイクルをいかに早く回すかという価値観を紹介しました。

今まで,Unit test/Functional test/Integration testの中でFunctional testを重視していたのをIntegration testを重視するようになったとのこと。 その理由として,スマートフォン上でもjavascriptを多用するようになっていることから,javascriptのテストを込みにして書くことができるIntegration testが大切だということを挙げました。 そのため,Capybara+Selenium Webdriver+webkitでテストの自動化を行えることは非常に有益であるとのことが述べられました。

また,テスト時間削減のために,テストをリモートで実行していることも簡単に紹介しました。詳細については大江戸Ruby会議01の発表をご覧くださいと語りました。

Shota Fukumoriさん「Rubyとそのコミュニティと中学生の私」

「技術的な話が聞きたければもう一つのセッションへ行ってね!」という笑顔での元気な照れ隠し?から始まったのが,中学生コミッタsora_hさんの発表です。

sora_hさんは発表全体の構成として「1.どうやって自分がRubyコミュニティに入っていったか」⁠2.なぜRubyコミュニティに中高生が少ないのか」⁠3.Rubyコミュニティの課題」という3つを挙げ,それらを中高生の目線から語りました。

また発表前には,RubyKaigi用に日本語圏と英語圏の人間がコミュニケーションを取れるよう,Herokuを使ってYubisashiというアプリケーションを作ったことを報告しました。これは英語と日本語の単語や文章がペアになって並んでおり,文を指差しするだけでコミュニケーションを取れるというアイデアアプリケーションです。

画像

画像

sora_h少年とRuby

今ではRubyコミッタを務めるsora_hさんですが,もちろん最初はRuby初心者でした。最初は手探りでrubylang.orgからチュートリアルを読みながらコードを書いてみたそうです。最初はうまくRubyっぽく書けず,キャメルケースを使ったり(Rubyはアンダースコアを使ったスネークケースが一般的)⁠不必要にreturnを書いたり,eachを適切に使えなかったり,クラスを作るべきところでクラスを使わずグローバル変数を多用したりと,なかなかうまくいかなかったことを実際のコードと共に披露しました。

そんなsora_hさんがRubyコミュニティへ入っていけた一番最初のきっかけは,@pastak@rosylillyといった先輩に拾われたから,とのことでした。まずは91世代コミュニティ(1991年生まれのコミュニティ。念のため言及しておきますがsora_hさんは1997年生まれです!)という年上の集団に混ざって活動したのが,最初のコミュニティ体験だったわけです。

もう一つ大きなものが,RubyistのためのVim周辺ツールを積極的に開発したりしている ujihisa さんとの出会いであり,これによりいつの間にかRubySapporoのメンバーになったり,開発版のRuby(trunk)をインストールしてみるように勧められたりしているうちに,RubyKaigi2010ではsora_hさんの書いたパッチがRuby本体に取り込まれることになりました。その後は知る通り,現在はRubyコミッタです。

なぜコミュニティに中高生が少ないのか?

上記までをsora_hさんは「ただの自分語りです」と茶化していましたが,十分に示唆に富んでいるように思います。実際,sora_hさんは「なぜ中高生が少ないのか」という分析の中で,普通の中高生はプログラミングコミュニティに行こうにも周りは大人ばかりで萎縮しがちであり,そもそもシャイだったり,自分から行くのが難しいものだと指摘しました。そして自分の場合は背中を押してくれる人がいたから良かった,と述べています。

Rubyコミュニティの課題

それを受けてRubyコミュニティの課題としては,まず中高生のためのRuby教室のような集まりが欲しい,とのことでした。例としてScratchSqueakといったものを題材とした教室を開いてる「きょーくり」というプログラミング教室を挙げました。また,島根にはRuby教室の取り込みがあるものの,東京圏その他にも必要であると指摘し,教材についてもScratchやSqueakのRuby版であるhackety-hackがある,と紹介しました。

その他にも,中高生に勧めたほうが良いこととして「Rubyのメーリングリストへ入ってもらうこと」⁠コードを公開させること(Github重要)⁠ブログを書かせること」⁠イベントに参加させること」を挙げ,もっともっと参加できるイベントが欲しい,との言葉で締めくくりました。

Rubyのバグレポートのやり方

発表時間が余ったため,Rubyのバグレポートについてミニセッションが行われました。sora_hさんはコミッタになる前のコントリビュータの頃からRuby開発チームのチケットの整理をしていて(今もしている)⁠英語圏の人たちの方がレポートをたくさん送ってくれているといった点を挙げ,⁠Rubyのバグレポートのやり方をここで復習しましょう」バグレポートガイドラインを紹介をしました。

その後,⁠ここでこの例外が起こるべきだ」⁠ここでこの例外が起きないべきだ」といったことをレポートを書いてもらえると特にありがたい,といったことが説明されました。

質疑応答にて

質疑応答では「バグレポートのやり方」を受けて,⁠レポートと言っても,真っ白なテキストボックスが用意されているだけでは,レポートしにくいのでは。報告項目を細かく分けるのはどうか?」という質問に「それはRedmineの範疇なので,YuguiさんがGithubに公開しているコードにパッチを送れば良い」と答えました。

その他に「Rubyや別の言語を学習する上で普段心がけていることは?」という質問にも,⁠とにかく書いてみること。言語ごとの流儀を理解するのは最初大変だけど,どんどんGithubなどで公開すれば指摘してもらえる」と答えました。公開していくことに抵抗がない,こういったオープンさが現在のsora_hさんを育んでいるのだな,と感じた発表でした。

著者プロフィール

KaigiFreaks レポート班

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

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


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

(株)永和システムマネジメントサービスプロバイディング事業部所属。Asakusa.rb & Rails勉強会@tokyo。このところRailsのお仕事をしています。言語好き。

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


すがわらまさのり

ハンドルネームはsugamasao。

Mitaka.rb や 若手IT勉強会に参加しています。仕事では自社プロダクトのデーモンの開発あたりでRubyを使ったりしています。伊坂幸太郎さんと荒木飛呂彦さんが好きです。

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


小松崎典之(こまつざきのりゆき)

ハンドルネームはO-Show。

RubyKaigi2010に参加したことで触発されRubyistを自称するようになる。ブログでRubyやGit関連記事の翻訳をあげています。もっとRubyとGitの情報の流通増えろ!と願ってやまない。

blog:http://keijinsonyaban.blogspot.com/
twitter:http://twitter.com/oshow


菅井祐太朗(すがいゆうたろう)

仕事でも Ruby を使えたらいいなぁと考えている新社会人LOCAL 所属。この春からAsakusa.rbにjoin。

twitter:http://twitter.com/hokkai7go


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

2010年よりRuby on RailsでのWebアプリケーションの開発を中心にフリーランスのRubyプログラマとして活動中。最近はHaskellに興味を持ち出し、勉強しはじめている。

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