Giới thiệu

Bạn đã bao giờ cảm thấy mệt mỏi vì phải chờ đợi pre-commit chạy hàng tá kiểm tra mỗi khi chuẩn bị git commit chưa? Trong các dự án lớn, việc chờ đợi linter hay formatter có thể làm gián đoạn luồng công việc của bạn.

Đó là lý do prek ra đời. Được định nghĩa là một phiên bản cải tiến của pre-commit nhưng được viết lại hoàn toàn bằng Rust, prek không chỉ mang lại tốc độ thực thi đáng kinh ngạc mà còn loại bỏ sự phụ thuộc vào runtime Python. Hiện tại, project đã đạt hơn 5,841 stars153 forks trên GitHub, được tin dùng bởi các dự án lớn như FastAPI, CPython và Apache Airflow.

Tính năng nổi bật

  • Tốc độ vượt trội: Nhờ sức mạnh của Rust, prek thực thi các hooks song song và tối ưu hóa việc sử dụng tài nguyên, nhanh hơn gấp nhiều lần so với bản gốc.
  • Không phụ thuộc (Dependency-free): Bạn chỉ cần một file binary duy nhất để chạy, không cần cài đặt Python hay bất kỳ runtime nào khác trên máy host.
  • Tương thích hoàn toàn: prek là một giải pháp "drop-in replacement", nghĩa là bạn có thể sử dụng trực tiếp file cấu hình .pre-commit-config.yaml hiện có mà không cần sửa đổi.
  • Hỗ trợ Monorepo (Workspace mode): Một tính năng cực kỳ hữu ích cho các dự án lớn, cho phép mỗi sub-project có cấu hình hook riêng biệt.
  • Tích hợp uv: Tận dụng tốc độ của uv để quản lý môi trường ảo Python và cài đặt dependencies nhanh chóng.

Cài đặt

Bạn có thể cài đặt prek thông qua nhiều phương thức khác nhau tùy vào hệ điều hành đang sử dụng:

Sử dụng script cài đặt nhanh (Linux/macOS):

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.3.2/prek-installer.sh | sh

Dùng cho các dự án Python (thông qua uv):

uv tool install prek

Dùng cho macOS (Homebrew):

brew install prek

Hướng dẫn sử dụng

Bắt đầu nhanh

Nếu bạn đã có sẵn file cấu hình pre-commit, việc chuyển sang prek cực kỳ đơn giản. Thay vì chạy pre-commit run, bạn chỉ cần dùng:

# Chạy hooks cho các file đã thay đổi
prek run

# Chạy hooks cho toàn bộ project
prek run --all-files

# Cài đặt git hook script
prek install

Các tính năng CLI hữu ích khác

Một điểm mình rất thích ở prek là khả năng liệt kê các hooks một cách trực quan:

# Liệt kê tất cả các hooks đang được cấu hình
prek list

Ngoài ra, nếu bạn muốn chạy một hook cụ thể cho một thư mục nhất định, prek hỗ trợ flag --directory cực kỳ tiện lợi:

prek run --directory src/api

Kết luận

Ưu điểm

  • Tốc độ thực thi cực nhanh nhờ Rust và cơ chế chạy song song.
  • Cài đặt đơn giản, không gây xung đột phiên bản Python.
  • Hỗ trợ monorepo tốt hơn hẳn so với pre-commit truyền thống.

Nhược điểm

  • Là một dự án tương đối mới, một số ngôn ngữ ít phổ biến có thể chưa được hỗ trợ hoàn hảo như bản gốc.

Ai nên dùng tool này?

Nếu bạn là một developer đang làm việc trong các dự án lớn, các dự án Monorepo, hoặc đơn giản là một người yêu thích tốc độ và sự gọn nhẹ của các công cụ viết bằng Rust, prek chắc chắn là một sự nâng cấp đáng giá cho quy trình phát triển của bạn.


Nguồn: Beta: Prek