Pythonで開発するときのおすすめVSCodeプラグインと設定
はじめに
最近ちょっと環境構築し直すことがあったので、主に自分がVSCodeでPythonを使って開発するときの便利プラグインとか機能とか設定とかをつらつらと書いてゆきます。
バージョン管理とかパッケージ管理ツールには触れないのでお好みで。
最近はryeとuvが人気?
他に何か便利なツールとかこういう設定入れるといいよ!とかがあればぜひ。
Workspace
Workspaceは要するに1つ以上のフォルダを同時に開く機能です。
特にモノレポなんかだとバックエンドとフロントエンドが混在していたり、あるいは複数アプリが混在していて必要なフォルダだけ同時に開きたい、みたいなときにworkspaceとして保存しておくと便利です。
Profile
設定やプラグインをまるっと名前をつけて保存する機能です。
これを分けないと入れたプラグインが全環境で全部動くので大変重くなります・・・。
特に開発環境ごとに分けると便利です。
自分の場合は、Pythonを書くときはこのProfile、Reactを書くときはこのProfile・・・
みたいに分けています。
またWorkspaceで使っていたProfileは記憶されるので、次に開くときも最後に使用していたProfileが自動的に読み込まれます(超便利)。
プラグイン
Python
これが無いと始まらない。
Pylance
これも。
Python Debugger
これも。
Github
これも。
indent-rainbow
インデントがキレイ・・・ではなく見やすくなります。
Code Spell Checker
Typoしたときに指摘してくれます。
デフォルトは英語のみ。多言語用のパッケージがあります。
Flake8
Linter & formatter三種の神器。
最近はRuffもあるのでお好みで。
Black
同じく。
isort
同じく。
Formatting Toggle
一時的にフォーマッタ止めたいなってときにボタンでON/OFFを切り替えられるようになります。
Git Lens
blame見たり、PRに飛んで確認したり色々出来ます。
Error Lens
普段はカーソルを当てないと表示してくれない赤や黄色等のハイライト(ErrorとかWarnとか)の内容を行末に表示してくれるようになります。見やすい。
Docker
DockerDesktopでもいいですがこちらのほうが色々操作しやすいので。
Github Pull Request
一々ブラウザ開いてレビューとかPR作るのめんどいなーってときに使ってます。
IntelliCode
メソッドとか色々サジェストをしてくれます。
Copilotみたいにガバっとコード書いてくれるわけではないですが割と助かる。
IntelliCode API Usage Examples
このメソッドどうやって使うんだっけ?みたいなときにぱっと使い方を確認出来ます。
最近はIntellicode入れると自動ではいるかも?
Github Copilot
いわずもがな。
Thunder Client
割と使いやすかったので他のRestClientから乗り換えました。
APIの確認とかで便利。
Todo Tree
プレフィックス付けたコメントをまとめて確認出来ます。
わー、FIXMEがいっぱい~なんて感じに。
YAML
PythonだとYAMLを触ることも多いので。
Mypy Type Checker
Mypyを使うなら。
Django
Djangoを使うなら。django-templateは普通のHTMLと異なるのでシンタックスが効くと地味に嬉しいです。
Python Path
たまにサジェストに出ないものがあるときに直接クラスやモジュールからパスをコピーしてこれます。
settings.json
profileで分けちゃうので基本はUserSettingsに書いてます。
プロジェクトが巨大になってきてから、VSCodeを開いて解析が走る数分が重くてしかたなかったのでpython.analysis
周りの設定で調整してました。
{
// general settings
"editor.suggestSelection": "first", // 最初の項目にフォーカスをあわせる
"editor.acceptSuggestionOnEnter": "off", // enterで選択するのをオフ(改行と被るので)
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.formatOnType": true,
"files.trimTrailingWhitespace": true, // 余計な空白を削除
"editor.accessibilitySupport": "off" // 音をオフに
"editor.inlineSuggest.suppressSuggestions": true,
// general plugins
"workbench.iconTheme": "vscode-icons",
"cSpell.language": "en,en-GB",
"cSpell.userWords": {
"django",
"Impl",
], // スペルチェッカーで無視する単語
"todo-tree.general.tags": [
"BUG",
"HACK",
"FIXME",
"TODO",
],
// python
"python.analysis.indexing": true,
"python.analysis.autoSearchPaths": true,
"python.analysis.autoImportCompletions": true,
"python.analysis.diagnosticMode": "openFilesOnly", // 解析が重くなるので開いているファイルに限る
"python.analysis.include": [
"piyo_app",
"test_utils",
], // extraPathsで追加するとかexcludeでも
"python.analysis.userFileIndexingLimit": 6000, // file数が膨大だと重くなるので制限
"python.analysis.packageIndexDepths": [ // デフォルトは深くまでインデックスしないのでよく使うやつだけ深くする
{
"name": "django",
"depth": 2
},
{
"name": "rest_framework",
"depth": 2
},
{
"name": "fastapi",
"depth": 2
},
],
"flake8.args": [
"--max-line-length=120",
"--enable=W0614",
"--ignore=E231"
],
"black-formatter.args": [
"--line-length=120",
"--skip-string-normalization"
],
"python.testing.pytestEnabled": true, // pytestをON
// formatter and style
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.tabSize": 2 // 地味にタブサイズが4とかになるので
},
"[html]": {
"editor.tabSize": 2
},
"emmet.includeLanguages": {
"django-html": "html", // django-htmlはhtmlと見なすッ
},
"editor.inlineSuggest.enabled": true,
"git.confirmSync": false,
"githubPullRequests.pullBranch": "never",
"githubPullRequests.fileListLayout": "tree",
"files.associations": {
"*.html": "html"
},
"git.autofetch": true,
}
launch.json
これはdjango用ですが、たまにライブラリの中でそもそもどうなってるのか見たいことがあるので、justMyCode
をfalseにしておくとライブラリ等でbreakpointが張れるので便利です。
{
"name": "Python: Django",
"type": "debuggy",
"request": "launch",
"args": ["runserver", "0.0.0.0:8000"],
"django": true,
"justMyCode": false, // ライブラリなどのコードにBreakPointを張れるようになる
"env": {"PYDEV_WARN_EVALUASTION_TIMEOUT": "300"}
}
Omake
direnvとvenvで環境をクリーンにする
割とプロジェクト内でバージョンを切り替えて作業することもあるので、direnvとpyenvを組み合わせてバージョン変更した場合にvenv環境も切り替わるようにしています。
以下のように.envrcに指定しておくと、pyenv local 3.12
とか打って新しくシェルを立ち上げると3.12で新しくvenv環境が作られて切り替わります。
Pythonのバージョンを上げるときなどに環境を汚染せずに切り替えられるので結構便利です。
layout pyenv `cat .python-version`
Discussion