概要
ngx_mrubyへの入門記事。luaとはjavascriptも組み込めたりするのがその一種っぽいくらいの認識の状態から調べてみました。
ngx_mrubyとは
ngx_mrubyとは弊社ペパボ研究所に所属する松本 亮介(@matsumotory)によって開発されているOSSです。 nginxに組み込むことで、nginxの設定ファイルや、nginxの各イベントにフックしてmrubyを実行し、nginxの動作をプラガブルに扱うことができます。
nginxでluaを動かしたりすることができますがその系統でmrubyを動かすものって考えで良さそうです。ngx_mrubyで動かすことでウェブサーバがそのままアプリケーションサーバとして振舞うこともできるらしい。イベント駆動はNginxでこの辺どこまでやるかは考えるのが難しそう。
mrubyとは
そもそものmrubyとはなんなのかも調べたのでメモ
mrubyとはISOを元に実装されたRuby1.9互換のシンタックスを持つ組み込み向けの軽量言語。言語の最大の特徴は軽量言語ゆえの省メモリな設計で mruby本体には必要最低限の機能しか実装されておらず、例えばファイルの読み書きやHTTPのリクエストなどはサポートされていらしいです。
専門の書籍も出てるらしいです。時間ある時買ってみようと思います。
Webで使えるmrubyシステムプログラミング入門 | 近藤宇智朗 | 工学 | Kindleストア | Amazon
そもそもrubyとの違いも怪しいので参考に以下を読んでおく
触ってみる
docker-composeでラップした環境を以下へ用意。
http://localhost:8080/mruby-test
とかやればrubyのコードを実行できるようになっている。
ざっくりツリー構成は以下
tree . ├── Dockerfile ├── LICENSE ├── README.md ├── docker │ ├── conf │ │ └── nginx.conf │ └── hook │ └── test.rb └── docker-compose.yml
test.rbへmrubyのコードを書くことで実行することができる。
以下はランダムに返す内容を出力するmrubyのコードNginx.echo で出力している。
backends = [ "dog", "cat", nil, ] Nginx.echo backends[rand(backends.length)]
ヒアドキュメントも書ける
body = <<DATA # Section ## aaa - hoge - foo ## bbb __code__ a = 1 b = a + 1 DATA Nginx.echo body
事例とか面白かったやつ
動的に証明書を使用する仕組みとか面白かった
1000行超えたapacheの設定とかもうまく使えば短縮できたのかなと感じた。