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 支援機能のセットを提供します。詳細については、VS Code 用 IntelliCode 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 はインポートを追加する際に、トップレベルのシンボル オプションしか提供していません。 | 既定では、トップレベルのモジュールのみがインデックス化されます (depth=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}
。 - 別のインタープリターまたはカーネルに既にインストールされているパッケージをインポートしている場合は、正しいインタープリターを選択 してください。
- 編集可能なインストールを使用していて、現在インポート フックを使用するように設定されている場合は、代わりにファイル パスのみを含む
.pth
ファイルを使用するように切り替えることを検討してください。これにより、互換性が向上し、インポートの動作がスムーズになります。詳細については、Pyright のドキュメント を参照してください。
importCycleDetected
このエラーは、Pylance が 2 つ以上のモジュール間で循環依存を検出した場合に発生します。
修正方法
インポート文の順序を変更して、循環依存を解消してみてください。
Pylance の診断の重要度は、python.analysis.diagnosticSeverityOverrides
設定を通じてカスタマイズできます。詳細については、設定リファレンス を確認してください。
次のステップ
- Lint 化 - さまざまな Python リンターを有効化、設定、適用します。
- デバッグ - Pythonをローカルおよびリモートでデバッグする方法を学びます。
- テスト - テスト環境を構成し、テストを発見、実行、デバッグします。
- 基本的な編集 - 強力な VS Code エディターについて学習します。
- コード ナビゲーション - ソースコード内をすばやく移動します。
- IntelliSense - IntelliSense の機能について学びます。
- Jupyter のサポート - Jupyter Notebooks の使用を開始する方法を学びます。
- Python 拡張機能テンプレート - お気に入りの Python ツールを統合するための拡張機能を作成します。