💬

Pythonのコードをformatterのblackで整える

2023/03/12に公開

背景

Puthonのコードをキレイに整形してくれるblackを使ってコードを整えてみました。

https://github.com/psf/black

下記の記事にあるように、black以外にも使えそうなものはありますが、blackが結構メインで使っているところが多くなってきていそうな雰囲気があります。ただし、名前が黒と同じなのでややこしい。

https://zenn.dev/naiq112/articles/df1b32fc08d383

環境

機種 : MacBook Pro 2021(M1 Max)
python version : 3.9.16
pip version : 22.0.4
black version : 23.1.0

色々試したリポジトリ

https://github.com/katsuya-n/python_black

インストール

pip installするだけで完了します。

https://black.readthedocs.io/en/stable/getting_started.html#installation

$ pip install black

使ってみる

簡単なfizz_buzzのプログラムを作成します。python fizz_buzz.py 3のように入力するとBuzzと表示されます。
これをわざとらしく汚いコードにして、blackで整形できるか確認します。

fizz_buzz.py
import sys

args = sys.argv
input =   int(args[1])

if (input % 15 == 0):
    print("Fizz Buzz")
elif (input
      %
      3
      ==
      0
):
    print("Fizz")
elif (input % 5 ==
      0):
    print("Bu" +
          "zz")
else:
    print       (input)
$ black .
reformatted /root/fizz_buzz.py

All done! ✨ 🍰 ✨
1 file reformatted.

整形が完了すると、ケーキが表示されます。
ソースコードを見てみると、以下のように整えられてました。

fizz_buzz.py
import sys

args = sys.argv
input = int(args[1])

if input % 15 == 0:
    print("Fizz Buzz")
elif input % 3 == 0:
    print("Fizz")
elif input % 5 == 0:
    print("Bu" + "zz")
else:
    print(input)

CIに組み込む

やり方はいくつかありますが、GithubActionsを使っている場合は、下記のドキュメントが参考になります。

https://black.readthedocs.io/en/stable/integrations/github_actions.html

name: CI

on:
  pull_request:

jobs:
  CI:
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - uses: actions/checkout@v3
      - uses: psf/black@stable
        with:
          src: "./"

整形できていない場合は、以下のようにエラーになります。

--- /home/runner/work/python_black/python_black/fizz_buzz.py	2023-03-12 08:17:34.312592 +0000
Oh no! 💥 💔 💥
+++ /home/runner/work/python_black/python_black/fizz_buzz.py	2023-03-12 08:17:39.463405 +0000
1 file would be reformatted.
@@ -1,20 +1,13 @@
 import sys
 
 args = sys.argv
-input =   int(args[1])
+input = int(args[1])
 
-if (input % 15 == 0):
+if input % 15 == 0:
     print("Fizz Buzz")
-elif (input
-      %
-      3
-      ==
-      0
-):
+elif input % 3 == 0:
     print("Fizz")
-elif (input % 5 ==
-      0):
-    print("Bu" +
-          "zz")
+elif input % 5 == 0:
+    print("Bu" + "zz")
 else:
-    print       (input)
\ No newline at end of file
+    print(input)
Error: Process completed with exit code 1.

https://github.com/katsuya-n/python_black/actions/runs/4396516409/jobs/7699007862

GithubActionsを使っていない場合は、--checkオプションを入れると整形できてない場合にエラーになるので、これをCIに組み込むと良さそうです。

$ black --check .
would reformat /root/fizz_buzz.py

Oh no! 💥 💔 💥
1 file would be reformatted.

感想

Python書いてるなら入れない理由はないです。

株式会社ゆめみ

Discussion