【2023最新版】VSCode Python setting.jsonの更新が億劫なあなたへ

## 概要

皆さんPythonのプログラミングをVSCode(Visual Studio Code)で行っている際に、以下の画像のようなポップアップを目にしたことはないでしょうか。

![Snag_24242cb3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192873/223029a0-27f3-fa49-88d3-c60f736137e4.png)

簡単に言うと、setting.jsonに記載しているPythonのリンターやフォーマッターの設定が非推奨になったので更新してね、ということです。
以下のページへのリンクがあり、リンク先には丁寧な解説があるのですが、詳細な手順はないので、いつか更新しよう、と先延ばしにしている人も多いのではないでしょうか。(私もその一人です。。。。)
[Migration to Python Tools Extensions](https://github.com/microsoft/vscode-python/wiki/Migration-to-Python-Tools-Extensions#alternatives)

自分を含めたそんな人のために、じゃあ具合的に何をどうすればいいんや！というのをまとめました。
参考にして頂ければ幸いです。

## リンターにpylintをお使いの場合

これまではsetting.jsonに以下のように記載していたかと思います。

```:setting.json(抜粋)
{
    "python.linting.pylintEnabled": true,
    "python.linting.pylintPath": "パス情報(未設定の場合もあります)"
}
```

上記の記載自体が非推奨になりました。
なので削除します。
代わりに以下の拡張機能をインストールします。
[Pylint](https://marketplace.visualstudio.com/items?itemName=ms-python.pylint)

ステータスはまだPreviewですが特に問題なく使えます。

### 豆知識

従来はpipでpylintをインストールする必要がありました。
しかし、VSCodeの拡張機能をインストールする場合、pipでpylintのインストールが不要になります。
逆に言うと、pipでpylintがインストールされている場合、デフォルト設定ではVSCode拡張機能がインストールしたpylintが利用されます。
これは、デフォルトで以下の設定になっているからです。

```:setting.json(抜粋)
{
    pylint.importStrategy: "useBundled"
}
```

当方の環境では以下のバージョンのpylintが利用されているようです。(2023-11-12現在)

```
2023-11-12 15:29:26.818 [info] 
pylint 3.0.2
astroid 3.0.1
Python 3.9.6 (default, Jul 19 2021, 01:20:30) 
[GCC 9.3.0]
```

もし、環境にインストールされたpylintを利用したい場合は、以下のように設定を変更します。

```:setting.json(抜粋)
{
    "pylint.importStrategy": "fromEnvironment"
}
```

ちなみに、VSCode拡張のPythonのライブラリ群は以下に保存されているようです。
(WSL 2, Ubuntu環境の場合)

```
 ~/.vscode-server/extensions/ms-python.pylint-2023.10.0/bundled/libs
```

![Snag_24438924.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192873/df0c026b-bd95-66b4-7dae-8c330943538c.png)

## リンターにmypyをお使いの場合

以下の設定が非推奨のため、削除します。

```:setting.json(抜粋)
{
    "python.linting.mypyEnabled": true,
    "python.linting.mypyPath": "${workspaceFolder}/.venv/bin/mypy",
}
```

以下の拡張機能をインストールします。

[Mypy Type Checker](https://marketplace.visualstudio.com/items?itemName=ms-python.mypy-type-checker)

pylintと同じく、拡張機能をインストールしただけで自動的に設定が有効になり利用可能となります。
(別途pipでのインストールは**不要**です)

## フォーマッターにblackをお使いの場合

次はフォーマッターblackについてです。
以下のように記載していたかと思います。

```:setting.json(抜粋)
{
    "python.formatting.provider": "black",
    "python.formatting.blackPath": "パス情報(未設定の場合もあります)",
    "python.formatting.blackArgs": ["--skip-string-normalization"],
}
```

上記の設定が非推奨になります。
なので削除します。
代わりに以下の拡張機能をインストールします。
(pylintと同様に別途pipでのライブラリインストールは**不要**です)

[Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)

また、setting.jsonは以下のようにします。

```:setting.json(抜粋)
{
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnSave": true,
    },
    "black-formatter.args": [
      "--skip-string-normalization"
    ]
}
```


## インポートライブラリのソート設定について

Pythonファイルの先頭で利用するライブラリをインポートするかと思います。
従来はisortを使ってソートしていたと思いますが、そちらも拡張機能への移行が推奨されています。

まずは以下の拡張機能をインストールします。
[isort](https://marketplace.visualstudio.com/items?itemName=ms-python.isort)

```:setting.json(抜粋)
{
  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
  },
  "isort.args":["--profile", "black"],
}
```

実際に動作させた場合は以下のようになります。
ファイル保存時に自動的にインポート部分がソートされます。

![78C5F278-6E6F-4516-A474-467659BCDFB0.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192873/b9b4cfbd-1eea-8db7-c346-3ae9fe380cc0.gif)

## おまけ1：Ruff導入のススメ

Rust言語で記述された高速で動作するRuff、気になっている皆さんも多いのではないかと思います。
個人的な意見としては、とても素晴らしいので皆さんぜひインストールしてください！！
インストールも設定も超簡単です。

まずは以下の拡張機能をインストールします。
[Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff)

次にプロジェクト直下で`pyproject.toml`を作成します。

```:pyproject.toml
[tool.ruff]
target-version = "py39" # Pythonのバージョンを指定
ignore = []
select = ["ALL"] # すべてのルールを適用する


[tool.ruff.pydocstyle]
convention = "google" # docstringの形式を指定
```

設定はこれだけです。
自動的にいろいろなルールでコードのチェックが入り、高品質なコードの作成が可能になります。
また、チェックが失敗した場合、なぜ失敗したのか、どう修正すべきなのかが明確にまとまっているページへのリンクがあるので、コードの修正も簡単です。

例えば、以下ではpathlibをインポートしていますが、利用していません。
![Snag_248bb20b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192873/cfef15af-0558-3ccf-2c65-e6aafc43d6eb.png)

[F401](https://docs.astral.sh/ruff/rules/unused-import/)のルールへのリンクがあるので、クリックしてみます。
ページ内のExampleの部分を見るとどう修正すべきか一目瞭然です。

![Snag_248d4712.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192873/493363d7-a78d-888b-f529-824fdba36040.png)

Pythonコーディング歴はそこそこ長いですが、実際に私がコーディングしている中でRuffの警告で学ぶこともまだまだたくさんあります。
ぜひ活用してみてください(^_-)-☆

### Appendix
Ruffの各種設定については以下を参照ください。
[Ruff -settings-](https://docs.astral.sh/ruff/settings/)

Ruffの適用されるルールの一覧は以下を参照ください。
[Ruff -rules-](https://docs.astral.sh/ruff/rules/)

## 最後に

この機会にVSCodeのPython周りの設定をアップデートしてみてはいかがでしょうか。
最近の開発環境は変化がとても速く最新の情報に追いつくだけでも大変だと思います。
本記事が少しでも皆さんの開発ライフを便利にすることを祈ってます。