Ruffとは
Rustで書かれたPython向けのLinter兼Formatterです。LinterとFormatterについては以下の記事に分かりやすくまとめられていたため、ぜひご確認ください。
メリット
Ruffには以下のようなメリットがあります。
動作が高速
Rust製ということもあり、従来の静的コード解析ツールと比べてかなり高速です。
ツールを一つにまとめられる
従来はLinterにFlake8、FormatterにBlack、Import sortingにisortというように、目的に合わせて別のツールを導入しなければなりませんでした。Ruffはこれらの役割をすべて担うため、他のツールを導入する必要がありません。
導入と使用
VSCodeを用いてRuffを導入し、簡単なPythonコードを書いてみましょう。
1. 拡張機能のインストール
VSCodeの拡張機能が公式から提供されているためインストールします。
https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff
2. setttings.jsonの設定
{
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit" // コード保存時にimport行を整理
},
"editor.defaultFormatter": "charliermarsh.ruff", // FormatterにRuffを使用
"editor.formatOnSave": true // コード保存時にフォーマットを実行
}
}
settings.jsonを記述後、一度VSCodeを再起動しておきましょう。
3. pyproject.tomlの設定
[tool.ruff]
select = ["ALL"]
ignore = [
"D", # Docstringを書かなくてもよいようにする
"T201", # 'print()'を使えるようにする
]
pyproject.tomlにはRuffを使う上でのルールを記述します。selectには適用するルールを、ignoreには除外するルールを記述します。今回はselectに"ALL"
を指定して全てのルールが適用されている状態(最も制約が厳しい状態)にし、その中から除外しておきたい項目をignoreに指定するという形式をとっています。(デフォルトの設定はこちらを参照)
4. Hello, World!
それでは簡単なPythonコードを書いてみましょう。
def hello() -> None:
print('Hello, World!')
if __name__ == '__main__':
hello()
hello.pyを新たに作成後、上記のコードをコピペしてみましょう。「ダブルクォーテーションが望ましいがシングルクォーテーションが使われている」といった旨の警告が出ていれば、正しくRuffの設定が適用されている証拠です。ここで、警告箇所を修正したいところですが、一旦無視しておいてください。
他に問題がなければ、コピペしたコードを保存してみましょう。設定が正しく適用されていれば、以下の変更が自動で行われるはずです。
- シングルクォーテーションがダブルクォーテーションになる
- helloメソッドとif文の間の空行が2行になる
このように、RuffはFormatterの機能を兼ね備えているため、自動で体裁を整えてくれます。また、フォーマットの機能とは別に、Linterによる警告であっても軽微なものであれば自動で修正してくれます。
おわりに
いかがだったでしょうか。現在もRuffの開発は活発に行われており、まだまだ不完全な部分もあります。とはいえ、現時点でかなり完成度は高く、十分実用に値すると考えています。今後の動向も楽しみですね。