Ruff 패키지를 사용해 코드 linter와 formatter를 적용한 경험을 공유해보고자 합니다. 코드 작성을 마친 후, Ruff를 통해 한 번 검토를 거치면 코드가 훨씬 읽기 쉽고 깔끔해지며, 필요 없는 함수나 import 구문도 제거되어 최적화된 코드가 완성됩니다.

출처:   http://asciiville.com

 


저뿐만 아니라 다른 사람들과 협업할 때에도 통일된 코드 스타일을 유지하는 것이 중요합니다. Ruff를 통해 이를 손쉽게 구현할 수 있을 것 같아, 설치와 사용 방법을 정리해 보았습니다. 아래는 제가 따라 한 튜토리얼을 참고해 보시면 도움이 될 것입니다. 튜토리얼 중 제가 필요한 기능만 뽑아봤습니다!!

 

튜토리얼 링크

 

Tutorial | Ruff

This tutorial will walk you through the process of integrating Ruff's linter and formatter into your project. For a more detailed overview, see Configuring Ruff. To start, we'll install Ruff through PyPI (or with your preferred package manager): Let's then

docs.astral.sh

 

Ruff 설치하기

먼저 pip를 통해 Ruff 패키지를 간단히 설치합니다.

pip install ruff


예시 프로젝트 구조는 다음과 같습니다.

numbers
  ├── __init__.py
  └── numbers.py


numbers.py의 예시 코드는 아래와 같습니다.

from typing import Iterable
import os

def sum_even_numbers(numbers: Iterable[int]) -> int:
    """Given an iterable of integers, return the sum of all even numbers in the iterable."""
    return sum(
        num for num in numbers
        if num % 2 == 0
    )

 

 

Ruff Linter 적용하기

ruff check 명령어를 통해 현재 디렉터리 내 모든 파일에 대해 Ruff linter를 실행할 수 있습니다. linter란 코드의 오류를 찾아내고, 더 나은 코드 품질을 위해 개선할 수 있는 부분을 알려주는 도구입니다. 예를 들어, 사용되지 않는 import 구문 등을 자동으로 찾아줍니다.

ruff check

위 명령어를 실행하면 다음과 같은 메시지가 나타납니다.

numbers.py:3:8: F401 [*] `os` imported but unused
  |
1 | from typing import Iterable
2 |
3 | import os
  |        ^^ F401
  |
  = help: Remove unused import: `os`

Found 1 error.
[*] 1 fixable with the `--fix` option.

 

위 오류를 자동으로 수정하려면 다음과 같이 실행합니다.

ruff check --fix

결과는 다음과 같습니다.
Found 1 error (1 fixed, 0 remaining).

 

사용하지 않은 import os 구문이 제거된 것을 확인할 수 있습니다.

from typing import Iterable

def sum_even_numbers(numbers: Iterable[int]) -> int:
    """Given an iterable of integers, return the sum of all even numbers in the iterable."""
    return sum(
        num for num in numbers
        if num % 2 == 0
    )


Ruff는 기본적으로 현재 디렉터리를 대상으로 실행하지만, 특정 파일이나 경로를 지정할 수도 있습니다.

ruff check numbers/numbers.py


Ruff Formatter 적용하기

ruff format 명령어를 통해 Ruff formatter를 실행할 수 있습니다. formatter는 줄바꿈, 주석 처리 등 코드 스타일을 깔끔하게 정리해 주는 역할을 합니다.

ruff format


실행 결과, 파일이 다시 정돈되고 코드 스타일이 개선된 것을 확인할 수 있습니다.

from typing import Iterable

def sum_even_numbers(numbers: Iterable[int]) -> int:
    """Given an iterable of integers, return the sum of all even numbers in the iterable."""
    return sum(num for num in numbers if num % 2 == 0)


기본 88자 줄 길이 제한에 맞춰 코드가 다시 포맷되었음을 `git diff` 등을 통해 확인할 수 있습니다.

 

요약

Ruff는 코드의 일관성을 유지하고 코드 리뷰 시간을 절약하는 데 큰 도움을 줍니다. 협업 프로젝트에서 통일된 코드 스타일을 유지하고 코드 품질을 높이기 위해 Ruff를 사용해 보세요. 간단한 linter 및 formatter 명령어로 코드 유지보수와 협업에 유용하게 활용할 수 있습니다.

 

ruff check - 코드 오류를 찾아내는 Linter 실행

ruff check --fix - 자동으로 수정 가능한 오류 수정

ruff format - 코드 스타일을 깔끔하게 정리하는 Formatter 실행

 

이 명령어들을 사용하여 여러분의 코드에 Ruff를 적용해 보세요. 협업 과정에서 얼마나 유용한 도구인지 경험하게 될 것입니다.