えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

PythonをVS Codeで書くための環境設定

python-logo-no-wordmark

お伝えしたいこと

本記事では、VS CodePythonを動かすための環境設定を紹介します。
最低限必要なのは、以下の2点です。

上記セットアップによってできるようになることを、以下のセクションで補足します。

最後に補足として、応用的な設定を一部紹介しています。

途中でVS Codeの操作方法について記述している箇所がありますが、ショートカットキーはLinux基準となっています。
OSの違いによって読み替えが必要となりますが、そこはご了承ください。

Python拡張機能のインストール

Python拡張機能をインストールします。

Pylance拡張機能も自動的にインストールされると思います。
この拡張機能は無効化しないことを推奨します。
詳細は#Language Serverについてにて補足します。

拡張機能のインストール手順は、VS Codeの基本操作になるので割愛します。

初期設定

Python拡張機能の初期設定として、Pythonインタプリタを指定します。
/usr/bin/pythonなど、代表的なパスにある場合は自動検知してくれるので、Linuxの方は初期設定不要だと思います。

一方、後からインストールしたバージョン違いのPythonを使いたい場合は、個別に指定する必要があります。
Ctrl+Shift+P (View > Command Palette)を押してから、出てきた検索ウィンドウにPython: Select Interpreterと入力することで設定できます。

select_python_interpreter1 loading=

.pyファイルを開いている間は、左下の隅っこをクリックすることでも設定できます。

select_python_interpreter2

初期設定はこの時点で完了です。

Python拡張機能の基本機能

Python拡張機能を入れることで、追加設定不要で使える機能を紹介します。

Ctrl+F5で実行

.pyファイルを開いているときにCtrl+F5 (Run > Run without debugging)を押すだけでPythonを直ちに実行してくれます。
サンプルコードを書いてCtrl+F5を押すだけでサクサク実行できます。

学習効率に関わる部分なので、シンプルですが重要な機能です。

IntelliSense機能

VS Code のIntelliSense機能が使えるようになります (公式ドキュメント)。
IntelliSense機能は、いわゆる「コード補完」機能です。
裏でPython Language Server というコンポーネントと連携することで、以下のサービスを提供します。

機能名 機能詳細
コード補完 例えば、print()関数のprまで入力すると、入力候補を表示する
説明の表示 print()関数の基本機能、取りうる引数、返り値、型情報などを表示する

クラス、関数、プロパティ、メソッドの仕様を事細かに暗記せずとも、この機能を頼りながら効率的にプログラムを書くことができます。
学習に伴う暗記、調査のストレスを減らし、作業と学習の効率を大幅に上げてくれる必須機能です。

IntelliSense機能は、関数名などを途中まで入力してからCtrl+Spaceを押すことで呼び出すことができます。
Ctrl+Spaceを複数回押すと、コード補完の表示の詳細度を切り替わります。

以下は、listのsortメソッドの説明をIntelliSenseで表示した画像です。
Language Server はPylanceを使用しています。

completion_pylance

(参考) Language Serverについて

Language Server とは、プログラミング言語による開発をサポートするための機能を提供するサーバです。
VS Codeなどのエディタは、Language Server Protocol を介してLanguage Server と通信することで、サポート機能を享受することができます。

Python拡張機能の場合、デフォルトでPylanceというLanguage Serverが使われます。
Pylanceは上述のIntelliSense機能だけでなく、Syntax Highlighting (ソースコードの色分け) やエラーレポートなどの機能も提供します。
Pylanceは拡張機能として提供されており、Python拡張機能インストール時に依存関係として自動的に追加導入れます。
詳細はPylance拡張機能の公式ページを参照してください。

Pylance拡張機能はオフライン環境でも動作します。

実際に使ってみる

簡易なコードを例に、実際に使ってみます。

まず、Python開発用のフォルダを作っておきます (projects/python/hello_world/など)
Ctrl+K,Ctrl+O (File > Open Folder)でこのフォルダを開きます。

Ctrl+Shift+E(または左上のアイコン) からエクスプローラを開き、新規ファイルを作成します。
ファイル名は適当に、tmp.pyというファイル名にしておきます。

create_file

aptmpp.pyに以下のコードを書き、Ctrl+Sで保存します。

print('hello world')

Ctrl+F5(Run > Run without Debugging)で実行します。
すると、画面下部にターミナルが開いてPythonが実行されます。
出力が残って気になる場合は、Ctrl+Dでターミナルを閉じます (これはbashのショートカットキーです)
または、Ctrl+Shift+@ (View > Terminal)でターミナルの表示/非表示を切替できます。

Pythonの学習初期段階においてはサンプルコードを書いて動かすことの繰り返しになりますが、上記のワークフローであれば効率的に作業できるのではないかと思います。

(参考) 応用的な拡張機能

Python関連の拡張機能には、PythonやPylance以外にも色々あります。
代表的なものはLinter、Auto Formatter、Type Checkerが挙げられます。
本セクションでは、これらがどういった機能か、どうやって使うのかについてご説明します。

Linter

Linterは文法エラーやコーディング規約を満たしていない場合に直ちに警告を出し、VS Codeのエディタ上で該当箇所に赤や黄色の波線を引いて教えてくれます。
これらの警告を解決するように修正することで、ソースコードの品質をある観点で保ちやすくなります。

VS Code上でエラーの詳細を確認するには、View > Problems (Ctrl+Shift+M)でProblemsウィンドウを表示します。

以下にLintが表示するエラーのサンプルを示します。
こちらのエラーでは、無駄なimport文を実行していることと、ファイル末尾に空行が無いことで、flake8というLinterがエラーと警告をそれぞれ出しています。
PEP8などのコーディング規約を理解していなくても、ツールに教えてもらった通りに修正するだけで最低限見た目が綺麗になるのは便利ですね。
「ライトユーザーだから動けばいい」と思う方もいるかもしれませんが、むしろライトユーザーこそツールに任せて楽をするのが良いと私は思います。

lint_errors

Auto Formatter

Auto Formatterは、空行の入れ方やimport文の書き順など、明らかに動作上の影響が出ない範囲で規約に沿った書き方に自動修正してくれる機能です。
VS Code上でAuto Formatterを呼び出すには、Ctrl+Shift+Iを押下します。

例えば上記の#Linterの画面においてCtrl+Shift+Iを押下すると、importprintの間に空行2つを自動的に挿入してくれます。

Type Checker

Type Checkerは、変数の型を厳密に管理する上であると便利な機能です。
例えばある変数xに最初に1 (int型) を代入し、後からx = 'a' (str型) を代入するとType Checkerに怒られます。
私もまだまだ理解があいまいなのですが、バグを埋め込みにくいコーディングをする上で、型の管理は重要なのかなと思います。
型の理解が完全でなくとも、Type Checkerを入れておくことで良くない書き方を知るきっかけになるので、このツールもあると嬉しいものでした。

拡張機能の選び方

世の中には同じような機能を持った有名な拡張機能が複数あります。
最初はどれを使うか迷うと思いますが、行動の指針としては以下が挙げられると思います。

  1. 迷うぐらいなら何も入れない
  2. 投稿日時が新しいブログから、最もらしいことが書いてあるものを自分の感性で選び、とりあえず使ってみる。困ったら別のものに変える
  3. とりあえず複数入れてみて、自分に合ってない警告を出すLinterや、望んでいない変更を加えるAuto Formatterを後から削除する

どの方針で行くかは個々人の好みだと思います。
私は最初は1の方針だったのですが、今にして思えば2で良かったのかなと思います。

導入したツール

2021年当時、私は以下のブログを参考にしてツールを導入しました。
2021年Python開発リンター導入のベストプラクティス

そして2024年も同じツールを使い続けています。
本当に便利です。
ありがとうございました。

私の環境で導入したツールは以下の通りです。

(分類)
ツール名
機能 使い方
(Auto Formatter)
ms-python.black-formatter
空行挿入などの見た目自動調整 Ctrl+Shift+I
(Auto formatter)
ms-python.isort
import文のソート Ctrl+Shift+P ->
python.sortImports
(Linter)
nwgh.bandit
セキュリティ関連の警告表示
Complete Test Plugin Listing
ファイル保存時に自動起動
(Linter)
ms-python.flake8
PEP8準拠のコーディングスタイル指摘 ファイル保存時に自動起動
(Type Checker)
ms-python.mypy-type-checker
型チェック ファイル保存時に自動起動

(参考) RuffというLinter

#導入したツールに記述したツール群のうち、mypy以外はRuffという拡張機能でも概ね代替できます。
RuffはType Checkerではないので、Ruffを使う場合もType Checkerが必要な場合は別途インストールする必要があります (参考)。

Ruffによって以下が可能です。

  • Ctrl+Shift+IキーでほぼBlack相当のAuto Formatが可能 (参考)
  • Flake8のような指摘も可能
    • ただしRuffの指摘数はFlake8よりも少ない
    • 上記差分は「Auto Format機能で直る範囲」に収まるものが多いが、全てではない
  • isortとほぼ同じ挙動のimportソートも可能 (参考)
    • 実行方法はCtrl+Shift+P -> editor.action.organizeImports
    • 稀に異なるisortと動きをする

実際にRuffも使ってみて、私は#導入したツールにあるツール群に落ち着きました。
機能性に大きな差分は感じなかったものの、やはり私はFlake8のように細かく指摘してくれるのが嬉しかったです。

まとめ

Pythonを始めるのは面倒です。
教材探し、Pythonインストール、venvの検討、そしてIDEの検討が事前に必要です。

そこで本記事では、VS CodeによるPython開発環境の最低限のセットアップ手順を紹介しました。

本記事によって、Pythonを書き始める前の工程が少しでも短縮されれば幸いです。