2018-08-29

RackをバックエンドとするCLIツール Racliを作ってみた

表題のとおり、RackをバックエンドとしたCLIツール Racliを作ってみました。

モチベーションとしてはRejectKaigiBotアプリケーションインターフェースを作ったという発表があり、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も作ってあります。

tzmfreedom/spring-commands-racli: racli command for Spring

このエントリーをはてなブックマークに追加