이번 프로젝트를 진행하며 밤을 새던 새벽에 문득 코드 컨벤션이 하나도 안 지켜지고 있단 생각이 들었다.
그러나 이번 프로젝트의 swift파일은 약 50개,,
일일이 수정하지 않으면서 가독성과 코드 일관성을 높이고 과도하게 긴 객체나 메서드를 찾고자 수업시간에 배운 swiftlint를 활용해보고자 했다.
swiftlint란 코드 스타일 가이드와 규칙을 기반으로 문제가 되는 코드를 탐지하고 경고해주며 수정가능한 간단한 사항들은 자동으로 수정까지 해주는 linting툴이다.
주로 띄어쓰기, 네이밍 규칙, 줄 길이 제한, 들여쓰기 등에 대해 검사한다.
또 빌드 과정에 스크립트로 통합시킬 수 있어 자동으로 규칙 위반을 감지할 수도 있다.
어떤 분은 TODO주석으로 할 일들을 기록해두어 놓치지 않기 위해 TODO주석에 대해 경고를 남기도록 설정해두시기도 한다고.
그외에도 강제 언래핑을 막거나 치명적인 에러가 발생할 수 있는 코드 등도 지적해주는 편리한 도구이다.
유명한 스타일 가이드는 Airbnb, RayWenderlich가 있고 팀의 스타일에 따라 .yaml파일을 만들어 규칙을 커스텀할 수도 있다.
특정파일을 제외하거나 규칙을 비활성화하거나 한 줄의 최대 길이를 지정하는 등.
그리고 이러한 과정을 통해 얻을 수 있는 장점은 코드 품질을 자동으로 관리해주어 리뷰 시간을 단축해주고 프로젝트 코드 스타일의 일관성을 유지하니 협업에도 도움이 된다.
아니면 강제언래핑을 막는 것처럼 실수나 에러 발생 가능성을 감소시키는 데도 도움이 된다. 또 상속하지 않는다면 final을 붙이도록 하는 등 성능 최적화에도 도움을 받을 수 있다.
swiftlint는 홈브루로 설치하거나 xcode에서 스냅킷을 추가하듯 추가할 수 있다.
근데 난 스냅킷처럼 엑스코드 파일에 포함시켰을 때 엄청난 에러를 보고 그냥 얌전히 홈브루로 설치했다.
brew install swiftlint
혹시나 xcode에 통합하고 싶다면 build Phases에서 New Run Script Pahse를 선택하고 아래 스크립트를 입력하면 규칙 위반 사항을 표시해줄 수 있다.
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed. Install using Homebrew: brew install swiftlint"
fi
난 그냥 터미널로 siwftlint를 실행한 뒤 새로 나온 gpt의 기능을 이용해 로그를 요약해서 전달받고 처리했다.
마지막으로 린팅을 한지 좀 지났더니 더 생겼다.
여기에 다음과 같이 자동 수정처리를 하면 자동처리한 것과 수동처리가 필요한 부분을 알려준다.
swiftlint --fix
만약 특정 파일만 하고 싶다면
swiftlint fix --path 파일경로/파일 이름.swift
위 코드로 처리할 수 있다.
파일이 아니라 경로로 끝낸다면 해당 경로에 존재하는 파일만 수정할 것이다.
또 바로 수정을 원하는 것이 아니라 원본은 유지하되 별도의 형식으로 수정된 파일을 출력받고 싶다면
swiftlint fix --format
위 코드를 사용하면 된다.
기본적인 경고 규칙을 요약하면 다음과 같다.
이중 자동 수정 가능한 규칙은
즉 웬만하면 코드에 직접적인 영향을 끼치는 자동수정은 없다고 보면 된다.
다음 프로젝트에서는 팀 코드 컨벤션을 적극적으로 추진하고 swiftlint의 사용도 권장해봐야겠다.
와 경고규칙.. 저런게 있었구나... 심지어 강제 캐스팅도.. 재밌네요