Python, Djangoをきちんと使いたい_04: Black を入れてフォーマットをかける

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

皆さまこんにちは、ウチイダです。

時間を見つけてはDjango で中規模以上のアプリケーションを開発するための環境構築について調べています。

前回の記事はこちら。

ウチイダの作業環境は以下です。

  • Windows 11 21H2
  • WSL2 Ubuntu20.04
  • GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

以降の内容は、この環境にPython/Djangoの開発環境を導入していく手順メモとなります。

Blackで、フォーマッターの下の平等を実現する

コードスタイルの一貫性を保つのは、読みやすさを維持するために重要です。でも、コーディングルールをきちんと決めるのがまず大変だったりします。

また、コーディングルールを気にかけながらコードを書くのはつらいです。

こういうのはツールに頼ってしまいたい部分ですね。

今回はBlack を利用して、自動フォーマットをかけるところまでやってみたいと思います。

パッケージの導入

過去の記事に続いて、poetry でインストールしていきます。

$ poetry add --dev black
Creating virtualenv python-black-sample in /home/y-uchiida/develop/python-black-sample/.venv
The --dev option is deprecated, use the `--group dev` notation instead.
Using version ^23.1.0 for black

Updating dependencies
Resolving dependencies... (0.5s)

Writing lock file

Package operations: 6 installs, 0 updates, 0 removals

  • Installing click (8.1.3)
  • Installing mypy-extensions (1.0.0)
  • Installing packaging (23.0)
  • Installing pathspec (0.11.0)
  • Installing platformdirs (3.1.0)
  • Installing black (23.1.0)

これだけでセットアップ完了です!

CLIから実行する

black <修正対象のファイルパス> で、自動フォーマットを実行できます。

こんな感じで、みるからにガタガタなファイルを作って…

def main():	
      print("this"      +      "is"      +      'main')
      return            0

コマンドを実行!

(python-black-sample-py3.11) $ black format_test.py 
reformatted format_test.py

All done! ✨ 🍰 ✨
1 file reformatted.

以下のように修正されました。

def main():
    print("this" + "is" + "main")
    return 0

Black の特徴

基本的な使い方がわかったところで、Black について知っておきましょう。

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.

https://black.readthedocs.io/en/stable/

ざっくり意訳すると、Blackが提供するコードスタイルに従うことで、手作業でのフォーマットや、書式設定をしなくてよくなるよ!ということです。

コードスタイルにこだわりがある人はとっつきづらいかもしれませんが、チーム開発では自動で統一されるメリットは大きいですね。

ちなみに、設定ファイルでデフォルトから変更できるルールは、2023年3月時点では1行あたりの文字数だけです。

公式リポジトリのpyproject.toml にも、それしか設定項目がありません。

https://github.com/psf/black/blob/main/pyproject.toml

「妥協を許さないフォーマッター」というだけのことはあります。

VSCode のBlack 拡張機能

次はVSCodeでBlackを利用する場合の設定手順です。

設定といっても、拡張機能をインストールするだけでした。

VSCode用 Black 拡張機能

Black のパッケージをインストールしていなくても、この拡張機能を有効にすればOKです。

preview ってついているのが若干気になりますが、基本的な動作には問題なさそうでした。

拡張機能を入れただけだと、Blackのルールでフォーマットされないので、少しだけ設定を編集します。

@lang:python defaultFormatter で検索すると表示される項目を、Black Formatter に指定します。

Black Formatter をデフォルトに指定

また、 python.formatting.provider のデフォルトがautopep8 になっているので、 black を指定しておきます。

autopep8 から black に変更

また、ファイルの保存時にblack でフォーマットがかかるように、Format On Saveの設定も有効にしておきます。

Format On Save のチェックをオンにする

これで、VSCodeの設定は完了です!

スペースがガタガタなファイルを、VSCode で保存してみると、きっちりそろえてくれます✨

まとめ

導入するだけですぐに使えるフォーマッター、Blackのご紹介でした。

コードスタイル疲れのない、快適なPythonライフを送れそうです。

OSSでの利用数もすごく増えているようで、Blackに慣れておくといろいろなPython のコードが読みやすくなるかもしれません。

以上です。あなたのお役に立てると嬉しいです。

参考資料

https://nobunobu1717.site/?p=1845

https://nujust.hatenablog.com/entry/2022/07/24/114715

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*