RubyKaigi 2015参加レポート n = 3 #{n}日目""

こんにちは。naotyです。RubyKaigi 2015の3日目のセッションの中で気になったものをまとめました。

RubyKaigi 2015

Ruby Commiters vs the World

朝一のこのセッションでは、Rubyコミッターの方々が壇上に上がりいろいろな話をされていました。その中で、コミットオブザイヤーと題して一年間で行われたコミットの中で象徴的なコミットを紹介するコーナーがありました。RVMで複数バージョンをインストールした際に稀に発生するバグへの対処、地道なコードダイエット、末尾最適化によってパフォーマンス向上した改善、など興味深いコミットが数多く紹介されました。

また、今年新たにコミッターになった方の紹介も行われました。1年間で6名の方が新たにコミッターになったそうです。Loggerのメンテナー、Rubyに取り込まれたdid_you_meanの開発者、Railsのedgeで落ちているテストケースからRubyへのコミットを送っていた方などがコミッターになったそうです。その後の質疑応答の中で、「Rubyにコントリビュートしたい人は何をすべきか」という質問に対して「各自がどんな問題を抱えているかを意識する」という回答がありました。6名の新しいコミッターの方々もそれぞれの関心分野で遭遇したRubyの問題に取り組んだ結果コミッターになられていて非常に印象的でした。

Writing web application in Ruby

趣味プロジェクトのフロントエンド開発のためにHyaliteというrubygemを作ったお話でした。HyaliteはOpalを使ったRubyによるVirtual DOMの実装です。OpalはRubyで書かれたコードをJavaScriptのコードに変換するコンパイラのことで、これによってフロントエンドもRubyで開発することができます。講演者の方によると、Opalは思っている以上にちゃんと動作するようで、メタプログラミングのようなことをする際に少し本来とは異なる挙動をした他は、問題なく実装できたとのことでした。

Hyaliteでは、React.jsと同じようなインターフェイスでVirtual DOMを定義することができます。また、React.jsに特徴的なJSXと呼ばれる記法は、Hyaliteでは#divのようなDSLを使って表現することができるそうです。

今後の展望として「Isomorphic」というキーワードをおっしゃっていました。これはサーバーサイドもクライアントサイドも同じコードで動作させるアーキテクチャのことだそうです。JavaScriptであればNode.jsとJavaScriptで共通化を実現することができますが、Rubyの場合Opalを使ってIsomorphicを実現できるかもしれないといったことをおっしゃていました。さらに、Opalで書いたFluxフレームワークやElectronのようなデスクトップアプリ用のフレームワークもいずれは挑戦したいというお話でした。

Hyaliateは非常に野心的なプロジェクトで、Opalが拓く新たな可能性を感じました。

Discussion on Thread between version 1.8.6 and 2.2.3

jishin.netというシステムで非常に多くのスレッドを動かすにあたって直面した問題についてのお話でした。おおよそ10,000ものスレッドを同時に動かすそうですが、この際に子スレッドのステータスが返ってこないことが稀にあり、この原因を調査したそうです。また、こういった多くのスレッドを同時に実行するコードをRuby 1.8.6と2.2.3とで実行してみて違いを検証したそうです。2.2.3の方がCPU使用率が高く、メモリ使用量が減ったとのことでした。

実際に検証してみることで、2.2.3ですべてが改善されたという訳ではないということがわかり大変興味深かったです。

Plugin-based software design with Ruby and RubyGems

FluentdEmbulkといったミドルウェアを開発している方がこれらのアプリケーションで採用しているプラグインベースのアーキテクチャについての内容でした。プラグインベースのアーキテクチャには、多くの機能を提供できること、コアのソフトウェアをシンプルに保てること、テストしやすいこと、コミュニティが活発になることといった数多くのメリットがあるそうです。

プラグインアーキテクチャにはDependency InjectionとDynamic Loaderという2つのデザインパターンがあり、これらをうまく使い分けているとのことでした。Fluentdでは、プラグインはrubygemsの形式で開発し組み合わせることが可能です。この仕組みはDynamic Loaderによって実装されているそうです。

Dynamic Loaderのような仕組みはRubyのような柔軟な言語の特性を活かしたアイデアだなと思いました。今後、こうしたソフトウェアを開発する際に参考にしたいと思います。

感想

全体を通して、Rubyの特性を活かしたアプリケーションの話が興味深かったです。Opalを使ったフレームワークの話や世界的に使われているFluentdのようなアプリケーションの実装の話はRubyの可能性を感じさせるものでした。一方で、非常に多くのスレッドを生成した際に起きる問題などは今後の課題なのかもしれません。今年、新たに6人コミッターが増えたとのことでしたので、今後もコミッターが増えてこうした課題を解決していくのだと思いました。今後のRubyの可能性が拡がっていくことに大きな期待が持てた3日間でした。