Pythonの自動フォーマッター「black」を入れようとしたら苦戦した話
blackとは何か
参考: もうPythonの細かい書き方で議論しない。blackで自動フォーマットしよう
- pythonのコードフォーマッター
- 自動的にPythonプログラムの書き方を修正してくれる
- PEP8のコード規約に準拠したフォーマッター
- 制限が多く、他人数で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を適用させる
-
"python.formatting.provider": "black",
pythonのフォーマッターをblackに設定する -
"python.formatting.blackPath": "/opt/homebrew/bin/black"
which black
でblackを使用する際のフルパスをチェックし、記述します。
パスは各個人で違うと思われます。
2-2. 保存した際に自動フォーマット
"editor.formatOnSave": true,
2-3. pythonファイルのみに適用させる
"[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
は以下の通り
"python.linting.enabled": true,
"python.formatting.provider": "black",
"python.formatting.blackPath": "/opt/homebrew/bin/black",
"editor.formatOnSave": true,
"[python]": {
"editor.defaultFormatter": null,
},
Discussion