■ はじめに
Github Workflow で CI/CD を実装中だが、 PythonのLinter/Formatter についても実装してみようと思う。 PythonのLinter/Formatter については、過去、以下の関連記事で
https://dk521123.hatenablog.com/entry/2021/11/08/221219
調べたことがあったのだが、大分古くなったので、改めて調べてみた。 その中で「Ruff」が良さげだったので、深堀りしてみる
目次
【0】おさらい:これまで扱った Python の Linter / formatter 1)各ツール詳細 【1】Ruff 【2】インストール 【3】主なコマンド 1)ruff check - Linter 2)ruff format - Formatter 【4】Hello world 1)ruff check 2)ruff format 【5】その他の事項 1)設定 2)ルール 【6】Github Actionでの利用
【0】おさらい:これまで扱った Python の Linter / formatter
* 以下の関連記事では、以下の4つツールが良さそうってなっていた => ただ、今回紹介する「Ruff」は、All in Oneらしい、、、
Python を奇麗に書くためのツール群
https://dk521123.hatenablog.com/entry/2021/11/08/221219
より抜粋 ~~~~~~~~~~ * とりあえず、以下を入れとけばいいかなっと、、、 + black + flake8 + isort + mypy ~~~~~~~~~~
1)各ツール詳細
flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000
black ~ Python formatter ~
https://dk521123.hatenablog.com/entry/2021/11/10/095258
Static Typing linter ~ mypy ~
https://dk521123.hatenablog.com/entry/2022/07/19/000000
【1】Ruff
* 2022年リリースされたPython静的解析ツール * Rust製(なので圧倒的に高速) * All in one (Flake8/Black/isort/pydocstyle/pyupgrade/autoflake and so on) cf. Ruff (ラフ) = 切り札を使う
公式サイト
* パフォーマンス比較結果も見れる
https://docs.astral.sh/ruff/
Github
https://github.com/astral-sh/ruff
【2】インストール
Rust製って聞いてたから、ひょっとしたら簡単に入らないかもっと思ったら pip で簡単にインストールできた
https://docs.astral.sh/ruff/installation/
インストール例
$ pip install ruff $ ruff --version ruff 0.3.2
【3】主なコマンド
* 以下の項目以外でやりたいと思ったら、 ドキュメントより、help を使ってみた方がいい
1)ruff check - Linter
* Pythonのリンター(Flake8, isort, pydocstyle, pyupgrade, autoflake)
https://docs.astral.sh/ruff/linter/
ruff check hello.py ruff check .
--fixオプション
* 自動修正
https://docs.astral.sh/ruff/linter/#fixes
ruff check --fix hello.py ruff check . --fix
2)ruff format - Formatter
* Python コードフォーマット (Blackみたいな感じ)
https://docs.astral.sh/ruff/formatter/
# Format a single file. ruff format hello.py # Format all files in the current directory ruff format .
--diffオプション
* 差分表示のみ
【4】Hello world
1)ruff check
# デモ用のPythonコードを作成(違反内容は「1行に複数インポート」など) $ echo -e "import os, boto3\n\nprint('Hello World...')" > hello.py # コードチェック $ ruff check hello.py hello.py:1:1: E401 [*] Multiple imports on one line hello.py:1:8: F401 [*] `os` imported but unused hello.py:1:12: F401 [*] `boto3` imported but unused Found 3 errors. [*] 3 fixable with the `--fix` option. # 「[*] 3 fixable with the `--fix` option.」って言ってるのでやってみる $ ruff check --fix hello.py Found 3 errors (3 fixed, 0 remaining). # 確認 $ cat hello.py print('Hello World...') # 使っていない import 文が消えている
2)ruff check
# Pythonコード生成 $ echo -e "import os, boto3\n\nprint('Hello World...')" > hello.py # 差分表示のみ $ ruff format --diff hello.py --- hello.py +++ hello.py @@ -1,3 +1,3 @@ import os, boto3 -print('Hello World...') +print("Hello World...") 1 file would be reformatted # フォーマッタ実行 $ ruff format hello.py 1 file reformatted # 同じファイルを作ってみる $ echo -e "import os, boto3\n\nprint('Hello World...')" > hello_src.py # 差分比較(「'」が「"」に変更) $ diff hello_src.py hello.py 3c3 < print('Hello World...') --- > print("Hello World...")
【5】その他の事項
1)設定
* 変更したくなったら、以下を参照
https://docs.astral.sh/ruff/configuration/
2)ルール
* 700以上あるらしい、、、
https://docs.astral.sh/ruff/rules/
【6】Github Actionでの利用
* 以下の関連記事を参照のこと
Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624
参考文献
https://gihyo.jp/article/2023/03/monthly-python-2303
https://qiita.com/ciscorn/items/bf78b7ad8e0e332f891b
https://qiita.com/yuji38kwmt/items/63e82126076204923520
https://dev.classmethod.jp/articles/python-ruff/
関連記事
Python を奇麗に書くためのツール群
https://dk521123.hatenablog.com/entry/2021/11/08/221219
flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000
black ~ Python formatter ~
https://dk521123.hatenablog.com/entry/2021/11/10/095258
Static Typing linter ~ mypy ~
https://dk521123.hatenablog.com/entry/2022/07/19/000000
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ エラー処理 / continue-on-error ~
https://dk521123.hatenablog.com/entry/2024/01/01/232057
Github Actions ~ サンプル集 ~
https://dk521123.hatenablog.com/entry/2023/12/31/231438
Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624
Github Actions ~ SQL Linter ~
https://dk521123.hatenablog.com/entry/2024/03/04/180308