Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

mruby-hibariで、ngx_mruby、mod_mruby、h2oで同じコードを使えるようになった

Webサーバへの組み込みmrubyのRack-based APIまわり」の続き。

Rack-basedなAPIに対応したWebサーバ用のWebアプリケーションフレームワークのmruby-hibariですが、ngx_mruby、mod_mruby、h2oいずれのサーバ上でも同じコードで動く感じになりました。

github.com

mrubyでハンドラを書くわけですが、その際、書き方を好みに応じて使い分けられるよう、ふたつスタイルを用意しました。

DSLぽい感じ:

hibari do
  res.code = 200
  res.headers["content-type"] = "text/html; charset=utf8"
  res.body.push("Hello, World!")
  req.params.each do |k,v|
    res.body.push("#{k}: #{v}")
  end
end

OOPぽい感じ:

class MyApp < Hibari::App
  def build
    res.code = 200
    res.headers["content-type"] = "text/html; charset=utf8"
    res.body.push("Hello, World!")
    req.params.each do |k,v|
      res.body.push("#{k}: #{v}")
    end
  end
end

MyApp.new.run

ハイパフォーマンスが要求されるWebサーバ組み込み言語上で、さらにレイヤを重ねるのはどうかという気もしますが、Rack-based APIで統一されると簡単にこういうこともできて面白いですね、という一例としてご笑覧ください。

あと、単純にWAFとして機能が足りなさ過ぎるのですが、その実装のためにはたくさんのmruby-*を作らなければならなさそうで、尻込みしているところ……。