Tools

just: gom lệnh của project vào justfile, đơn giản hơn Makefile

Tóm tắt

just lưu lệnh project trong justfile với cú pháp giống Make nhưng không cần .PHONY, có tham số, phụ thuộc, [confirm] cho lệnh nguy hiểm và just --list làm tài liệu. Dùng cùng recipe cho dev và CI.

Mỗi project có một bộ lệnh lặp đi lặp lại: chạy test, lint, build Docker, migrate database, deploy staging. Nhiều team nhét chúng vào Makefile, rồi vấp phải cú pháp tab bắt buộc, .PHONY, và việc Make vốn sinh ra để build file chứ không phải chạy lệnh. Số khác để rải rác trong README mà không ai cập nhật. just là "command runner": lưu các lệnh (gọi là recipe) trong file justfile với cú pháp giống Make nhưng đơn giản hơn, chạy bằng just tên-recipe.

Trang GitHub của casey/just
Trang GitHub của casey/just (ảnh chụp tháng 11/2026)

GitHub: https://github.com/casey/just · khoảng 37 nghìn sao · Rust · CC0-1.0

Cài đặt

brew install just          # macOS
cargo install just         # có Rust
winget install --id Casey.Just --exact  # Windows
sudo apt install just      # Ubuntu 24.04 trở lên

Justfile đầu tiên

Tạo file justfile ở gốc project:

# Đọc biến từ file .env
set dotenv-load

image := "myapp"
version := `git rev-parse --short HEAD`

# Recipe đầu tiên là mặc định khi gõ `just`
default:
    @just --list

# Cài dependency
install:
    npm ci

# Chạy test, truyền thêm tham số tuỳ ý
test *args:
    npm test -- {{args}}

# Build image, phụ thuộc vào test
build: test
    docker build -t {{image}}:{{version}} .

# Deploy, có tham số với giá trị mặc định và hỏi xác nhận
[confirm("Deploy thật chứ?")]
deploy env="staging": build
    ./scripts/deploy.sh {{env}} {{image}}:{{version}}
just               # hiện danh sách recipe kèm comment
just test --watch  # truyền tham số
just deploy prod   # chạy test → build → hỏi xác nhận → deploy prod

Vì sao không dùng Make?

Tiêu chíMakejust
Mục đích gốcBuild file dựa trên thời gian sửaChạy lệnh
.PHONYCần khai báoKhông cần
Tham sốQua biến, khá vụngTham số có tên, giá trị mặc định, biến thiên số lượng
Liệt kê lệnhPhải tự viếtjust --list có sẵn, lấy comment làm mô tả
Báo lỗiKhi chạy tớiRecipe hay biến không tồn tại bị báo trước khi chạy
Đa nền tảngKhó trên WindowsChạy trên Linux, macOS, Windows

Tính năng đáng biết

  • Recipe viết bằng ngôn ngữ khác: dòng đầu là shebang (#!/usr/bin/env python3) thì cả recipe chạy như một script Python.
  • Đổi shell: set shell := ["bash", "-uc"].
  • Chạy từ thư mục con: just tự tìm justfile ở thư mục cha, nên gõ just test ở đâu trong project cũng được.
  • Ẩn lệnh khi in: thêm @ trước dòng để không in lại lệnh trước khi chạy.
  • Thuộc tính: [confirm] hỏi trước khi chạy, [private] ẩn khỏi danh sách, [linux]/[macos]/[windows] cho recipe theo hệ điều hành.

Lưu ý

  • just không theo dõi file đã build hay chưa; mỗi lần gọi là chạy lại. Nếu cần build tăng dần, vẫn dùng công cụ build chuyên dụng.
  • Mỗi dòng của recipe chạy trong một shell mới; biến shell và cd không giữ giữa các dòng. Cần giữ trạng thái thì dùng recipe shebang.
  • Thụt lề trong recipe có thể dùng tab hoặc dấu cách, nhưng phải thống nhất trong một recipe.

Áp dụng thế nào?

  • Dev: Gom mọi lệnh hay dùng của project vào justfile; người mới chỉ cần gõ just để biết project chạy thế nào.
  • Tech Lead: Cho CI gọi cùng recipe với máy dev (just test, just build) để hết cảnh "CI chạy khác máy tôi".
  • PM: justfile là tài liệu sống về quy trình kỹ thuật của project, luôn đúng vì chính nó được chạy hằng ngày.

Nguồn & tham khảo

  1. casey/just — casey (GitHub)