表題のとおり、RackをバックエンドとしたCLIツール Racliを作ってみました。
モチベーションとしてはRejectKaigiでBotアプリケーションインターフェースを作ったという発表があり、CLIにもそういうインターフェースがあると習得コストが低かったりRackミドルウェアで挙動を変更したり、色々と応用が効くのでは?とふと思い立ち実装した感じ。
一番オーソドックスな使い方は、以下のようなconfig.ruを書いて
run lambda { |env| [200, {}, ['hello']] }
racliコマンドを実行するだけ
racli
デフォルトでパスは /
、メソッドはGET
でリクエストされて、200系ではRackリクエストのボディがそのまま標準出力され、400〜500系では標準エラー出力に出力されます。
パスやメソッドは引数で指定できます。
racli POST /users
レスポンスの挙動を変えたい場合はカレントディレクトリの .raclirc
ファイルで設定可能です。300系でリダイレクトを効かせたい場合はこんな感じで書きます。
add_handler Racli::Handlers::RetryHandler
# debugするハンドラ
# add_handler Racli::Handlers::DebugHandler
引数として予約されているパラメータ以外をオプションに指定することもできます。例えばこのように書くと
racli --aa bbb --c ddd GET /hello
/hello?aa=bbb&c=ddd
にGETリクエストします。GETリクエスト以外はリクエストBODYにapplication/www-x-form-urlencodedの形式でリクエストします。
正直、CLI作るんだったらThorで良いじゃん、っていうのが作ってみた感想ですが、Rackアプリを起動させない状態でcurlできるようなツールなので、Rackを起動させない状態でAPI叩きたい場合とかに役に立つのかもしれない…?
ちなみにRails用にSpringを効かせるgemも作ってあります。