💼
makeに変わるタスクランナーとしてjustとtaskを比較してみたら
justしか勝たん。
趣味プロジェクトのいくつかで、Makefile
を恐る恐るいじる日々が続いていました。といってもmake
本来のビルド目的ではまったくなく、純粋なタスクランナーとして使っています。モチベーションはカヤックさんのブログと同じで、タスク用スクリプトが、プロジェクトごとにバラバラな方法で量産されるのを避けたくてmake
を使いはじめました。
- タスクをリスト化したい
- タスクの実行インターフェイスを統一したい
タスクランナーとしてのmakeを使う際の工夫と注意点 - KAYAC Engineers' Blog
ですが、Makefile
特有のとっつきにくさ(PHONYや独特の記法)がどうにも苦手……とっつきやすいツールはないものかと探したところ、以下の2つが見つかりました。
さっそく両方試してみたところ、冒頭のJustしか勝たんに至りました。どちらもワンバイナリーのツールでサクッと試せて、タスクをシェルスクリプトっぽく書けるのはmake
よりGoodなのですが、Taskには以下の2点の問題があり、こりゃだめだとなってしまいました。
- 設定ファイルがYAMLであること(YAMLつらい……)
- 複数行にわたるタスクは設定ファイルに書かず、外部スクリプトを呼び出すことを推奨していること
一方のJustはというと、
- 設定ファイルはMakefileっぽい独自形式
- タスクが複数行にわたる前提の設計になっている
ということで、私のように設定ファイル1つでプロジェクトのタスクをすべて管理したい勢にとって、Justはまさにぴったりなツールと言えそうです。
インフラ系のプロジェクト(AnsibleやTerraformの複雑なコマンドなど)でもデータ管理系のプロジェクト(データ整理のためのちょっとしたスクリプトやコマンド群)でも、散らかったタスクをJustでひとまとめにしていこうと思います。
JustのちょっとしたTips - Justfileのボイラープレート
Justfile
[private]
@default: help
# show help message
@help:
echo "Usage: just <recipe>"
echo ""
just --list
自分のプロジェクトのJustfileには、冒頭に↑の記述を入れてあります。こうすると、プロジェクトのディレクトリ内でjust
コマンドを実行すれば、以下のようなヘルプメッセージを確認できます。
$ just
Usage: just <recipe>
Available recipes:
my-recipe # this is a comment for my-recipe
Discussion