はじめに
Pythonはコードが汚くなりがち(個人的にそう思う)
そんなPythonくんを快適に書くための設定を紹介します。
拡張機能編
ここでは Pythonを書きやすくするため の拡張機能を紹介していきます。
1. Error Lens
before
「コード書いたけど、なんか波線出てるよ💦」
記述に問題があった場合、デフォルトでは波線が表示されるだけ。。。
after
Error Lensくんを入れることによって 波線だけでなくエディタに直接表示される。
はい、有能〜
2. indent-rainbow
before
Pythonくんは インデントでスコープを認識している。
for
の f
から下に線が伸びてるけど、ちょっと見にくいなぁ
after
3. Trailing Space
before
after
末尾にある無駄なスペースを可視化できる!
不要なものは消しましょうね〜
4. autoDocstring: VSCode Python Docstring Generator
三点引用符を使って関数などの説明を書くときにdocstringが自動生成される!!!
有能すぎぃ〜
基本設定編
ここでは VSCode自体の設定 を紹介します。
プログラミングをするに当たって必要になってくるものです。
Insert Final Newline
ファイルの保存時、最終行に改行を自動で入れてくれる機能
プログラミングしてるなら必須だよね〜
Trim Trailing Whitespace
不要な末尾の空白を自動で削除してくれる機能
↑で紹介した拡張機能「Trailing Space」の削除版
Pythonの設定編
ここでは Pythonを最低限綺麗に書くため の設定を紹介します。
自分はいつも flake8, black, isort, mypy を使用しています。
black
Pythonのフォーマッタである black
通常は black ファイル名
でコードの整形ができるが、VSCodeに設定すると自動整形することができる。
まずは black のインストールから
$ pip install black
次に、blackが実行できるか確認する。
テキトーにファイルを作る。
blackをかけてみる。
$ black black_test.py
reformatted black_test.py
All done! ✨ 🍰 ✨
1 file reformatted.
blackのコマンドのパスを確認する。
windowsの場合は、whichじゃなくてwhereかなー。
$ which black
/Users/macuser/Library/Python/3.9/bin/black
VSCodeの設定で black
と検索する。
Black Path に ↑で確認できたパスを入力する。
Black Args の Add Item を押して --line-length=79
を入力して OK を押す。
line-lengthを設定する理由としては、後述するflake8との競合を回避するため。
Pythonのコーディング規約で一行の文字数は原則79文字と決まっている。
79文字以上に設定する場合はline-lengthの値を変更すると良い。
特に指定がない場合はデフォルトの79文字に設定する方が良い。
次に python formatting provider
を検索する。
デフォルトで autopep8
になっている項目を black
に変えればOK
あとはファイルを整形前に戻して、右クリック。
Format Document (日本語の場合: ドキュメントのフォーマット)をクリックする。
整形処理をファイル保存時に自動で実行するように設定することも可能。
format on save
と検索し、チェックボックスにチェックをつける。
これでファイル保存時に自動でblackが実行されるようになる。完璧。
flake8
Pythonのリンター flake8
これもVSCodeで設定できるので紹介します。
まずはインストールから。
$ pip install flake8
実行してみる。
$ flake8 flake8_test.py
flake8_test.py:1:1: E265 block comment should start with '# '
flake8_test.py:5:2: E225 missing whitespace around operator
flake8_test.py:6:2: E225 missing whitespace around operator
flake8_test.py:7:2: E225 missing whitespace around operator
はい、沢山怒られている。
flake8のパスを確認する。
$ which flake8
/usr/local/bin/flake8
flake8 path
と検索して↑で出てきたパスを入力する。
次に flake8
で再検索をかけて、メッセージタイプの設定を行う。
flake8はあくまでリンターであるので、警告レベルにするために W, F, E 全て Warning
にすると良い。
そして、先ほどのファイルを見てみると、、、、
拡張機能編で紹介した Error Lens との相性がバツグンで、どこが汚いコードなのか一目瞭然。有能。
前述したblackの文字数を調整する場合は flake8 args
と検索をかけて Add Item をクリックし、--max-line-length の値を設定してあげる。
デフォルトでは79文字のため、black側で79文字に設定した場合は不要。
isort
importの順番はPythonのコーディング規約で決まっている。
import文 は常にファイルの先頭、つまり モジュールコメントや docstring の直後、そしてモジュールのグローバル変数や定数定義の前に置くようにします。
import文 は次の順番でグループ化すべきです:
- 標準ライブラリ
- サードパーティに関連するもの
- ローカルな アプリケーション/ライブラリ に特有のもの
上のグループそれぞれの間には、1行空白を置くべきです。
でもこれを考えてコードを書くのはめんどくさいので、isortというフォーマッタに任せてしまう。
とりあえず、インストール & パス確認
$ pip install isort
$ which isort
/usr/local/bin/isort
まずはテキトーなコードを書いていく。
flake8に「importしてるのに使ってねえじゃん」って怒られてるけど、サンプルなので まあいい。
isortの実行
$ isort isort_test.py
Fixing /Users/macuser/Desktop/isort_test.py
こいつもVSCodeで設定していくぅ
isort path
と入力して↑で確認したパスを入力する。
とりまこれでOK
次に保存時に自動で実行される設定をする。
code action on save
と検索をかけ、一番上に出てきたEditorの設定の Edit in settings.json をクリック。
設定のjsonファイルが開かれるので、editor.codeActionsOnSave のキーに以下を追加する。
{
"source.organizeImports": true
}
最終的にこのようになっていればOK
...
"python.sortImports.path": "/usr/local/bin/isort",
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
これで 保存時にisortが自動で実行される。かんぺきぃ。
mypy
mypyはPythonの型ヒントチェッカー
これはどちらかというと初心者向けではないが、あった方が綺麗(というか分かりやすい)コードが書けるのでよい。
型ヒントを知らない人は調べてください。より良いコードが書けるので。
とりま、インストールして、パスの確認
$ pip install mypy
$ which mypy
/usr/local/bin/mypy
同じように mypyの設定をしていくぅ!
mypy path
で検索をかけて、パスを入力する。
メッセージレベルは information でいいかなって感じ。
mypyにひっかかってもコード自体に問題はないし、規約に反してるわけでもないので。
ここまで設定できれば、とりあえず型チェックが効く。
aという変数に文字列入れたのに、数字入れるなよってmypyさんに怒られてる図
あとは mypy args
で色々チェック方法をカスタムできるよ〜
自分の設定を晒しておく。
引数 | 説明 |
---|---|
--warn-return-any | 返り値は正確に明示しないとユルサナイ |
--no-implicit-optional | 型を明示した変数に None を入れるのをユルサナイ |
--disallow-untyped-calls | 返り値が明示されていない関数を呼び出すのをユルサナイ |
--disallow-untyped-defs | 関数に返り値の型を明示しないのをユルサナイ |
--ignore-missing-imports | importしたライブラリ元に型明示がないのは仕方ないよね |
--follow-imports=skip | importしたライブラリの型チェックは行わないよ |
自分がPython書いてきて、↑の設定が自分に合ったものだった。
他にも色々設定できるので、見てみるといいかも〜
https://mypy.readthedocs.io/en/stable/command_line.html
以上が、black, flake8, isort, mypy の設定でした〜
それでは良いPythonライフを〜
付け足し
Pythonについての情報共有ができるLINEのオープンチャットを運営しています。
完全匿名で参加できるので、よろしければぜひ。
オープンチャット「Python」