💼

makeに変わるタスクランナーとしてjustとtaskを比較してみたら

2024/09/20に公開

justしか勝たん。

趣味プロジェクトのいくつかで、Makefileを恐る恐るいじる日々が続いていました。といってもmake本来のビルド目的ではまったくなく、純粋なタスクランナーとして使っています。モチベーションはカヤックさんのブログと同じで、タスク用スクリプトが、プロジェクトごとにバラバラな方法で量産されるのを避けたくてmakeを使いはじめました。

ですが、Makefile特有のとっつきにくさ(PHONYや独特の記法)がどうにも苦手……とっつきやすいツールはないものかと探したところ、以下の2つが見つかりました。

さっそく両方試してみたところ、冒頭のJustしか勝たんに至りました。どちらもワンバイナリーのツールでサクッと試せて、タスクをシェルスクリプトっぽく書けるのはmakeよりGoodなのですが、Taskには以下の2点の問題があり、こりゃだめだとなってしまいました。

  1. 設定ファイルがYAMLであること(YAMLつらい……)
  2. 複数行にわたるタスクは設定ファイルに書かず、外部スクリプトを呼び出すことを推奨していること

一方のJustはというと、

  1. 設定ファイルはMakefileっぽい独自形式
  2. タスクが複数行にわたる前提の設計になっている

ということで、私のように設定ファイル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