読者です 読者をやめる 読者になる 読者になる

mruby_nginx_module-0.2.0

https://github.com/cubicdaiya/mruby_nginx_module

mruby_nginx_module-0.2.0をリリースしました。(前回アナウンスしてない0.1.2を含めた)主な変更点は以下になります。

  • Nginx::Base64をリクエスト処理フェーズ以外でも利用できるように変更
  • mruby_requireディレクティブを追加
  • PCREベースのRegexpを追加(Thanks to mruby-regexp-pcre)

mruby_require

mrubyにはrequireが機能として含まれていないので、mrbgemsで実装されているmattn/mruby-requireあるいはiij/mruby-requireを mrubyのビルド時に取り込む必要があります。mrubyは元々組み込み開発向けに開発されたこともあってrequireのようにファイルシステムが絡むものは言語仕様から外れているわけですが、 mruby_nginx_moduleのようにWebサーバに組み込むのであればrequireはむしろ最初からあった方がいいと思ったのと、個人的に必須だと思っている機能はあまり外部のモジュールに依存したくなかったので、 mruby_nginx_module内部にrequireの機能を付けることにしました。こんな感じで使えます。

mruby_require /etc/nginx/scripts/hoge.mrb;

また、mruby(rewrite|access|content|log)handlerディレクティブと同様に相対パスで指定することもできます。 以下はconfigure時に指定した--conf-pathが/etc/nginx/nginx.confの場合です。

mruby_require scripts/hoge.mrb;

Regexp

requireと同様にmrubyではRegexpが含まれていません。しかし、殊Webサーバにおいて正規表現は重要な機能の一つです。 Apacheにはmod_rewriteがありますし、NginxもPCREを使ったrewriteやマッチング処理機能を備えています。

requireに比べると実装するのが大変なのでこれはもうmruby-regexp-pcreそのまま使えばいいかなと思っていたのですが、 深遠な理由(あとでブログ書く)によりmruby_nginx_moduleやngx_mrubyではmrbgemsとして実装されているPCREベースの正規表現エンジンを利用するのは困難なので、 mruby-regexp-pcreの実装をほぼそのままmruby_nginx_moduleに取り込み、必要な修正をちょこっと加えて動かすことができるようになりました。