プロジェクトで「よく使うコマンドをまとめておく場所」としてMakefileを使っていること結構ありますよね。make test、make build、make deploy...コマンドを統一できて便利なのですが、Makefileには落とし穴があります。
インデントは必ずタブ文字でないといけない(スペースだとエラー)、ターゲット名がファイル名と衝突するので.PHONYが必要、変数の扱いが独特...。本来makeはビルドシステムとして作られたツールなので、コマンドランナーとして使うには色々と不便な部分があります。
「コマンドをまとめて実行できればいい。ビルドシステムの機能は要らない」という用途にぴったりなのがjustです。
just
justは、プロジェクト固有のコマンドをjustfileに書いておき、簡単に実行できるコマンドランナーです。Rustで実装されており、GitHub Stars 33,000超で結構人気みたいですね。知りませんでした。makeの「コマンドランナーとして使いたい」という部分だけを取り出して、シンプルにしたのがjustです。
justの特徴
1. Makefileの面倒がない
.PHONYは不要でタブのインデント強制もありません。ただレシピを書くだけで動きます。
# Makefileのように書けるが、もっとシンプル test: cargo test build: cargo build --release deploy: build ./deploy.sh .PHONY: test build deploy
makeで必要だった.PHONY: test build deployのような記述は一切不要です。
2. 引数を自然に渡せる
レシピにパラメータを定義でき、コマンドライン引数として渡せます。
# 引数付きレシピ
build target="debug":
cargo build {{if target == "release" { "--release" } else { "" }}}
# デフォルト値あり・なし両方定義できる
deploy env tag="latest":
kubectl set image deployment/app app=myimage:{{tag}} -n {{env}}
just build # target="debug" で実行 just build release # target="release" で実行 just deploy staging just deploy production v1.2.3
makeで引数を渡すにはmake build TARGET=releaseのように書く必要がありますが、justはより直感的です。
3. .envファイルと統合できる
set dotenv-loadを書いておくだけで、.envファイルの内容を自動で読み込んでくれます。
set dotenv-load # .envに DATABASE_URL=postgres://... と書いておけば migrate: diesel migration run --database-url $DATABASE_URL
開発環境の設定をそのまま使えるので、環境変数の取り回しが楽になります。
4. 誤操作を防ぐ[confirm]属性
危険なコマンドには[confirm]をつけておくと、実行前に確認を求めてくれます。
[confirm("本当に本番環境にデプロイしますか?")]
deploy-prod:
./deploy.sh production
$ just deploy-prod 本当に本番環境にデプロイしますか? [y/N]
うっかりミスを防ぐのに便利です。
5. レシピ一覧を表示できる
just --list
Available recipes:
build [target="debug"] # アプリをビルド
clean # 生成ファイルを削除
deploy env tag="latest" # デプロイ
test # テストを実行
justをコマンドランナーとして使うとき、チームメンバーが「何を実行できるか」すぐ確認できます。デフォルトレシピをjust --listにしておくと、引数なしでjustを実行したときに一覧が出て便利です。
default: @just --list
インストール方法
macOSの場合:
brew install just
Linux(Ubuntu/Debian)の場合:
apt install just
その他のOSや、GitHub Actionsでの使い方については公式リポジトリを参照してください。
基本的な使い方
プロジェクトのルートディレクトリにjustfileを作成して、レシピを書いていきます。
# justfile set dotenv-load # デフォルト: レシピ一覧を表示 default: @just --list # 依存関係のインストール setup: npm install cargo fetch # テスト実行 test: cargo test npm test # ビルド build: cargo build --release npm run build # 開発サーバー起動 dev: docker compose up -d npm run dev # 後片付け clean: cargo clean rm -rf dist/ node_modules/ docker compose down -v
あとは実行したいレシピ名を指定するだけです。
just setup # セットアップ just test # テスト just build # ビルド just dev # 開発サーバー起動 just clean # クリーンアップ
まとめ
justは、makeをコマンドランナーとして使いたいときの不便さを解消するツールです。.PHONY不要、タブ強制なし、引数が自然に渡せる、.envファイルと統合できる。「コマンドをまとめて管理したい」という用途にシンプルにフィットします。
既存のMakefileをコマンドランナーとして使っているプロジェクトであれば、justfileへの移行は比較的簡単な気がします。まずよく使うコマンドから移してみるといいでしょう。
