東京 Ruby 会議 11 直前特集号

アプリケーションへのRubyインタープリターの組み込み

発表者はmilter managerというアプリケーションへCRubyを組み込んだ経験と、Groongaというアプリケーションへmrubyを組み込んだ経験があります。

milter managerはメールフィルターアプリケーションです。大量の接続を同時にさばくために、マルチプロセス+イベント駆動型のサーバープログラムとして実装しています。このアプリケーションをRubyでカスタマイズするためにCRubyを組み込みました。このケースでうまく動かすためのGC、fork、シグナル、イベントループ回りの実装について紹介します。

Groongaは全文検索エンジンです。より高速に検索結果を返すために、細部もチューニングして実装しています。(細部は私は実装していません。)このアプリケーションのクエリーオプティマイザー、クエリー言語(の一部)をRubyで実現するためにmrubyを組み込みました。このケースでうまく動かすためのオブジェクトのライフサイクルの実装について紹介します。

時間次第ではmilter managerの話だけにするかもしれません。

必要となる知識

マルチプロセスとGCとシグナルとイベントループについての一般的な知識。

須藤功平
株式会社クリアコード

http://magazine.rubyist.net/?0053-Hotlinks


5/9 クリアコードにて伺いました(話し手:須藤さん、聞き手:笹田)。

笹田 お忙しい中、ありがとうございます。今回の話は Groonga と milter manager に Ruby を組み込む、という話だと思うのですが、Groonga については、RubyKaigi 2014 の、『Three Ruby usages』でご発表されていましたよね。

須藤 今回は30分しか時間がないので、milter manager の話だけにしようかと思います。

笹田 milter manager というのは、メールのフィルタのマネージャ?

ブロックダイアグラム

須藤 こんな感じで、いくつか独立してフィルタが動作している状態だったものを、メタフィルタのようなレイヤを導入して、それらの独立したフィルタをうまいこと協調させて、効率的にフィルタを動作させる、というものです。

笹田 それらの独立したフィルタは、すでにあって、それらをまとめる、ということでしょうか。

須藤 そうです。これがないと、すべてのメールに対してすべてのフィルタを実行しなければならなかったのですが、あるフィルタの結果を受けて別のフィルタを止めるとか、複数のフィルタで共通の条件をメタフィルタのレイヤでまとめて適用する、といったように柔軟に設定できるようになります。

笹田 便利そうですね。よく売れてるんですか?

須藤 milter manager自体は無料でだれでも自由に使える状態で公開しているので売れてはいないです。導入支援やサポートを提供しているんですがそれらは売れています。また、フィルタの開発も請け負っています。フィルタの適用条件を Ruby で柔軟に書けるので、それを使ってプロバイダの方が利用されたりしています。

笹田 この milter manager は C で構築してあるんでしょうか。

須藤 はい、性能が欲しかったので。設定は Ruby で書きたかったので、Ruby を埋め込みました。

笹田 Ruby で作って、C で性能が必要になる部分を作る、という選択肢(性能が必要になる部分をCで作ってRubyの拡張ライブラリにしてRubyから使うという選択肢)もあったと思うのですが。

須藤 基本的には同じなんですが、C でコアを作っておくと、(CやPythonなど)他の言語から使える、という利点があります。それを狙っていました。しかし、誰も他の言語から使っていないようなので、今思えば、Ruby で作っても良かったかもしれません。

笹田 コアを C で書くと、Ruby に問題があれば、最悪外してしまうという選択肢もとれるかもしれませんね。

須藤 まぁ、Ruby を切る気はありませんが。全部Rubyで実装した場合には、ボトルネックはネットワークまわりとプロトコルのパースになったと思います。今回の発表では、こういう、C で作成したアプリケーションに CRuby をどう埋め込むか、その事例の話をしたいと思います。そういう話に興味がある方は、ぜひ聞いて貰えればと思います。

(細かい実装の話もしましたが、省略)

OSS Gate

笹田 今回、東京Ruby会議11では、OSS Gate という会を同じ会場で開催する予定です(詳しくは:OSS Gateワークショップ2016-05-28)。須藤さんが始められた、学生さんに OSS の入り口を紹介する、という勉強会、でいいでしょうか。

須藤 ちょっと違って、学生に限らず、誰でも OSS が興味がある方に来て貰いたいと思っています。OSS に不満があるような方が、実際に行動して改良できるようになってもらえるといいな、と思っています。あと、勉強会というスタイルではなくてワークショップというスタイルでやっています。実際に手を動かした方がいいので。

笹田 なるほど。

須藤 東京Ruby会議11 の話題は、OSS に関する技術的な話がメインですよね。その発表の内容は OSS に関することなので、実装を簡単に確認できたり、勉強したりできます。さらによくするために開発に参加することもできます。ただ、OSSの開発に参加したことがない人にはそれらの敷居が高いと思うので、その敷居を下げるお手伝いができればと思っています。

笹田 いいですね。

須藤 実装を見ることができるというのは、とてもいいと思うんですよね。話を聞いているだけ、だともったいない。ソースがあるんだから、もっと活用してもらいたいですね。発表で喋っていた内容を、実際に動かしてみると動かない、ってこともありますし。

笹田 あるある。

須藤 そんなときにバグレポートしたり直したりすると、スピーカーと参加者がますます交流できると思いますし。

笹田 OSS Gateは、東京Ruby会議11と併催しているので、須藤さんに声をかけてもらえれば、OSS Gateの見学ができる、ということですね。

須藤 はい。声を掛けてもらえればと思います。OSS Gateのサイトにも説明があるので興味がある人はそっちも読んでみて欲しいです。

笹田 よろしくお願いします。今日は、お忙しいところ、ありがとうございました。