Skip to content

ruff で import をソートする方法

問題

小さなプロジェクトで開発する際、設定ファイル(pyproject.toml など)がない状況で ruff を使って import 文をソートする必要があります。以下のように ruff format . を実行するとコードはフォーマットされますが、import 文のソートは行われません:

bash
ruff format .  # import ソートはされない

この状態で isort と同等の import ソート機能を ruff で実現する方法が必要です。

解決策

import をソートするには、ruff check コマンドで lint を実行する必要があります。具体的には以下の手順で操作します:

bash
# import をソートして修正
ruff check --select I --fix .

# その後でコードをフォーマット
ruff format .

コマンドの詳細

  • ruff check --select I --fix .

    • --select I: 「I」で始まるルール(import 関連)のみを対象に選択
    • --fix: 自動修正可能な問題を修正
    • .: カレントディレクトリの全ファイルを処理
  • ruff format . はソート後のコードを整形

重要: Ruff は現時点でフォーマット機能単体では import ソートをサポートしていません。公式ドキュメントには「import をソートするには linter を使用すること」と明記されています。

代替方法: 設定ファイル使用

プロジェクトに設定ファイルを追加可能な場合、pyproject.toml でソートルールを指定できます:

toml
[tool.ruff]
# import ソートを有効化
select = ["I"]

[tool.ruff.isort]
# isort 互換設定
known-first-party = ["my_project"]

設定後は単一コマンドで実行可能:

bash
ruff check --fix . && ruff format .

動作確認方法

ソート前:

python
import sys
import os
from datetime import datetime

ソート後 (ruff check 適用後):

python
import os
import sys
from datetime import datetime

注意点

  1. 実行順序: check → fix の後に format を実行(逆だとフォーマットが崩れる場合あり)
  2. プロジェクト規模: 大規模プロジェクトでは設定ファイル導入を推奨
  3. バージョン: Ruff 0.1.0以上で利用可能(pip install --upgrade ruff で更新推奨)

この方法で設定ファイルなしの環境でも isort 同等の import ソートを実現できます。