ハカセノオト

moon indicating dark mode
sun indicating light mode

Python コードは Black を通して綺麗にしよう

December 20, 2021

株式会社ACCESS Advent Calendar 2021 12月20日の記事です。

あまり時間が取れず、小ネタとなります。

Black を使って、Python コードを綺麗にしましょうという記事です。

Black とは何か

Black is a PEP 8 compliant opinionated formatter with its own style.

(Ref: https://black.readthedocs.io/en/stable/the_black_code_style/index.html)

Python のフォーマッタです。適当に書いたコードを、整形してくれる便利なやつです。

PSF (Python Software Foundation) が開発しています。

PEP 8 に準拠したコードスタイルに整形します。PEP (Python Enhancement Proposal) 8 は、PSF によって作成された Python コードのスタイルガイドです。

現時点で Black は、まだ beta 版という扱いではありますが、多くの著名なライブラリでの利用実績があります。

pytest, tox, Pyramid, Django Channels, Hypothesis, attrs, SQLAlchemy, Poetry, PyPA applications (Warehouse, Bandersnatch, Pipenv, virtualenv), pandas, Pillow, Twisted, LocalStack, every Datadog Agent Integration, Home Assistant, Zulip, Kedro, and many more.

なぜ Black を使うのか

By using Black, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from pycodestyle nagging about formatting. You will save time and mental energy for more important matters.

Black makes code review faster by producing the smallest diffs possible. Blackened code looks the same regardless of the project you’re reading. Formatting becomes transparent after a while and you can focus on the content instead.

(Ref: https://black.readthedocs.io/en/stable/index.html)

ヒトが手動で整えていたコードスタイルのコントロール権を、フォーマッタに譲渡することになります。その見返りとして、コードスタイルに関する悩みから解き放たれて、コードスタイル以外の重要な課題解決のために時間と精神的エネルギーを節約できます。

コードスタイルに関するレビューをなくすことができます。 より、コードの内容に意識を集中させることができ、レビュープロセスを効率化することができます。

どうやって使うのか

インストール

pip install black

実行

カレントディレクトリ配下の .py ファイルを全てフォーマットする場合。

black .

jupyter notebook (ipynb ファイル) を整形することもできます

pip install black[jupyter]
black foo.ipynb

結論

Black を使って、コードを読みやすくして、開発とレビュープロセスを効率化しましょう。

おまけ

git hooks の設定

Git で管理しているプロジェクトディレクトリの .git/hooks/pre-commit ファイルに、下記のように設定しておくことで、commit 前に Black が自動実行されるようになります。

#!/usr/bin/env bash
black .

実行可能ファイルにしておかなければいけないことに注意が必要です。 実行可能ファイルにするために、下記のコマンドを実行します。

chmod +x .git/hooks/pre-commit

より高度に git hooks を管理したい場合は、Python 製の pre-commit や JavsScript 製の husky のようなツールを使うと良さそうです。

その他の Python フォーマッタ

Black 以外に、autopep8 や Google が出している yapf が有名なものとして挙げられます。

この記事では詳細な比較は扱いませんが、あとはプロジェクトごとの決めの問題かと思います。

参考


hnishi のブログ


技術系の記事など。
綺麗に書こうとすると続かない気がするので、割と雑に、備忘録的に書いていく方針。
内容に誤りがあった場合などのご連絡は、Twitter の DM などで頂けると幸いです。
※ 記事中の Amazon 商品ページへのリンクは Amazon アソシエイト・プログラムによるリンクを使用しています。