rack-ok
rack-okというGemをつくった。
概要
何かというと、GET /healthに対して200 OKを返すだけのRackミドルウェア。冗談みたいなプログラムだけど、今更Rackの世界に入門してハローワールドしたかった訳ではなくて、ロードバランサーからのヘルスチェックに応答させるために、こういう実装が必要になる機会がそれなりにある。
背景
Railsアプリとかだと、こういうのは(適切なという意味ではなく雑なという意味で)適当なコントローラで実装されたりするのだけど、機能てんこ盛りのコントローラで200を返すだけの処理をやるのはどうにも無駄が多い。それに、ヘルスチェックはHTTPでリクエストが飛んでくるので、SSL対応用の機能を有効化しようとするとヘルスチェック用のエンドポイントだけ確認対象から除外する必要が出てきたりする。Rackミドルウェアだと、その辺の問題が解決できる。
ヘルスチェック用のRackミドルウェアとしては他にrack-healthというのがあり、自分も長らく愛用していた。色々と運用していると、動的にレスポンスを切り替えたりするような機能はこの層には不要だなと思うことも多く、200を返す機能さえあれば十分だろうということで、こういうものを自作するに至った。似たようなものが無数にあるだろうと思うので、その中の一つに過ぎない。
各アプリで独自のパス (/healthや/health_check) と独自のレスポンスボディ (OKやhealthやIt works!) を現状利用しており、それらをいきなり変える訳にはいかないと思うので、一応パスとレスポンスボディはオプションで変更できるようにしてある。200を返すというところは変えられないので、それがrack-okのOKたるアイデンティティとなっている。
名前
最初はrack-health_checkという名前で開発を進めていたが、rack-healthcheckという名前のgemが存在するとrack-health_checkという名前のgemはリリースできないという事実がリリース時のエラーで発覚し、急遽再考してrack-okに変更した。今となってはrack-okの方が良かったと思う。