Visual Studio Code での Python の編集
Visual Studio Code は、Python ソース コード用の強力な編集ツールです。このエディターには、コード作成時の生産性を向上させるためのさまざまな機能が含まれています。Visual Studio Code での編集について詳しくは、基本的な編集およびコード ナビゲーションを参照してください。
この概要では、ユーザーおよびワークスペースの設定を介してこれらの機能をカスタマイズする手順を含め、Python 拡張機能によって提供される特定の編集機能について説明します。
自動補完と IntelliSense
IntelliSense は、コード補完に関するコード編集機能の総称です。以下の例をご覧ください。print と入力したときに、IntelliSense がどのように自動補完オプションを表示するかに注目してください。また、ユーザーが greeting という名前の変数を入力し始めると、オプションのリストも表示されます。

自動補完と IntelliSense は、現在の作業フォルダー内のすべてのファイルに対して提供されます。また、標準的な場所にインストールされている Python パッケージでも利用できます。
Pylance は VS Code における Python のデフォルトの言語サーバーであり、IntelliSense 機能を提供するために Python 拡張機能と一緒にインストールされます。
Pylance は Microsoft の Pyright 静的型チェック ツールに基づいており、型スタブ (.pyi ファイル) と遅延型推論を活用して、非常にパフォーマンスの高い開発エクスペリエンスを提供します。
IntelliSense 全般について詳しくは、IntelliSense を参照してください。
ヒント: VS Code 用の IntelliCode 拡張機能をぜひお試しください。IntelliCode は、現在のコード コンテキストに基づいて最も関連性の高い自動補完を推論するなど、Python における IntelliSense のための AI 支援機能を提供します。詳細については、IntelliCode for VS Code FAQ を参照してください。
IntelliSense の動作のカスタマイズ
デフォルトですべての IntelliSense 機能を有効にすると、開発エクスペリエンスの動作が遅く感じられる可能性があるため、Python 拡張機能では、パフォーマンスを維持しながら生産性を高めることができる最小限の機能セットを有効にしています。ただし、複数の設定を通じて、分析エンジンの動作を好みに合わせてカスタマイズできます。
自動インポートの有効化
Pylance は、ワークスペース内のモジュールや環境にインストールしたパッケージに対して自動インポートの提案を行います。エディターに入力すると、補完の提案が表示される場合があります。提案を確定すると、自動インポートによって、対応するインポート文がファイルに自動的に追加されます。
設定で python.analysis.autoImportCompletions を true に設定することで、自動インポートを有効にできます。デフォルトでは、自動インポートは無効になっています。

カスタム パッケージの場所に対する IntelliSense の有効化
非標準の場所にインストールされているパッケージに対して IntelliSense を有効にするには、それらの場所を settings.json ファイルの python.analysis.extraPaths コレクションに追加します (デフォルトのコレクションは空です)。たとえば、Flask を使用している場合に Google App Engine が app.yaml で指定されたカスタムの場所にインストールされているとします。この場合、以下のようにそれらの場所を指定します。
Windows
"python.analysis.extraPaths": [
"C:/Program Files (x86)/Google/google_appengine",
"C:/Program Files (x86)/Google/google_appengine/lib/flask-0.12"]
macOS/Linux
"python.analysis.extraPaths": [
"~/.local/lib/Google/google_appengine",
"~/.local/lib/Google/google_appengine/lib/flask-0.12" ]
利用可能な IntelliSense コントロールの完全なリストについては、Python 拡張機能のコード分析設定および自動補完設定を参照してください。
また、自動補完や IntelliSense の一般的な動作をカスタマイズしたり、機能を完全に無効にしたりすることもできます。詳しくは、IntelliSense のカスタマイズを参照してください。
AI による補完機能の強化
GitHub Copilot は、コードをより速く、よりスマートに作成するのに役立つ AI 駆動型のコード補完ツールです。VS Code で GitHub Copilot 拡張機能を使用してコードを生成したり、生成されたコードから学習したりできます。
GitHub Copilot は、多数の言語とさまざまなフレームワークの候補を提供しており、特に Python、JavaScript、TypeScript、Ruby、Go、C#、C++ でうまく機能します。
Copilot の開始方法については、Copilot のドキュメントで詳細を確認できます。
ナビゲーション
編集中にさまざまな識別子を右クリックすると、いくつかの便利なコマンドを利用できます
-
定義へ移動 (F12) は、コードからオブジェクトを定義しているコードへとジャンプします。このコマンドは、ライブラリを操作しているときに便利です。
-
定義をここに表示 (⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)) も同様ですが、定義をエディター内に直接表示します (コードが隠れないようにエディター ウィンドウ内にスペースを作ります)。Escape キーを押すか、右上隅の x をクリックして、覗き見ウィンドウを閉じます。
-
宣言へ移動 は、変数やその他のオブジェクトがコード内で宣言されている場所へとジャンプします。
-
宣言をここに表示 も同様ですが、宣言をエディター内に直接表示します。同様に、Escape キーを押すか、右上隅の x をクリックして、覗き見ウィンドウを閉じます。
クイックフィックス
インポートの追加
Pylance を使用している場合、[インポートの追加] クイック修復を使用すると、環境にインストールされているモジュールのインポート文を素早く補完できます。エディターでパッケージ名を入力し始めると、ソース コードの行を自動的に補完するコード アクションが利用可能になります。テキスト (波線が表示されている部分) にホバーし、コード アクションの電球アイコンを選択します。そこから、候補となるインポートのリストを選択できます。

このコード アクションは、次の一般的な Python パッケージの一般的な略称も認識します: numpy を np、tensorflow を tf、pandas を pd、matplotlib.pyplot を plt、matplotlib を mpl、math を m、scipi.io を spio、scipy を sp、panel を pn、holoviews を hv とします。

インポート提案リストには、信頼性の高い上位 3 つのインポート オプションが表示されます。これらは、最近使用されたインポート、同じモジュールのシンボル、標準ライブラリのシンボル、ユーザー モジュールのシンボル、サードパーティ パッケージのシンボルに基づいて優先順位付けされ、最後にモジュール名とシンボル名でソートされます。
追加のインポート一致を検索
デフォルトでは、[インポートの追加] クイック修復は信頼性の高い 3 つのインポート オプションのみを表示します。探しているものがリストにない場合は、インポート不足エラーに対して Pylance の 追加のインポート一致を検索 クイック修復を使用できます。このクイック修復は、不足しているインポート シンボルに前方一致するインポート オプションを検索できるクイック ピック メニューを表示します。

スペルの変更
Pylance は、未解決の変数やインポート不足の診断がタイポによって発生している可能性が高い場合に、スペルの変更 クイック修復を表示します。このコード アクションは、ワークスペースで見つかった最も近い一致に基づいて、シンボルの正しいスペルを提案します。

注意: ユーザー シンボルの場合、これらのクイック修復はそれらが定義されているファイルからのみインポートを提案します。ユーザー シンボルが外部からインポートされているファイルからのインポート提案はサポートされていません。
また、インストールされたパッケージ (通常は Python 環境の
site-packagesフォルダーの下に配置されています) からのシンボルの場合、これらのクイック修復によって提案されるのは、パッケージのルート フォルダー (__init__.pyファイル内など) で定義されているものだけであることにも注意してください。この動作は、python.analysis.packageIndexDepths設定を介して特定のパッケージ向けにカスタマイズできますが、Pylance のパフォーマンスに影響を与える可能性があることに注意してください。
リファクタリング
Python 拡張機能は、Pylance 拡張機能を介して次のリファクタリング機能を追加します: 変数の抽出、メソッドの抽出、モジュールの名前変更、シンボルの移動、およびすべての継承された抽象クラスの実装。また、インポートの整理などの追加のリファクタリング機能を実装する拡張機能もサポートしています。
変数の抽出
現在のスコープ内で選択したテキストと類似するすべての出現箇所を抽出し、新しい変数に置き換えます。
変数として抽出したいコード行を選択することで、このコマンドを呼び出すことができます。次に、その横に表示される電球アイコンを選択します。

メソッドの抽出
現在のスコープ内で選択した式またはブロックと類似するすべての出現箇所を抽出し、メソッド呼び出しに置き換えます。
メソッドとして抽出したいコード行を選択することで、このコマンドを呼び出すことができます。次に、その横に表示される電球アイコンを選択します。

モジュールの名前変更
Python ファイルまたはモジュールの名前が変更された後、Pylance は更新が必要となる可能性のあるすべてのインスタンスを見つけ、すべての変更のプレビューを提供します。
更新が必要な参照をカスタマイズするには、[リファクタリング プレビュー] で行レベルまたはファイル レベルのチェックボックスを切り替えることができます。選択を完了したら、[リファクタリングの適用] または [リファクタリングの破棄] を選択できます。

シンボルの移動
Pylance 拡張機能は、シンボルを別のファイルに移動するプロセスを簡素化するための 2 つのコード アクションを提供します
- シンボルを移動...: 移動先のファイルを選択するためのファイル ピッカーを表示します。
- シンボルを新しいファイルに移動: コード アクションが呼び出されたソース ファイルと同じディレクトリに、シンボル名を持つ新しいファイルを作成します。
移動したいシンボルの上にホバーし、目的のアクションの横に表示される電球アイコンを選択することで、これらのコード アクションにアクセスできます。または、シンボルを右クリックしてコンテキスト メニューから [リファクタリング...] を選択することもできます。

すべての継承された抽象クラスの実装
Python において、抽象クラスは他のクラスの「設計図」として機能し、サブクラスが準拠すべき明確な構造と要件を促進することで、モジュール式で再利用可能なコードの構築を支援します。Python で抽象クラスを定義するには、abc モジュールの ABC クラスを継承するクラスを作成し、そのメソッドに @abstractmethod デコレーターでアノテーションを付けます。その後、この抽象クラスを継承する新しいクラスを作成し、基本メソッドの実装を定義できます。
Pylance は、これらのクラスを作成するプロセスを簡素化するためのコード アクションを提供します。抽象クラスを継承する新しいクラスを定義すると、[すべての継承された抽象クラスを実装する] コード アクションを使用して、親クラスのすべての抽象メソッドとプロパティを自動的に実装できるようになります

インポートの整理
Python 拡張機能は、インポートの整理機能を実装する isort や Ruff などの拡張機能をサポートしています。このコマンドは、同じモジュールからの特定のインポートを単一の import 文に統合し、import 文をアルファベット順に整理します。
これを使用するには、インポートのソートをサポートする拡張機能をインストールし、コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を開いて [インポートの整理] を実行します。
ヒント:
editor.action.organizeImportsコマンドにキーボード ショートカットを割り当てることができます。

トラブルシューティング
一般的な IntelliSense や Python 編集の問題に関するヘルプについては、以下の表を確認してください
| 問題 | 原因 | 解決策 |
|---|---|---|
| インポートを追加するときに、Pylance がトップレベルのシンボル オプションしか提案しない。 | デフォルトでは、トップレベルのモジュールのみがインデックス登録されます (深度 = 1)。 たとえば、デフォルトでは import matplotlib は提案として表示されますが、import matplotlib.pyplot は表示されない場合があります。 |
python.analysis.packageIndexDepths を使用して、Pylance がインストール済みのライブラリをインデックス登録できる深度を増やしてみてください。コード分析設定を確認してください。 |
| Pylance が不足しているインポートを自動的に追加しない | 自動インポート補完の設定が無効になっている可能性があります。 | 「自動インポートの有効化」セクションを確認してください。 |
| 自動インポートは有効になっているが、Pylance が ワークスペース内の他のファイルで定義されているシンボルを自動的にインポートしない。 | ユーザー定義のシンボル (インストールされたパッケージやライブラリから提供されていないもの) は、エディターで開かれているファイルですでに使用されている場合にのみ、自動的にインポートされます。 それ以外の場合は、[インポートの追加] クイック修復を介してのみ利用可能になります。 |
[インポートの追加] クイック修復を使用するか、まずワークスペース内の関連ファイルが開いていることを確認してください。 |
| 大規模なワークスペースで作業しているときに、Pylance の動作が遅い、またはメモリを消費しすぎているように見える。 | Pylance の分析は、指定されたワークスペース内のすべてのファイルに対して実行されます。 | Pylance の分析から除外できることがわかっているサブフォルダーがある場合は、そのパスを python.analysis.exclude 設定に追加できます。または、python.analysis.indexing を false に設定して Pylance のインデクサーを無効にしてみてください (注意: これは補完や自動インポートのエクスペリエンスにも影響します。インデックス登録の詳細については、コード分析設定を参照してください)。 |
| Python プロジェクトにカスタム モジュールをインポートできない。 | カスタム モジュールが非標準の場所に配置されている (pip を使用してインストールされていない)。 | その場所を python.autoComplete.extraPaths 設定に追加し、VS Code を再起動します。 |
Pylance 診断
Pylance はデフォルトで、[問題] パネルに Python ファイルの診断結果を提供します。
以下のリストは、Pylance によって提供される最も一般的な診断の一部と、その解決方法です。
importResolveSourceFailure
このエラーは、Pylance がインポートされたパッケージの型スタブを見つけることはできたものの、パッケージ自体が見つからない場合に発生します。これは、インポートしようとしているパッケージが、選択されている Python 環境にインストールされていない場合に発生することがあります。
解決方法
- パッケージがすでに別のインタープリターまたはカーネルにインストールされている場合は、正しいインタープリターを選択してください。
- パッケージがインストールされていない場合は、アクティブ化されたターミナルで次のコマンドを実行してインストールできます:
python -m pip install {package_name}
importResolveFailure
このエラーは、Pylance がインポートしようとしているパッケージやモジュール、またはその型スタブを見つけられない場合に発生します。
解決方法
- モジュールをインポートしている場合は、それがワークスペース内、または
python.autoComplete.extraPaths設定に含まれている場所に存在することを確認してください。 - インストールされていないパッケージをインポートしている場合は、アクティブ化されたターミナルで次のコマンドを実行してインストールできます:
python -m pip install {package_name} - すでに別のインタープリターまたはカーネルにインストールされているパッケージをインポートしている場合は、正しいインタープリターを選択してください。
- エディタブル インストール (editable install) を使用しており、現在インポート フックを使用するように設定されている場合は、互換性を高め、インポート動作をよりスムーズにするために、ファイル パスのみを含む
.pthファイルの使用に切り替えることを検討してください。詳しくは、Pyright のドキュメントを参照してください。
importCycleDetected
このエラーは、Pylance が 2 つ以上のモジュール間で循環依存関係を検出したときに発生します。
解決方法
インポート文の順序を変更して、循環依存関係を解消してみてください。
Pylance の診断の重要度は、python.analysis.diagnosticSeverityOverrides 設定によってカスタマイズできます。詳細については、設定リファレンスを確認してください。
次のステップ
- リンティング - さまざまな Python リンターを有効化、構成、および適用します。
- デバッグ - ローカルおよびリモートでの Python のデバッグ方法を学習します。
- テスト - テスト環境を構成し、テストを検出、実行、およびデバッグします。
- 基本的な編集 - 強力な VS Code エディターについて学習します。
- コードナビゲーション - ソースコードを素早く移動します。
- IntelliSense - IntelliSense 機能について説明します。
- Jupyter のサポート - Jupyter Notebook を使ってみる方法について説明します。
- Python 拡張機能テンプレート - お気に入りの Python ツールを統合する拡張機能を作成します。
