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注意点
- 実行順序:
check → fixの後にformatを実行(逆だとフォーマットが崩れる場合あり) - プロジェクト規模: 大規模プロジェクトでは設定ファイル導入を推奨
- バージョン: Ruff 0.1.0以上で利用可能(
pip install --upgrade ruffで更新推奨)
この方法で設定ファイルなしの環境でも isort 同等の import ソートを実現できます。