Coding standard auto check in Laravel

Coding standard auto check in Laravel
ぽこがみさま

それ以外のトークンは3番目のトークンを取得するためのトークンです。

じょじお

トークンがいっぱいあるので混乱しないように注意してくださいね。

Coding standard auto check in Laravel

Trong PHP, chúng ta có những tiêu chuẩn code (Coding Standard) như PSR-12, Laravel, Symfony, ... nhằm mục đích đưa các cú pháp code về một chuẩn. Cùng với đó, cũng có các công cụ hỗ trợ chúng ta kiểm tra trước hoặc thậm chí là sửa lỗi theo các tiêu chuẩn trên như PHP CodeSniffer (PHPCS), PHP Code Standard Fixer (PHP CS Fixer), hay gần đây có Laravel Pint (thực ra là một phiên bản wrap lại của PHP Code Standard Fixer) của chính chủ nhà Laravel.

Hiện nay, hầu hết các project open-source hoặc nội bộ, các maintainer sẽ thiết lập sẵn các công cụ CI/CD như GitHub Actions, Gitlab CI... dựa vào các công cụ trên để kiểm tra trước các Pull Request (PR) để đảm bảo chất lượng code trước khi tiến hành review. Tuy nhiên, dùng CI/CD thì sẽ có thể phát sinh chi phí, ví dụ như GitHub Actions, hiện đang giới hạn số phút đối với các project private, vì vậy việc kiểm tra trước ở local cũng là một cách hay để tiết kiệm chi phí. Trong bài viết này, mình sẽ chia sẻ các bạn cách kiểm tra coding standard trước khi commit code trong git.

GIT Hooks

Mặc định, ở trong GIT sẽ cấp cho chúng ta một số hook được viết bằng shell script, mỗi hook sẽ được gọi ở các thời điểm khác nhau trong quá trình làm việc với GIT. Các bạn sẽ dễ dàng tìm thấy các file mẫu mà GIT cung cấp tại .git/hooks trong thư mục GIT repository.

Coding standard auto check in Laravel

File pre-commit.sample sẽ là cái mà chúng ta quan tâm, đây là hook được gọi đến khi chúng ta tiến hành commit. Thử tạo một file .git/hooks/pre-commit với nội dung như sau:

#!/bin/sh

echo "Hello Everyone!"
  

Bạn cần phải cấp quyền thực thi cho file đấy, để làm được việc đó, ta dùng câu lệnh sau:

chmod +x .git/hooks/pre-commit
  

Giờ chúng ta sẽ thử commit, các bạn sẽ thấy file đấy sẽ được thực thi:

Coding standard auto check in Laravel

Chúng ta sẽ viết script kiểm tra coding standard vào đây.

Laravel Pint

Như đã được đề cập ở trên, Laravel Pint là một công cụ giúp cho chúng ta sửa lỗi coding standard được bọc lại từ công cụ PHP CS Fixer. Chúng ta sẽ dùng công cụ này, nhưng không sử dụng chức năng tự động fix, mà chỉ dùng để hiển thị lỗi thôi.

Mặc định các bản Laravel mới đã có sẵn công cụ này rồi, nếu chưa các bạn có thể cài đặt chúng bằng composer:

composer require laravel/pint --dev
  

Sau khi cài, chúng ta sẽ chạy câu lệnh sau để kiểm tra lỗi bằng việc thêm option --test:

./vendor/bin/pint --test
  

Kết quả trả về sau sau:

Coding standard auto check in Laravel

Để hiển thị chi tiết hơn về lỗi và fix nó như thế nào, bạn dùng option -v:

./vendor/bin/pint --test -v
  
Coding standard auto check in Laravel

Ở đây, nếu bạn muốn Pint tự động sửa lỗi, các bạn chỉ cần bỏ đi option --test thôi, nhưng chúng ta không làm điều đó trong bài viết này. Quay lại file .git/hooks/pre-commit, chúng ta sẽ để nguyên câu lệnh trên vào file đó như sau:

#!/bin/sh

echo "Running Laravel Pint...\n"

php ./vendor/bin/pint --test -v
  

Khi ta commit. Nếu có lỗi từ Pint, chắc chắn việc commit sẽ được dừng lại:

Coding standard auto check in Laravel

Nếu như các bạn muốn đổi preset, có thể thêm option --preset={name} vào câu lệnh ./vendor/bin/pint, hoặc tạo file pint.json với nội dung như sau:

{
  "preset": "{name}"
}
  

Laravel Pint hiện đang hỗ trợ preset sau: laravel (mặc định), symfony, psr12.

Coding standard auto check in Laravel

Như vậy, bạn đã có thể kiểm tra coding standard ở local trước khi commit. Cách này có một nhược điểm đó là bạn cần phải thiết lập lần đầu khi clone project về, vì hiện tại các GIT repository không hỗ trợ lưu trữ các hooks.

Giới thiệu package nirugima/commitsar

Các bạn có thể thực hiện việc một các thủ công, hoặc có thể tham khảo package nirugima/commitsar do team Nirugima phát triển và đang được tin dùng trong cộng đồng Laravel Việt Nam nếu bạn đang làm việc với project Laravel.

Hiện tại commitsar phiên bản 2 sử dụng Laravel Pint và đang yêu cầu Laravel 9 và PHP 8 trở lên.

Tiến hành cài đặt package:

composer require nirugima/commitsar --dev
  

Dùng câu lệnh sau để cài đặt GIT Hook:

php artisan commitsar:install
  

Trong quá trình cài đặt GIT Hook, nó sẽ hỏi các bạn về việc có tạo file preset.json không và cấu hình theo chuẩn nào, bạn cứ chọn theo hướng dẫn hoặc từ chối.

Sau khi cài đặt sau, hook sẽ được hiệu lực ngay mà bạn không cần phải làm gì thêm. Hoặc là bạn có thể thực hiện việc kiểm tra thủ công bằng câu lệnh sau:

php artisan commitsar:pre-commit-hook
  

Lệnh này sẽ chỉ kiểm tra những file *.php có sự thay đổi trong commit của bạn, chứ không check toàn bộ file trong project.

Coding standard auto check in Laravel

Để vô hiệu hóa checker tạm thời, bạn có thể publish file config của package ra để tùy chỉnh hoặc thêm key sau vào .env:

COMMIT_SAR_ENABLED=false
  

Kết luận

Bằng cách trên, các bạn có thể kiểm tra trước được code của mình ở local trước khi commit, để tiết kiệm được tối đa thời gian chạy CI/CD nếu có hoặc thời gian review của các maintainer. Việc gắn vào GIT Hook như vậy cũng giúp bạn hạn chế được việc quên kiểm tra bằng lệnh check trước khi commit. Nếu bạn có cách nào khác hay hơn đừng ngại chia sẻ với mình bằng cách bình luận bên dưới nhé.

Đăng nhận xét

Mới hơn Cũ hơn