「ここまで出来るmruby」 builderscon Tokyo 2017
この記事は mruby advent calendar の 9 日目の記事です。 諸事情により大幅に公開が遅れて大変申し訳ありません。 mruby は軽量かつ柔軟な言語であるため、 Web サーバや Linux コンテナの設定用言語として用いられたり、 あるいは、サーバの構成を記述する DSL として用いられる等の、 いわゆるシステムプログラミングの領域で使用される例をよく見かけます。 しかし、従来、システムプログラミングを行うためには、 C 言語などの難解な言語を記述する必要があり、 これは mruby でシステムプログラミングをする際も例外ではありませんでした。 一方で、近年ではシステムプログラミングを行うための言語として、 Go や Rust といった、実用的ないしは、言語処理系の研究成果を集積したような言語が台頭してきています。 そこで、本稿では、まだまだ発展途上でありますが、Ru
背景 普段はOSXやLinuxを好んで使っています。しかし、2,3万円台で買えるWindowsノートPCも魅力的で、実際、 奥さんに内緒で買って使ってます。ちょっと前に次男にコーンポタージュをこぼされて壊れてしまい、 今のは2台目になります。。 そんな環境なので自作のプログラムがOSX,Linux,Windowsで動いてくれると、いろいろ便利だと思っています。 ただ、特に2,3万のPCでは非力なので、出来ればどこか別のPCでビルドを行い、 微調整だけ非力なPCで行えれば、激安ノートPCやWindowsタブレットにVSやMingwを入れずに済みます。 (Cygwinはh2oを動かすために外せませんw) それにできれば、開発環境を入れるPCは限定して、そこで一括してビル出来るような環境が嬉しいです。 Go言語ではクロスコンパイルしてワンバイナリが出来る 以下の記事が最近の事情を反映しており参考
Pmilterというサーバソフトウェアを作りました。 github.com PmilterはProgrammable Mail Filterの略で、SMTPサーバ(送信や受信)とmilterプロトコルで通信し、SMTPサーバの送受信の振る舞いをRubyでコントロールできるサーバソフトウェアです。 これまでにも、milter managerやRubyのgemを使ってmilterサーバを作るといった素晴らしいソフトウェアがありました。ですが、今回僕がフルスクラッチで作りたかった理由としては、 とにかくインストールや設定がシンプルで運用しやすいサーバソフトウェアにしたい ミドルウェアとして振る舞いを設定する感覚でRubyで制御する事に専念したい 依存ライブラリを減らしワンバイナリでサーバに配置できるようにしたい 設定変更に再起動することなくRubyを変更するだけで振る舞いを変えられるようにしたい
Roppongi.rb #2 で「mitamae」について話してきた Roppongi.rb #2が "Infrastructure x Ruby" をテーマに開催され、そこで RubyなしでItamaeレシピを実行できる「itamae-go」を作った - k0kubun's blog 話と pure mrubyで実装されたItamae「itamae-mruby」を作った - k0kubun's blog 話をしてきた。 いいたかったことはスライドの通りだけど、枠が15分でいろいろ漏れた話を書いておく。 mitamaeの現状について なんでitamae-mrubyからMItamaeに変えたの というか一昨日までmitamaeはitamae-mrubyという名前だった。エエー。変えた理由は真面目な奴がいくつかあるんだけど、あえて不真面目な奴だけ書くと、名前が微妙なソフトウェアは流行らない気が
itamae-goを作り直してitamae-mrubyを作った 先週Goからmrubyを使ってRubyなしでItamaeレシピを実行できる「itamae-go」を作ったんだけど、全く同じコンセプトの、RubyなしでItamaeレシピを実行できる「itamae-mruby」を作った。 github.com itamae-goの問題点 mrubyは組み込み言語だしこれは本来想定された使い方であり、go-mrubyの実用的な例として普通に作ってよかったと思っているけど、ことItamaeを実装することに関しては以下のような問題があった。 レシピを読む部分以外をGoで実装していたので、specinfraのコードの移植に手間がかかる 主にstandaloneなバイナリを吐く目的にGoが使われているが、mruby-cliでもできるのでGoを使っているメリットがそれほどなく、2つの言語をブリッジするコード
はじめまして、技術基盤部の相原(kaihar4)です! 今回は、アプリケーションのクラウドサービスへの移行の一環で、 Amazon S3から取得した画像URLを含むファイルを元に、そのURLの外部画像を取得して返す機能 をmrubyで書き直してAWSに移行した話をしていきたいと思います。 この機能は元々モノリシックなアプリケーションの一機能として動いていたもので、これを切り出してAWSに移行するというのが今回私に与えられたミッションでした。 このアプリケーションは歴史が長く、その間ほとんどメンテナンスされていませんでした。 ディストリビューションは古くPHPのバージョンも4系、したがってそのまま持っていくという選択肢はなく、AWS上に新規にインスタンスを構築することになります。 弊社にはAPI部分をPHPからRubyに移行する方針があるということもあり、Amazon Linux上にRuby
Goとmrubyを使ってitamae-goを作った github.com Pokemon Goが流行っていたので流行に乗じてItamae Goを作った。 というのは冗談で、手元の開発環境のセットアップにitamaeを使っているのだけど、まっさらな環境でitamaeを実行したい時にRubyやitamaeをどういれるかについて考えるのが面倒なので、Rubyなしで実行できるitamaeを作った。Goで実装し、mrubyでレシピを読むことによりRubyなしでの実行を実現した。 インストール方法 Releasesにバイナリを置いてあるのでこれをダウンロードする。基本的には環境セットアップ用のシェルスクリプトからこれをcurlなりwgetなりでダウンロードして使うことを想定している。 なんか動かなかったらgit cloneしてmakeすればその環境用のバイナリが作れるはず。 *1 使い方 普通にita
Introduction to Linux namespaces - Part 2: IPC | Yet another enthusiast blog! こういうブログ記事があって、元記事はC言語なんだけど、これと同じことをmrubyでもやってみたサンプル。なお元記事は clone(2) だけど今回はforkしてから unshare(2) している。clone未実装なんで。。 reader, writer = IO.pipe puts " - Hello ?" p = Process.fork do Namespace.unshare(Namespace::CLONE_NEWUTS | Namespace::CLONE_NEWIPC) writer.close reader.read # blocking system "hostname 'In-Namespace'" puts " -
第5回ペパボテックカンファレンス〜インフラエンジニア大特集〜 で発表した資料です http://pepabo.connpass.com/event/30348/
何の因果かわかりませんが、お仕事でちょっと賢いリバースプロキシサーバ(以降、RPサーバ)を作る機会が2回ありました。 HTTPヘッダの内容によってプロキシ先のサーバを動的に切り替えるようなものです。 この要件を満たすため、RPサーバには以下のようなプログラムが必要になります。 HTTPヘッダの内容を知るためにHTTPリクエストをパース プロキシ先のサーバへHTTPリクエストをプロキシ プロキシ先のサーバはRedisから取得 レスポンスをクライアントへ返す 大量のリクエストも捌ける 1回目はRubyとI/O多重化のライブラリを使ってイベント駆動型のRPサーバを自作してみました。 が、振り返ってみるとこれは失敗でした。 なぜ失敗だったのか? Rubyでイベント駆動型のサーバを書こうとすると様々なものが途端に大変になります。 イベント駆動型サーバではほとんどの箇所でブロックする処理を書けません。
タイトルの通りなのですが、つい先日Homebrewでngx_mrubyがインストールできるようになりました。 github.com うおお、なるほど超便利と思って手元で試すと、mrbgemで使うライブラリのリンクまわりでコケていてビルドできませんでした。 そこで、必殺の「Hi, I'm ngx_mruby author.」PRによってバグ修正を最速でマージしていただき、無事ビルドできるようになりました事をここにお知らせします。 github.com 実際、ngx_mrubyをちょっと検証してみようかな、という用途でめちゃくちゃ便利で、以下のようにするだけであっという間にMac上でngx_mrubyを組み込んだnginxが動くようになります。 brew tap homebrew/nginx brew install nginx-full --with-mruby-module または、最新の
Webサービス事業者として僕が先行して調査したり研究・開発している技術の中で、Webサーバ設定におけるHTTP/2とそのmruby活用についてや、PFS(Perfect Foward Secrecy)を考慮したTLS設定と大量証明書設定の効率化について、社内のインフラエンジニア向けに技術共有を行いました。 内容としては、まずはざっくりと知ってもらう事を目的に、細かい要素技術について深く立ち入り過ぎない程度に、今後弊社でのWebサービスのインフラ技術周りのアーキテクチャを考える上で必要になりそうな事を中心にお話しましたので、少し汎用性に欠けるかもしれません。 特に技術的に見せられないような話ではないので、参考程度に公開しておきます。どこかで喋って欲しいみたいな依頼は随時受け付けておりますので、お気軽にお問い合わせ下さい。 以下の二本立てです。 HTTP/2とmrubyの活用 HTTP/2時代
この記事はmruby adevent calendar 24日目の記事です。 mrubyでRedisを操作するmruby-redisは以前から開発していたのですが、最近Pipelining対応のPRを頂きPipelining対応したのでそれの性能を確認してみました。また、その結果簡単に作れるようになった分散型インメモリジョブキューであるDisqueのmrubyクライアントであるmruby-disqueの紹介をします。 github.com github.com RedisとhiredisのPipelining mruby-redisはhiredisというCライブラリを利用しており、hiredisでは効率的にRedisとIOできるようにPipelining機能をサポートしています。RedisとhiredisにおけるPipeliningを簡単に説明すると、 通常のRedisアクセスはクライアン
しばらく前に、趣味コーディングの題材としてだいたい動きそうに思えるところまで書いてあった、mrubyでPAMな認証処理を書けるようにするlibpam-mrubyというのがあったのですが、その後手をつけられずにいたところ、udzuraさんがいい感じにしてくれていた。 github.com qiita.com 詳しくは、上記のudzuraさんのエントリをご覧くださいという感じなのですが、ここでも少し書いておきます。 PAMの設定にこんなのを追加しておく(UNIXアカウント認証をするモジュール(pam_unix.so)の前とかに)。 auth sufficient pam_mruby.so rbfile=/path/to/auth.rb んでもって、一番簡単な認証としては、こんな感じ(もちろん実用的ではありません)。 def authenticate(username, password) if
この記事は、mruby advent calendar 2015の16日目の記事です。 画像やstaticコンテンツ配信系はHTTP/2が有利な状況が幾つかあるので、ついでにHTTP/2を喋る画像変換サーバのプロトタイプをmrubyで作ってみました。ベースはもちろんtrusterdです。なんていったってmrubyのHTTP/2サーバですからね!! 最近また開発を再開しておりまして、昔はh2oやnghttp2のベンチマークに一緒に比較対象として入れてもらったりしていたのですが、しばらく離れているうちに皆さん先へ先へと行ってしまわれたので、また追いつけるようにセッセと勉強しながら実装しだしております。 github.com その他、trusterdについてはこの辺とか、 qiita.com この辺を見ていただくと良いかと思います。 hb.matsumoto-r.jp trusterdのビルド
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く