全文検索エンジンnGroongaへのnmrubyの組み込み

: author

須藤功平

: institution

Groongaプロジェクト

: content-source

第7回フクオカRuby大賞

: date

2015-01-23

: allotted-time

10m

: theme

.

説明すること

(1) 特徴
(2) Rubyを適用した箇所
(3) Rubyを活用したことによる\n
    効果、社会に及ぼす影響

(1) 特徴

mrubyの使い方がn 少し違う

使い方の分類

# RT

 主体\n対象者, mruby, C

ユーザー向け, (('1')), (('2'))
開発者\n向け, (('3')), (('4'))

分類の補足

* 主体
  * メインの処理を実装する言語
  * (('note:あるいは'))
  * プログラムのエントリーポイントを実装する言語
* 対象者
  * Rubyを書く人はだれか

よくある使い方

# RT

 主体\n対象者, mruby, C

ユーザー向け, ((*1*)), ((*2*))
開発者\n向け, ((*3*)), (('4'))

Groongaの使い方

# RT

 主体\n対象者, mruby, C

ユーザー向け, (('1')), (('2'))
開発者\n向け, (('3')), ((*4*))

よくある使い方(1)

* ユーザー向け・mruby主体\n
  (('note:ユーザーがRubyを書く・mrubyでメインの処理を実装'))
  * 拡張性が高いアプリ
  * PCで動かすならCRubyでもよい\n
    (('note:CRuby + バインディング'))
  * 単体で配布可能なバイナリーを\n
    作れることが便利

よくある使い方(2)

* ユーザー向け・C主体\n
  (('note:ユーザーがRubyを書く・Cでメインの処理を実装'))
  * プラグイン・設定
  * C側がマルチスレッドや\n
    マルチプロセスでも組み込みやすい
  * CRubyだと難しい・面倒\n
    (('note:シグナル・RUBY_INIT_STACK…'))

よくある使い方(3)

* 開発者向け・mruby主体\n
  (('note:開発者がRubyを書く・mrubyでメインの処理を実装'))
  * 組み込み環境向けアプリケーション
  * 消費リソースが少なくてうれしい
  * 開発速度があがる
  * CRuby感覚で使うと機能が少なくてツライ

Groongaの使い方

# RT

 主体\n対象者, mruby, C

ユーザー向け, (('1')), (('2'))
開発者\n向け, (('3')), ((*4*))

Groongaの使い方

* 開発者向け・C主体\n
  (('note:開発者がRubyを書く・Cでメインの処理を実装'))
  * アプリ内のコア機能の一部を実装
  * 開発速度があがる
  * mruby対応がそこそこ大変\n
    (('note:バインディングの開発・ビルドシステムへの統合・'))\n
    (('note:テストの仕組み…'))

開発者向け・C主体の使い方

* 使い所は難しい
  * 仕組み作りを乗り越えられれば有用
  * 仕組みできる→((*開発速度はあがる*))
* 難易度も高い
  * プロジェクト依存部分が大きい
  * (('note:Groongaの事例から一般化できるといいなぁ'))

(2) Rubyを適用した箇所

(1) 特徴
(2) ((*Rubyを適用した箇所*))
(3) Rubyを活用したことによる\n
    効果、社会に及ぼす影響

コア機能の実装

* クエリーオプティマイザー
* 予定:式のJIT化

クエリーオプティマイザー

# image
# src = images/query-optimizer.svg
# relative_width = 100

# image
# src = images/query-optimizer-example.svg
# relative_width = 100

mrubyは割にあうか

* 最適化→10倍以上高速化も可
  * C→mrubyの速度低下は影響小
* C→mrubyで開発速度向上
  * 課題:GDBが使えない
  * →ppをmrubyに移植してなんとか…

予定:式のJIT化

# image
# src = images/jit-evaluator.svg
# relative_width = 100

(3) 影響

(1) 特徴
(2) Rubyを適用した箇所
(3) ((*Rubyを活用したことによる*))\n
    ((*効果、社会に及ぼす影響*))

影響(1)

* 「コア機能をRubyで実装」\n
  という使い方の実例を示した
  * フリーソフトウェアなので\n
    他のプロダクトは参考にできる
  * 仕組み作りをできれば割にあう
  * →「技術支援」という仕事をしたい

影響(2)

* mrubyがよくなる
  * 開発中に見つけた問題は\n
    直してパッチを送っている

まとめ

(1) 特徴
    * 類をみないmrubyの使い方
(2) Rubyを適用した箇所
    * クエリーオプティマイザー
(3) Rubyを活用したことによる\n
    効果、社会に及ぼす影響
    * 参考にできる・mrubyがよくなる