コード静的解析ツール・フォーマッタ「Ruff」
Pythonにおける「読みやすさ」の重要性
Pythonの開発において広く知られる「The Zen of Python(PEP 20)」は、Pythonの設計思想や開発者の価値観を示す19の原則から成り立っています。
そのうちの一つに、以下の原則があります。
Readability counts.(読みやすいことは善である)
この一文が示す通り、Pythonにおいて「読みやすさ」は単なるスタイルの問題ではなく、コード品質そのものを左右する根本的な価値観です。読みやすいコードは、保守しやすく、バグも発見しやすく、共同作業もスムーズに進みます。
しかし実際の開発現場では、「読みやすさ」を全員が一貫して守るのは容易ではありません。人によってスタイルが微妙に異なったり、レビューにおいて不必要なスタイルの指摘に時間を取られたりすることもあります。そこで重要になるのが、フォーマッタや静的解析ツールといったツールの導入です。
フォーマッタ(Formatter)は、コードの見た目を自動的に整えるツールです。行の折り返しやインデントなどを標準化し、プロジェクト全体のフォーマットを統一します。
静的解析ツール(Linter)は、コードに潜む潜在的なバグや非推奨な書き方、構文ミスなどを静的に検出するツールです。
最近注目されているのが、超高速な静的解析ツールRuffです。RuffはRust製の静的解析エンジンを使っており、既存のツールよりも圧倒的に高速です。
インストール
RuffはPythonパッケージの一つとしてインストールされます。そのため、uv
を利用すると、プロジェクトの中で次のようにインストールできます。
$ uv add ruff $ uv sync
VS Code、uv、Ruffを実際に使ってみ$よう
それでは、これら3つのツールを使って、実際にコードを書いてみましょう。
プロジェクトの作成
任意の場所でディレクトリ(例としてexample
)を作成し、カレントディレクトリを移動します。
$ mkdir example $ cd example
uvでプロジェクトを初期化します。
$ uv init Initialized project `example`
サンプルのPythonスクリプトができています。実際に動作させてみましょう。
$ uv run main.py Hello from example!
VS Codeでプロジェクトを開く
サイドバーの「エクスプローラ」タブで「フォルダを開く」を選択し、出てきたファイラのウィンドウで、先ほど作ったexample
ディレクトリを開きます。

Tips
「プロジェクトの作成」で使ったターミナルで「code .」と入力すると、現在のディレクトリをルートにしてVS Codeを開くことができます。
作成したディレクトリ内に、さらにディレクトリを作成したり、ファイルを追加したりしてコードを書き始めましょう。
Ruffを使ったコードのフォーマット
以下のコードは、よくあるFizzBuzzの問題を解くものです。
今回は、fizzbuzz.py
というファイルを作成し、そのままコピー&ペーストしてみましょう。
for i in range(1,101): if i%3==0 and i%5==0: print("FizzBuzz") elif i%3==0: print("Fizz") elif i%5==0: print("Buzz") else: print(i)
しかし、たとえば変数と演算子の間に空白がなかったり、引数のカンマの後に空白がなかったりと、Pythonのコーディングスタイルにおいては、あまり好ましくない書き方になっています。
ここで、Ruffを使ってみましょう。
Ctrl + Shift + P(macOS:command + Shift + P)でコマンドパレットを表示します。
検索ボックスに「format」や「フォーマット」などと入力し、リストアップされる「ドキュメントのフォーマット」を選択します。
Tips
あるいは、エディタ画面で単にShift + Alt + F(macOS:Shift + Option + F)を押すことでも、同じ操作が可能です。ここで、「Configure Default Formatter」あるいは「既定のフォーマッタを構成する」が表示された場合、「構成...」「Configure...」を選択し、「Ruff」を選択します。

エディタの画面は変化したでしょうか? Ruffによって、次のようにコードのスタイルが自動的に整えられたはずです。
for i in range(1, 101): if i % 3 == 0 and i % 5 == 0: print("FizzBuzz") elif i % 3 == 0: print("Fizz") elif i % 5 == 0: print("Buzz") else: print(i)
また、この操作をせずに、保存時やペースト時に自動でコードフォーマットを整える設定も可能です。
詳しくは、こちらのドキュメントを参照してください。