Taskfile + curlをHTTPクライアントツールとして使う
この記事において、「HTTPクライアントツール」は「HTTPリクエスト情報を設定しておくことで、指定したHTTPリクエストを実行することができるツール」のことを指します。
HTTPクライアントツールには、有名なところだと以下のものがあるようです。
おそらく上記以外にもたくさんのHTTPクライアントツールがあると思われます。
モチベーション
今までInsomniaを使っていて、そこまで不便を感じることなく開発をしてきました。
しかし、ふと「もっと自分に合ったHTTPクライアントツールがあるのでは?」と思い、他の方法を考え始めました。
特に最近「HTTPリクエスト情報をテキストファイルに書いてgitにコミットしたい」という気持ちが出てきたことがきっかけとして大きいです。
- 必須要件
- リクエスト情報をテキストファイルに保存できる: gitで管理したい
- 実行時にレスポンスだけでなく、リクエスト情報( URL, header, body )も見れる: HTTPリクエストも確認したいことは多々ある
- リクエストのURL, header, bodyで変数が使える: 共通化したい
- CLIから実行できる
- 歓迎要件
- シンプルな構成: HTTPクライアントツール周りでハマった時に調査しやすいと嬉しいし、長く使い続けられそう
- リクエスト情報を書いたテキストファイルをSingle Source of Truthとする: リクエスト情報を都度import/exportするのではなく、テキストファイルを書き換えたらそのまま反映されて欲しい
- CLIだけでなく、GUIからも実行できる: やっぱりGUIからも実行できると嬉しいよね
- リクエストを投げる前後に任意の処理ができる: 現実問題そういうことがしたくなる時ってけっこうあるよね
そんなことを考えた結果、 タスクランナー + curlという構成を思い付きました。
Taskfile
正式には "Task" という名前のツールなのですが、非常にややこしいのでツール自体も "Taskfile" と呼びます。
Taskfileはgolang製のCLIツールで、タスクランナー/ビルドツールです。
Task is a task runner / build tool that aims to be simpler and easier to use than, for example, GNU Make.
https://taskfile.dev/
テキストファイルで設定が書けて、curlを実行できるので、構成としては非常にシンプルで良いのではないかと思いました。
Taskfileはタスクランナーの中で比較的人気のものに見えたので、とりあえず最初に試しました。
Taskfile以外にもタスクランナーは色々あると思うので、要件を満たしていれば当然他のタスクランナーでも良いと思います。
まだ試していないのですが、 just
も良いかもしれません。
Taskfile.yaml
Taskfile.yaml
を書きます。( yml
ではなく yaml
派 )
簡単なサンプルとしては以下になります。
yamlで記述するため、構造が分かりやすくて好みです。
version: '3'
vars:
BASE_URL: http://localhost:3000
CONTENT_TYPE: "Content-Type: application/json"
tasks:
index:
cmds:
- curl -v -H "{{.CONTENT_TYPE}}" {{.BASE_URL}}/
create:
cmds:
- curl -v -H "{{.CONTENT_TYPE}}" -d '{{.JSON}}' {{.BASE_URL}}/
vars:
JSON: |
{
"message": "hello"
}
cmds
しかないタスクは short task syntax を使っても良いかもしれません。
HTTPクライアントツールの観点で気になった他の点は以下です。
-
includes
でファイル分割できる: HTTPリクエストが増えてきたら分割できる -
VSCode拡張がある: GUIからポチポチ実行できる
- 画像は上記ページより引用
- リクエストの結果を元に後続の処理をしたい時はまとめて書く or シェルスクリプトに切り出す
tasks:
my-address:
cmds:
- |
address=$(curl -s https://checkip.amazonaws.com)
echo "My IP address is ${address}"
my-address2:
cmds:
- ./my-address.sh
所感
要件を一通り満たしていて良さそうだと思いました(小並感
- ただのyamlファイルなので当然gitで管理できる
- curlを実行しているだけなのでシンプル、柔軟、知見が多い
- 最悪シェルスクリプトを書けばどうにかなる安心感
当初、VSCode REST Clientを触って「これはどうやればいいんだ?あれは出来ないのか?」と右往左往して苦労しました。
高機能なツールの使い方を頑張って学習するよりも、汎用的な既存のプログラムを組み合わせた方が、多少 ダサい 冗長に見えても便利だということを再認識しました。
各プログラムが一つのことをうまくやるようにせよ。
Discussion