코드 스타일 적용 자동화

inho ha·2024년 7월 15일
0

인천의 한 일요일, 지인과 함께 인증 서비스 개발을 하기로 하였다.
프로젝트 세팅 중에 코드 스타일 적용 방식에 대하여 이야기 하였다.

pre-commit

지인분의 회사에서는 pre-commit을 활용하여 commit 이전에 코드 스타일이 자동으로 적용되도록 하고 있다고 한다.
이를 활용하면 commit시에 pre-commit git hook을 통해서 코드 스타일에 위배되는 코드를 자동으로 수정해준다.
결국 commit에 코드 스타일에 위배되는 내용이 들어가는 것을 방지할 수 있다.

이번 프로젝트에 pre-commit hook을 사용하여 코드 스타일 적용을 자동화 하기로 하였다.

Java style checker

Java 의 코딩 스타일 적용에 사용할 플러그인을 조사하였다.
pre-commit git hook에 등록하여 사용하는 것은 주로 2가지로 보인다.

CheckStyle은 코드 스타일 체크는 가능하지만 코드 스타일 적용 기능은 제공하지 않는다.
반면 Spotless 는 코드 스타일을 체크하고 적용 기능까지 제공한다.

따라서 Spotless 를 사용하기로 하였다.

플러그인 추가

plugins {
	id "com.diffplug.spotless" version "6.25.0"
}

spotless {
	java {
		googleJavaFormat('1.21.0')
	}
}

build.gradle 에서 spotless 플러그인을 추가해주고
사용할 스타일과 버전을 적용해준다.

git hook 설정

#!/bin/sh

# Apply google style using Spotless
./gradlew spotlessApply

# Format staged Java files using google-java-format
java -jar tools/google-java-format-1.21.0-all-deps.jar -i $(git diff --cached --name-only --diff-filter=ACM -- '*.java' | xargs)

# Add formatted files back to the index
git add $(git diff --cached --name-only --diff-filter=ACM -- '*.java' | xargs)

.git/hooks/pre-commit 파일을 생성하고 실행할 내용을 설정해준다.

여기서는 google-java-format-1.21.0-all-deps.jar 파일을 실행시켜서 사용되지 않은 import 까지도 제거하도록 해주었다.

git hook 설정 스크립트 작성

#!/bin/sh

# Copy the pre-commit sample to the .git/hooks directory
cp hooks/pre-commit.sample .git/hooks/pre-commit

# Make the pre-commit hook executable
chmod +x .git/hooks/pre-commit

.git 하위의 파일들은 git에 올라가지 않는다.

해당 프로젝트를 사용하는 인원 모두가 git hook을 적용할 수 있도록 git hook을 적용하는 스크립트를 추가해주었다.

readme에 git hook 설정 스크립트 실행 내용 추가

마지막으로 readme 에 git hook 설정 스크립트를 실행해야한다는 내용을 추가하여 모두가 동일한 코드 스타일을 공유할 수 있도록 하였다.

https://github.com/ttokcheong/debate_summary/pull/3

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글