地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Nginx】ngx_mrubyへ入門

github.com

概要

ngx_mrubyへの入門記事。luaとはjavascriptも組み込めたりするのがその一種っぽいくらいの認識の状態から調べてみました。

ngx_mrubyとは

ngx_mrubyとは弊社ペパボ研究所に所属する松本 亮介(@matsumotory)によって開発されているOSSです。
nginxに組み込むことで、nginxの設定ファイルや、nginxの各イベントにフックしてmrubyを実行し、nginxの動作をプラガブルに扱うことができます。

tech.pepabo.com

nginxでluaを動かしたりすることができますがその系統でmrubyを動かすものって考えで良さそうです。ngx_mrubyで動かすことでウェブサーバがそのままアプリケーションサーバとして振舞うこともできるらしい。イベント駆動はNginxでこの辺どこまでやるかは考えるのが難しそう。

mrubyとは

そもそものmrubyとはなんなのかも調べたのでメモ

mrubyとはISOを元に実装されたRuby1.9互換のシンタックスを持つ組み込み向けの軽量言語。言語の最大の特徴は軽量言語ゆえの省メモリな設計で mruby本体には必要最低限の機能しか実装されておらず、例えばファイルの読み書きやHTTPのリクエストなどはサポートされていらしいです。

専門の書籍も出てるらしいです。時間ある時買ってみようと思います。

Webで使えるmrubyシステムプログラミング入門 | 近藤宇智朗 | 工学 | Kindleストア | Amazon

そもそもrubyとの違いも怪しいので参考に以下を読んでおく

blog.masuidrive.jp

触ってみる

docker-composeでラップした環境を以下へ用意。

github.com

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

事例とか面白かったやつ

speakerdeck.com

動的に証明書を使用する仕組みとか面白かった

speakerdeck.com

1000行超えたapacheの設定とかもうまく使えば短縮できたのかなと感じた。

参考リンク