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 ソートを実現できます。