VSCode×Pythonのおすすめ拡張機能・設定集【完全保存版】

# はじめに
この記事はNuco Advent Calendar 2024の19日目の記事です。

:::note info

弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています！興味をお持ちいただける方は、[こちら](https://www.recruit.nuco.co.jp/?qiita_item_id=fe06c815bb776737e94a)まで。
:::

本記事では、VSCodeでPythonを効率よく書くために最初に導入すべき機能について紹介します。
ある程度定番化したと思われるおすすめツール群とその特徴、およびVSCodeのレイアウトに関する設定を紹介していきます。
これからVSCodeでPythonを利用した開発を始めたい人はもちろん、ある程度ご経験のある人にもプラスになる情報がきっとあるため、ぜひ参考にしていただけると嬉しいです。

# 拡張機能
ここではおすすめの拡張機能を紹介します。
前提として、Python本体の拡張機能を入れる必要があります。

## Linter, Formatter
### [Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff)
PythonのLinterとしてはFlake8、コード整形ツールとしてはBlack、importのsortingはisortが主流ではありますが、これら全てを兼ね備えているのがRuffです。
Rustで開発されているRuffは上記既存のツールよりも動作が数十倍早いとされており、設定も一括で行えるため現在はこちらの導入を進めているケースも多いのではないでしょうか。

導入にあたって、VSCodeの`settings.json`へは以下の項目を追加します。
```json
{
    "[python]": {
        "editor.codeActionsOnSave": {
            "source.fixAll": "explicit",
            "source.organizeImports": "explicit"
        },
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.formatOnSave": true
    },
    "ruff.lint.args": [
        "--config=ruff.toml"
    ],
    "ruff.format.args": [
        "--config=ruff.toml"
    ]
}
```
前半はVSCodeの挙動や設定について、後半はRuff自体の挙動についての設定になります。
Ruff自体の挙動についてはさらに、ここで指定した`ruff.toml`を同じ階層に作成して設定します。
デフォルトでは[こちら](https://docs.astral.sh/ruff/configuration/)の設定通りになっていますので、無視させたいディレクトリ名などお好みで設定しましょう。

## 型チェッカー
### [Mypy Type Checker](https://marketplace.visualstudio.com/items?itemName=ms-python.mypy-type-checker)

Pythonのコードを型チェックしてくれるライブラリです。公式ドキュメントは[こちら](https://docs.pytest.org/en/stable/)。
mypyは型ヒントをもとに型チェックを行うため、型ヒントを書く習慣をつけるのにも有用です。

ただ、あまりルールを厳しくしてしまうとそれはそれで体験が悪いので、
```json
"mypy-type-checker.args": [
    "--disallow-untyped-defs"
]
```
このように`settings.json`に設定するのがおすすめです。こちらは返り値や引数に型が書かれているかどうかをチェックする設定になります。
他の設定も上記拡張機能ページのSettingsの欄に記載されているので、個人やチームのお好みで設定してみてください。

## テストツール

### Pytest
Pythonのテストツールとしてはこちらが最も標準的なのではないでしょうか。
[Python Test Explorer for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=LittleFoxTeam.vscode-python-test-adapter)を導入するとVSCode上でテスト・デバッグを簡単に行えるようになるのでおすすめです。

## その他便利な拡張機能

### [autoDocstring - Python Docstring Generator](https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring)
爆速でdocstringを生成してくれる拡張機能です。
![スクリーンショット 2024-11-29 18.52.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/e8b96655-4621-8f2d-78d2-4d3234cc05f7.png)

三点引用符などを3つ入力して予測で表示されるGenerate Docstringを叩けば気持ちよくdocstringが作成されます。
mypyで型ヒントを作成し忘れないようにしておけば、こちらで作成したdocstringにも引数の型が自動で転記されるのでコンボ感があります。

### [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
![スクリーンショット 2024-11-29 18.54.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/b8082831-38e6-b2dd-3e21-f8421d60d2fb.png)
指が知らず知らずのうちに思っていたのと違うキーを叩いてしまっていた…そんな経験、誰しもありますよね。
この拡張機能を入れることでそういった事故を防ぐことができます。
コードを読んだ人からひと笑い取るだけならいいですが、気づかずにエラーを引き起こしてしまうと目も当てられません。

### [GitLends](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
VSCode単体でもファイルの差分を確認することはできますが、こちらの拡張機能を利用することで
- 過去のコミットでの変更履歴
- ファイル単位での変更履歴

などが確認できるようになります。
過去のコミットでどのようなファイルにどのような変更が加えられたのか確認したい時や、特定のファイルがどのような経緯でその状態に至ったのかを確認したい時に便利です。

### [Error Lends](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens)
![スクリーンショット 2024-11-29 19.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/05071fa9-23b3-3199-be9c-1a6ce5b2cea6.png)
このように、波線の内容を表示してくれるようになります。
ご覧の通りSpell Checkerとのコンボでより快適なコーディングが行えるようになりますが、怒られすぎて鬱陶しくなる時もあります。やろうと思っていたことを指摘されるとちょっとむかつきますよね。

### [indent-rainbow](https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow)
今までのスクリーンショットで、なんかインデントに色ついてるな？と思った方もいらっしゃるのではないでしょうか。それです。
階層が見やすくなって便利です。
ちなみに、`settings.json`で`workbench.colorCustomizations`を使用して同じようなことも再現できます。
こちらは空の改行にも色がつくようになりますが、個人的には後述の拡張機能のこともあり空の改行には何も表示されないほうが助かるので、indent-rainbowを利用しています。

### [Trailing Spaces](https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces)
![スクリーンショット 2024-11-29 19.16.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/df6a2108-1a37-89f7-12c9-2b956324ad39.png)

こちらが後述の拡張機能です。
このように空の改行や末尾に余計なスペースがある場合、それを可視化してくれます。
こちらの表示を優先するほうが個人的には好みです。

### [Blockman - Highlight Nested Code Blocks](https://marketplace.visualstudio.com/items?itemName=leodevbro.blockman)
![スクリーンショット 2024-11-29 19.20.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/3f33c789-e313-70e0-5024-e07648186e81.png)

画面は多少ごちゃつきますが、ネストされたコードブロックが見やすくなります。
現在カーソルがあるブロックは別の色で囲われるようになります。
便利だなあ〜と言う気持ちと、ごちゃごちゃしてるなあ〜という気持ちになります。

### [TODO Highlight](https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight)
![スクリーンショット 2024-12-03 9.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/fd904713-1081-48ee-18a4-e58fe32fc77c.png)

TODO や FIXMEが見やすくなります。
ちょっと眩しいですがデフォルトカラーが可愛いです。もちろん色は変更可能です。

### [vscode-icons](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons)
![スクリーンショット 2024-12-03 16.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/93398062-1be0-c306-34d8-f3b9e6784681.png)

この拡張機能はPythonに限った話ではありませんが、入れると入れないとでは見やすさが段違いなのでおすすめです。

### [Rainbow CSV](https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv)
![スクリーンショット 2024-12-03 16.51.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/740f630e-a960-954b-43d3-a4bdff556280.png)
見やすい！きれい！
Pythonを使う場合csvを開きたくなることもあると思うのですが、色でカラムを判別できるので視認性が高くて便利です。

### [Edit CSV](https://marketplace.visualstudio.com/items?itemName=janisdd.vscode-edit-csv)
![スクリーンショット 2024-12-03 17.02.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/2dfab59a-c7a7-4c14-ef27-20f5062d2660.png)
簡易的にではありますがCSVの編集が行えます。Rainbow CSVで編集箇所のアタリをつけて、こちらでちょっとした編集を行うのがおすすめです。

### [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced)
数式をレンダリングしたり、パスを通してコードブロックのコードを実行できるようにしたり、外部ファイルを読み込んで表示したりできます。
詳しくは[こちら](https://shd101wyy.github.io/markdown-preview-enhanced/#/ja-jp/)のドキュメントに解説が載っています。

# VSCodeの設定
こちらは作業効率を少しずつ上げてくれるであろう、VSCode自体の設定編です。
[公式ドキュメント](https://code.visualstudio.com/docs/getstarted/settings)に全ての設定が載っていますが…項目が多すぎますね。日が暮れます。
挙がっていないもので、この設定おすすめ！というものがあればコメントで教えていただけると嬉しいです。
なお、こちらの設定は`settings.json`を変更することで編集可能です。
(`settings.json`の開き方は[こちら](https://qiita.com/y-w/items/614843b259c04bb91495))

## カラーテーマ
最近ギャルの使うVSCodeのテーマの記事が投稿されてましたね。自分だけの最強のギャル、作り出していきたいものです。

カラーテーマは大きく分けて黒系か白系の二つがあり、その中でさらに何色に寄った背景色をベースにしているか、という違いがあります。

以下、おすすめのカラーテーマです。

### [GitHub Theme](https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme)
![スクリーンショット 2024-12-09 10.34.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/3cc22493-5ecc-dab9-a8ea-75b82d996cb3.png)


定番カラーテーマその1。GitHubのコードプレビューの配色でコードを見ることができます。
上のようなダークテーマのほかにも白基調のテーマもあるので、GitHubの見た目が好きな人にはおすすめ。

### [Ayu](https://marketplace.visualstudio.com/items?itemName=teabyii.ayu)
![スクリーンショット 2024-12-09 10.33.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/835bb11e-3c34-b574-b6da-615fef083513.png)

なんとなく定番のような気がするテーマその2。使っている人も多いのではないでしょうか。
GitHubと比べてより多くの色分けがされているのと、どことなく目に優しい配色(な気がする)。
自分のおすすめは`Ayu Mirage`です。(上記画像配色)

### [Noctis](https://marketplace.visualstudio.com/items?itemName=liviuschera.noctis)
![スクリーンショット 2024-12-09 10.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/d7a85f26-5ce5-462f-6f22-f367744e1d92.png)

上記2つほどではないが人気のテーマ。個人的にはこちらの`Noctis Azureus`が可愛くて好きです。
でも引数と変数名が同じ色なのが気になる…気になりませんか？気になってきましたよね。

…以下、気にならない人は次の項目まで飛ばしてください。

---

拡張機能の各テーマは、`settings.json`に行う色の設定を代わりにやってくれているという状態のため、逆にこちらから色を指定して上書きすることも可能です。

検索バーで`Developer: Inspect Editor Tokens and Scopes`を選択すると、

![スクリーンショット 2024-12-11 18.56.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/1fe74137-6d9f-ea04-d9db-aef144253868.png)

このように、各要素のスコープを調べることができます。
4つ並んでいるうち一番上が最も具体性の高いスコープのため、一番上が設定されてなければ二番目の設定が適用される、といった仕組みになっています。

![スクリーンショット 2024-12-11 18.58.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/d6cfc077-8e60-a7b0-982c-b76044c66cb3.png)

変数名は`source.python`を設定することによって変更できるため、

```
    "editor.tokenColorCustomizations": {
        "[Noctis Azureus]": {
            "textMateRules": [
                {
                    "scope": [
                        "meta.indexed-name.python",
                    ],
                    "settings": {
                        "foreground": "#5addc5"
                    }
                },
                {
                    "scope": [
                        "source.python",
                    ],
                    "settings": {
                        "foreground": "#d0d25d"
                    }
                }
            ],
        }
    },
```
このように`settings.json`に書き加えることで、

![スクリーンショット 2024-12-11 19.02.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/e18a8007-79d3-4731-e268-21a340c1f715.png)

変更したい箇所の文字色を変更し、カラーテーマを自分好みに変更することができます。


## フォント
フォントに関しては(Macの方は)あまり設定する必要もないかと思うのですが、人によって見やすくなったり見づらくなったりすると思うので、お好みで設定してください。
単純な文字の造形もそうですが、言語による文字幅が異なったりするため英語と日本語を並べるとパッと見たときのレイアウトの印象が異なります。
ここでは、さまざまなところで言及されている著名な日本語対応フォントをいくつかご紹介します。

### [Source Han Code JP](https://github.com/adobe-fonts/source-han-code-jp/releases)
![スクリーンショット 2024-12-16 18.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/b32d1249-2e5c-47ed-a097-a1425a0f04a7.png)

Adobeによるフォント。数字がカワイイ
文字幅は広め。(個人的にはもうちょっと幅狭のほうが…英字幅の間延び感…)
### [PlemolJP](https://github.com/yuru7/PlemolJP/releases/tag/v1.7.1)
![スクリーンショット 2024-12-16 18.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/c1cd4f9d-38f2-d0bc-d147-eba5efae9b17.png)


IBMが公開したフォントを[こちらの方](https://qiita.com/tawara_/items/0a7b8c50a48ea86b2d91)が手を加えて作成されたフォント。
なんとなく英字に洋ゲー感がある気がします。伝わりますか？

### [UDEV Gothic 35JPDOC](https://github.com/yuru7/udev-gothic/releases/tag/v2.0.0)
![スクリーンショット 2024-12-16 18.34.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/1489d51a-b85a-cd8f-da29-b888a26e2248.png)

こちらも上と同じ方が作成されたフォントです。
3:5幅版のほうが好みなのでそちらを紹介させていただいています。

## その他settings.jsonの設定

### キャレットの点滅
![画面収録 2024-12-13 17.24.18.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/53e08113-ee18-7666-8807-bf73cc83f201.gif)

```
"editor.cursorBlinking": "phase"
```
デフォルトでは「パッ　パッ」という点滅の仕方だと思いますが、
こちらは「ふわ…ふわ…」という感じで気分が良いです。
GIFなので点滅がゆっくりになってしまっていますが、実際はもう少し早いです。

### キャレットの移動アニメーション
![57059-spn77.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/f725f1c3-3ed6-fc67-aff8-9c3ee598ead3.gif)


```
"editor.cursorSmoothCaretAnimation": "explicit"
```
デフォルトは特にアニメーションがありませんが、設定すると移動するカーソルの軌跡が見えるようになります。
間違ってクリックしたときなど、どこに飛んだのかわかりやすくなります。

### エクスプローラーのインデントサイズ、ガイド
![スクリーンショット 2024-12-13 17.40.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/60715c68-043b-f4c3-06b0-215dfb3b4a80.png)
```
"workbench.tree.indent": 12,
"workbench.tree.renderIndentGuides": "always"
```
階層が深いプロジェクトは12くらいが良いです。階層浅ければ20くらいまで上げると見やすい気がします。
また、こちらはコードと違って色がついていないので、ガイドがあると見やすいと感じます。
ちなみに、このように[カスタムCSSを利用することでエクスプローラの階層も色分けすることも可能](https://github.com/yarnaimo/vscode-explorer-colorizer)です。

### ウィンドウタイトルを消す
![スクリーンショット 2024-12-13 17.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/543e5f1b-dcf3-ab16-2738-ff00f0d3f685.png)
```
"window.title": " "
```
検索バーが虫眼鏡マークだけになり気分がいいです。すっきりしてるのが好きな人におすすめ。

### インデントガイドを消す
![スクリーンショット 2024-12-13 17.49.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/06e3a6f6-5583-fb67-f76a-139ac63de57b.png)

```
"editor.guides.indentation": false
```
実は今までずっとこれがfalseになっていました。
拡張機能でインデントに色をつけたので無くすと気分がいいです。
…が、これもあった方がいいという人もいる気がします。お好みです。

### カーソルを棒ではなくブロックに
![スクリーンショット 2024-12-13 17.50.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/67e9585e-7591-2c84-00cd-8ff36922d8c9.png)

```
"editor.cursorStyle": "block"
```
見やすくはなりますが、文字の上にカーソルがあるときの体験が微妙な気もするのでお好みです。

![スクリーンショット 2024-12-13 17.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932501/9a9c9fd8-f10c-b376-a2f1-8a0756ab46eb.png)
(文字の上にある場合の様子)

---

現在自分が使用している設定のみを紹介させていただきましたが、他にもスクロールバーを隠したり、ミニマップを消したり、サイドバーを左右逆にさせたり…自分の好みに応じてレイアウトをどんどんいじることができます。
こういう設定、いじりはじめると終わりはありませんが…ふとした息抜きに調べてみるのも楽しいです。

# おわりに
本記事では、VSCodeを利用したPythonでの開発で用いられるツールについて、用途ごとに解説してきました。
こういったツールは日々ベストプラクティスが変化していきますが、特にLinter, Formatterに関してはこの一年でだいぶ様相が変化したと思います。

なお、Ryeやuvなどのパッケージ管理ツールに関してはこれだ！というデファクトスタンダードが確立されていない状態だと感じているため、本記事ではあえて定番化されているもののみを紹介させていただきました。
(uvに集約されていく気配を感じますが…)

他にもこんなツールが便利だというアドバイスがございましたら、ぜひコメントいただけると嬉しいです。

:::note info

弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています！興味をお持ちいただける方は、[こちら](https://www.recruit.nuco.co.jp/?qiita_item_id=fe06c815bb776737e94a)まで。
:::