VSCodeでPythonフォーマッターを設定してみた

2023/07/24に公開1

はじめに

VSCodeの拡張機能のBlack Formatterを利用してPythonのコードにフォーマットをかけることができます。拡張機能と設定方法は作成しないとすぐ忘れるため、今回はBlack Formatterと設定方法について共有したいと思います。

私はVSCodeでは主にHTML、CSS、JavaScript関連修正をしますので、フォーマッターはPrettierを使ってます。最近、Pythonで簡単なスクリプトを作成する時にVSCodeを使ってますが、Prettierが認識できませんでした。なので、Prettier用のPluginがあるか調査してみました。

plugin-python

PrettierのPluginとしてPython関連を見つけました。
https://github.com/prettier/plugin-python
しかし、このリポジトリは2019年10月2日以降メンテナンスされてないでした。そのページを見るとBlackというライブラリをおすすめしてます。

Python Code Formatter

Prettierから支援してくれないことを確認しましたので、他のフォーマッターを調査してみました。まずは、VSCodeを利用するため、どのような拡張機能があるか確認しました。
https://code.visualstudio.com/docs/python/editing#_formatting
上記のページを確認すると以下の二つのフォーマッターが拡張機能でありました。

PEP8とは?

二つのフォーマッターの内容を見るとをPEP8従ったという文言があるため、拡張機能を説明する前にPEP8について説明します。
https://peps.python.org/pep-0008/
PEP8はPython Enhancement Proposals#8の略です。Pythonコードを書くための公式スタイルガイドになります。Pythonコードの可読性と一貫性を向上するためのガイドラインみたいですね。
内容を見ると以下になります。

  • インデント:4つのスペースを使用することを推奨します。
  • 行の長さ:理想的には行を79文字に制限することを提案してるが、同意すれば最大99文字まで許可しています。
  • 空白行:使用する位置と使用しない位置をルール提供してます。
  • コメントアウト:コメントアウトについてルールを提供します。
  • 命名規則:変数、メソッド、関数、クラス、モジュール、その他の要素の命名規則をガイドラインを提供します。
    PEP8はガイドラインなので、一般的にPEP8を従う方が良いが、無条件的に従うよりチームで合意してプロジェクトに合わせる方を推奨してます。

Autopep8

拡張機能ページは以下になります。
https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter
ライブラリのページは以下になります。
https://github.com/hhatto/autopep8
autopep8は、PEP8スタイルガイドを従ったPythonコードを自動的にフォーマットするツールです。
Blackよりもうちょっと具体的に設定ができそうでした。

Black Formatter

拡張機能ページは以下になります。
https://marketplace.visualstudio.com/items?itemName=ms-python.autopep8
ライブラリのページは以下になります。
https://github.com/psf/black
Blackも同じくPythonコードを自動的にフォーマットするツールです。Blackに大体任せて細かい設定は出来なさそうでした。

VSCodeから設定する

上記の二つの拡張機能中どちらもライブラリをインストールしなくて拡張機能のみで動作できてるので、便利でした。でも、特定なバージョンを使用したい場合はPIPを利用してライブラリをインストールしてください。
インストールした後VSCodeの拡張機能の設定を変更しないといけないです。

Autopep8の場合

 "[python]": {
    "editor.defaultFormatter": "ms-python.autopep8",
    "editor.formatOnSave": true
  },

editor.formatOnSaveのオプションは保存する時に自動的にトリガーが走ってフォーマットしてくれるオプションなので、入れることを推奨します。いらないなら、削除してください。

Black Formatterの場合

 "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
  },

editor.formatOnSaveのオプションは保存する時に自動的にトリガーが走ってフォーマットしてくれるオプションなので、入れることを推奨します。いらないなら、削除してください。

最後に

フォーマッターは好みなので、プロジェクトとチーム員の合意があれば何でも良いと思います。
私はフォーマッティングについて好みが強くないし、勝手にやってくれることを好きなので、Blackにしました。
コードは一定的なルールと読みやすかった何でも良いと思います。
今までの説明が皆さんにも分かりやすく説明できていればと嬉しいです。

Discussion

Asagi7974Asagi7974

簡潔にわかりやすく説明いただき、とても助かりました!
ただ、Autopep8とBlack Formatterの拡張機能のリンクが逆になっています!