💬
Pythonのコードをformatterのblackで整える
背景
Puthonのコードをキレイに整形してくれるblackを使ってコードを整えてみました。
下記の記事にあるように、black以外にも使えそうなものはありますが、blackが結構メインで使っているところが多くなってきていそうな雰囲気があります。ただし、名前が黒と同じなのでややこしい。
環境
機種 : MacBook Pro 2021(M1 Max)
python version : 3.9.16
pip version : 22.0.4
black version : 23.1.0
色々試したリポジトリ
インストール
pip installするだけで完了します。
$ 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を使っている場合は、下記のドキュメントが参考になります。
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.
GithubActionsを使っていない場合は、--check
オプションを入れると整形できてない場合にエラーになるので、これをCIに組み込むと良さそうです。
$ black --check .
would reformat /root/fizz_buzz.py
Oh no! 💥 💔 💥
1 file would be reformatted.
感想
Python書いてるなら入れない理由はないです。
Discussion