HTTPリクエストを雑に投げ込めるCLIツールを作った

はじめに

皆さんは外部のAPIを叩くようなアプリケーションを開発するときに,動作確認をどのように行っているでしょうか?
叩くAPIが副作用のないものであれば,動作確認時も気にせず叩けますが,副作用があるAPI(PUTやPOSTリクエスト)の動作確認はテストデータを使うとか,モックのAPIサーバーを作るなどすると思います.
ただ,テストデータやモックサーバーの開発はどちらもそれなりに手間がかかります.
なので,どんなリクエストメソッドでも,どんなパスでも,どんなクエリパラメーターでも投げ込めるようなツールを作ってみました.

作ったもの

4d-pocket」というツールを作りました.
名前の由来は,4次元ポケットです.
github.com
TypeScriptで書きました.
リクエストメソッド,URLのパス,クエリパラメーターがどんなものであっても,リクエストを受け取り,HTTP 200を返します.

ハマったポイント

npmのcliツールを作る際は,package.jsonのbinで指定したファイルの先頭行に#!/usr/bin/env nodeを書く必要があります.
TypeScriptで書く場合でも,このように書きます.
tscコンパイルした後のjsファイルにも,この行は変更されずに残るので心配しなくて大丈夫です.
ただ,コードをGitHubに上げると,#!/usr/bin/env nodeが入っている.tsファイルはJavaScriptとして認識されてしまうようです.
これは,.gitattributesファイルに以下のように書くことで回避できます.

*.ts linguist-language=TypeScript

使い方

npmとして公開しているので,Node.jsの実行環境があれば,$ npx 4d-pocketで使えます.
www.npmjs.com
-pで待ち受けるポート番号を変更できます.
リクエストが来ると,タイムスタンプ,リクエストメソッド,パス,ヘッダ,ボディーをログとして標準出力に表示します.

おわりに

今は雑にリクエストを投げ込むだけですが,特定のパスへのリクエストに予め設定したレスポンスを返すなど,モックサーバー的な使い方もできるようにしたいと思っています.
現在実装されている機能はかなり貧弱なので,プルリクエストや機能追加アイディアのissueなど,お気軽に送って頂けると嬉しいです.