🐍

Pythonの自動フォーマッター「black」を入れようとしたら苦戦した話

2022/08/13に公開

blackとは何か

参考: もうPythonの細かい書き方で議論しない。blackで自動フォーマットしよう

  1. pythonのコードフォーマッター
  2. 自動的にPythonプログラムの書き方を修正してくれる
  3. PEP8のコード規約に準拠したフォーマッター
  4. 制限が多く、他人数でpythonのコードを書く際に統一された書き方ができる(メリット)

1. blackのinstall

適用させたいのはVScodeです。
拡張機能にBlack Fomatterというのがありますが、今回は使用しません。
また、Mac環境で進めていきます。

pip、もしくはbrewでインストールを行います。
pip3 install black
brew install black
どちらかお好きな方でインストールします。

2. VScodeのセットアップ

  • ゴールはVScodeで保存した際に自動で適用されること。
    setting.jsonに追加する内容を書いていきます。
    ※GUIで設定することも出来ます。

2-1. blackを適用させる

  1. "python.formatting.provider": "black",
    pythonのフォーマッターをblackに設定する

  2. "python.formatting.blackPath": "/opt/homebrew/bin/black"
    which blackでblackを使用する際のフルパスをチェックし、記述します。
    パスは各個人で違うと思われます。

2-2. 保存した際に自動フォーマット

"editor.formatOnSave": true,

2-3. pythonファイルのみに適用させる

setting.json
"[python]": {
    "editor.defaultFormatter": null,
  },

Prettierをデフォルトのフォーマッターとして設定している場合に必要になります。
(PrettierはPythonコードのフォーマットには対応していません)

2-4. 試してみる

保存しても適用されません...
フォーマットしたいディレクトリに移動して
black . を打つとフォーマットされます。
違う...そうじゃない...
と思いながらも、色々な記事を漁っていると、
VS Code上でPythonのコードフォーマッタが効かない時の対応方法を見つけました。

こちらのコードを適用されると保存した時に自動フォーマットされました!!
コードの中身を調べてみると、原因はlinterが適用されていなかったことが分かりました。

3. linter

3-1. linterの設定

"python.linting.enabled": true
こちらをsetting.jsonに記述すると...

無事保存した時に自動でフォーマットされました。

4. setting.json

最終的にblack用で設定するsetting.jsonは以下の通り

setting.json
  "python.linting.enabled": true,
  "python.formatting.provider": "black",
  "python.formatting.blackPath": "/opt/homebrew/bin/black",
  "editor.formatOnSave": true,
  "[python]": {
    "editor.defaultFormatter": null,
  },

Discussion