개요
프론트엔드 개발시, Husky
와 lint-staged
를 사용하여 Git
의 commit
을 실행할 때, 자동으로 ESLint
나 Prettier
를 실행하도록 설정하여 사용하였습니다.
최근에 Golang을 사용한 웹 서버 개발이나, Flutter를 사용하여 앱 개발을 하고 있는데, Node 기반이 아닌 프로젝트에서 Husky와 lint-staged와 같이 Linter나 테스트 코드를 실행시키는 방법을 필요했습니다.
이번 블로그 포스트에서는 Lefthook
을 사용해서 Git의 commit을 실행할 때, Linter나 테스트 코드를 실행하는 방법에 대해서 알아보도록 하겠습니다.
- Lefthook: https://github.com/evilmartians/lefthook
Lefthook 설치
Lefthook
은 다양한 언어와 OS를 지원하고 있습니다. 자신의 개발 환경에 맞게 Lefthook
을 설치하시기 바랍니다.
- Node.js
- Go
- Ruby
- pip for Python
- Homebrew for MacOS and Linux
- Snap for Linux
- RPM packages for CentOS/Fedora Linux
- AUR for Arch
저는 macOS
를 사용하고 있기 때문에, 다음 명령어를 사용하여 Lefthook
을 설치하였습니다.
brew install lefthook
Lefthook 설정
이렇게 설정한 Lefthook
을 사용하기 위해서는, 개발중인 프로젝트 폴더에 ./lefthook.yml
파일을 만들고 다음과 같이 수정할 필요가 있습니다.
pre-commit:
parallel: true
commands:
pretty:
glob: './src/**'
run: npx prettier --check {staged_files}
linter:
glob: 'src/**/*.{ts,tsx}'
run: npx eslint {staged_files}
pre-commit
이나 pre-push
를 사용하여 Git의 commit나 push 이전에 특정 동작을 하도록 설정할 수 있습니다. parallel
옵션을 사용하여 실행할 명령어들을 병렬로 실행하도록 설정할 수 있습니다. commads
에는 특정 액션의 이름(pretty, linter 등)에 실행할 명령어(run
)를 설정합니다.
glob
을 사용하여 파일 리스트를 필터링할 수 있으며, root
옵션을 사용하여 명령어를 실행할 폴더를 지정할 수 있습니다.
pre-commit:
commands:
backend-linter:
root: "api/" # Careful to have only trailing slash
glob: "*.rb" # glob filter
run: bundle exec rubocop {all_files}
이 밖에도 다음과 같은 기능을 사용할 수 있습니다.
- Glob and regexp filters
- Run scripts
- Tags
- Support Docker
- Local config
- Direct control
- Your own tasks
- Optional output
Lefhook 실행
이렇게 설정한 Lefthook
이 잘 실행되는지 확인하기 위해 다음 명령어를 실행해 봅니다.
lefthook run pre-commit
그럼 ./lefthook.yml
에 설정한 명령어들이 실행되는 것을 확인할 수 있습니다.
Lefthook 적용
lefthook run ...
명령어는 ./lefthook.yml
파일의 내용을 한번만 실행합니다. 하지만, 우리는 Git
의 commit
이 실행될 때마다, 설정한 명령어를 실행하도록 만들고 싶습니다. 이제 다음 명령어를 실행하여 Git
의 commit
이 실행될 때마다, ./lefthook.yml
에 설정한 명령어들이 실행되도록 설정합니다.
lefthook install
이후, Git
의 commit
명령어를 실행할 때, ./lefthook.yml
에 설정한 명령어들이 실행되는 것을 확인할 수 있습니다.
완료
이것으로 Lefthook
을 사용하여 Git
의 commit
을 실행할 때, Linter와 테스트 코드 실행 등의 명령어를 실행하는 방법에 대해서 알아보았습니다. Lefthook
은 다양한 개발 환경을 지원하므로, Node 개발 환경이 아닌 프로젝트에서도 사용할 수 있습니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.