検索
連載

VS CodeのPython拡張機能が強化、venv内パッケージのシンボル検索が可能にDeep Insider Brief ― 技術の“今”にひと言コメント

VS Code用Python拡張機能の2026年3月更新版が公開された。仮想環境にインストール済みのパッケージのシンボルを[ワークスペース内のシンボルへ移動]で検索できるようになった。コードを深く理解するのに有用な機能だ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Deep Insider Brief ― 技術の“今”にひと言コメント」のインデックス

連載目次

 Visual Studio Code(以下、VS Code)用のPython拡張機能の2026年3月版が、2026年4月1日に公開された。

VS Codeの2026年3月版の更新のリリース
VS Codeの2026年3月版の更新のリリース
Python in Visual Studio Code - March 2026 Release」のスクリーンキャプチャーを引用。


HPかわさき

 どうも。HPかわさきです。

 今回はVS CodeのPython拡張機能について取り上げます。「Microsoft for Python Developers Blog」を見ている限りでは、2025年11月以降、Python拡張機能の大きな話題はそれほど目立っていませんでした(Python
Environments拡張機能については動きがありましたが)。

 Python拡張機能自体が古くからあるもので、最近は大きな機能追加よりも、必要に応じた改善や調整が中心になっているのかもしれません。VS Code本体は週次リリースになりましたが、Python拡張機能はそれとは別のペースで、必要なタイミングに合わせて更新されていく流れになりそうです。実際、ここ最近はそうした雰囲気が感じられます。


更新内容

 今回の更新内容として挙げられているのは主に以下の2つ。

  • [ワークスペース内のシンボルへ移動]コマンドで、仮想環境にインストール済みのパッケージのシンボルへ移動できるようになった
  • Rustベースの並列インデクサー(実験的実装)

 この他にPython Environments拡張機能では幾つかのバグ修正や、Pixiの仮想環境がある場合にPixi拡張機能を推奨するようになったなどの変更がある。

 以下ではその中でもワークスペース内のシンボルへの移動機能の強化について紹介する。

ワークスペース内のシンボルへの移動機能の強化

 今回のPython拡張機能の更新では、[ワークスペース内のシンボルへの移動]コマンドで、仮想環境にインストール済みのパッケージのシンボルも検索できるようになった(コマンドは[Ctrl]+[T]キーもしくは[Command]+[T]キーで起動)。これまでは検索できるのはワークスペース内のシンボル(自分が書いたコード)に限られていた。しかし、python.analysis.includeVenvInWorkspaceSymbolsを有効にすることで、アクティブな仮想環境のsite-packagesにインストールされたサードパーティー製のライブラリのシンボルも検索対象となる。


HPかわさき

 実際に有効になるのは、python.analysis.indexingの設定もオンになっている場合のみです。


 これまでに使ったことがないサードパーティー製のパッケージを含んだコードを相手にするときには、そうしたパッケージに含まれているクラスや関数、変数(定数)などについて知りたくなるときがある。こうしたときに、今回強化された[ワークスペース内のシンボルへの移動]コマンドを使えると、パッケージのドキュメントを含んだWebサイトに移動するのではなく、VS Codeを使っているまま、それらの定義位置にカーソルを移動して、その定義についてソースコードのレベルで調べられるようになるということだ。

 なお、パフォーマンスへの影響を考慮し、この機能はオプトイン(明示的な有効化)が必要となっている。オプトインするにはVS Codeの設定画面で「include venv」などと入力し、以下の画像のpython.analysis.includeVenvInWorkspaceSymbolsのチェックをオンにする。

python.analysis.includeVenvInWorkspaceSymbolsの設定画面
python.analysis.includeVenvInWorkspaceSymbolsの設定画面
パッケージごとのインデクシングの深さを設定するには、マウスカーソルが指しているリンクをクリックする。

 例えば、以下のようなコードがあったとする(例としては簡単過ぎるが、そこはご容赦願いたい)。

import numpy as np

data: np.ndarray = np.array([1, 2, 3, 4, 5])
print(data.mean())  # 3.0

numpyを使ったコード例

 先ほどのpython.analysis.includeVenvInWorkspaceSymbolsをオフのまま、[Ctrl]+[T]キーや[Command]+[T]キーを押下して、コマンドパレット部分に「ndarray」と入力しても、以下の画像のように何も反応がない。

python.analysis.includeVenvInWorkspaceSymbolsがオフだと外部パッケージのシンボルは表示されない
python.analysis.includeVenvInWorkspaceSymbolsがオフだと外部パッケージのシンボルは表示されない

 しかし、python.analysis.includeVenvInWorkspaceSymbolsをオンにして同様な操作を行うと、以下の画像のようにシンボルの候補が表示される。

python.analysis.includeVenvInWorkspaceSymbolsをオンにすると外部パッケージのシンボルも表示されるようになる
python.analysis.includeVenvInWorkspaceSymbolsをオンにすると外部パッケージのシンボルも表示されるようになる


HPかわさき

 実は[Ctrl]+[T]キーや[Command]+[T]キーを押してから、コマンドパレットにテキストを入力するよりも、調べたいシンボルにカーソルを置いてそれらのキーを押す方が簡単です。


 なお、py.typedマーカーファイルがないパッケージでは、__all__を介してエクスポートされたシンボルのみが対象となる。パッケージ内のどのレベルまでシンボルをインデクシングするかは、python.analysis.packageIndexDepthsでパッケージごとに指定可能だ。


HPかわさき

 py.typedファイルはパッケージに型ヒントが付加されていることを示すマーカーファイルです。


 インデクシングの詳細を設定するには、先ほどのpython.analysis.includeVenvInWorkspaceSymbolsの設定画面にある[Python > Analysis: Package Index Depths;]リンクをクリックするか、検索ボックスで「package index depths」などと入力して、python.analysis.packageIndexDepthsの設定画面を開く。

python.analysis.packageIndexDepthsの設定画面
python.analysis.packageIndexDepthsの設定画面

 ここで[settings.jsonで編集]リンクをクリックすると、以下のようにJSONの編集画面が表示されるので、適宜編集すればよい。

パッケージごとにインデクシングの深さなどを指定する
パッケージごとにインデクシングの深さなどを指定する
設定可能なのは"name"、"depth"、"includeAllSymbols"の3つだが、ここでは前者の2つだけを指定している点には注意されたい。

 設定可能なのは以下の3つ。

  • "name":パッケージ名
  • "depth":階層の深さ(depthが1なら最上位のレベルのモジュールのみがインデクシングの対象となる。depthが2ならパッケージの直下のサブモジュールもインデクシングの対象となる。depthが0なら、そのパッケージはインデクシングの対象から除外される)
  • "includeAllSymbols":全てのシンボルをインデクシングの対象とするかどうかをtrue/falseで指定。falseの場合は、__init__.pyの__all__に含まれるシンボルのみをインデクシングの対象とする。trueの場合は、各モジュールのファイルに含まれる全てのトップレベル(モジュールレベル)のシンボル定義がインデクシングの対象となる

 depthはどの階層までをインデクシングの対象とするか、includeAllSymbolsは__all__を介してエクスポートされたものだけをインデクシングの対象とするか、そうではなく(エクスポートされていないものまでを含む)全てのシンボルをインデクシングの対象とするかを決めるものだと考えればよい。

 用途としては、「階層は浅いが全てのシンボルが検索の対象としたいのであれば、depthは浅めに、includeAllSymbolsはtrueにする」「より深くのサブモジュールまで検索対象にするが、__all__でエクスポートされているものだけでよいのなら、depthを深めに、includeAllSymbolsはfalseにする」といったことが考えられる。

Rustベースの並列インデクサー(実験的実装)

 もう一つ、実験的な機能としてRustベースの並列インデクサーも追加されている。この設定も実験的なもので、有効にするにはpython.analysis.enableParallelIndexingのチェックをオンにした後にウィンドウの再読込が必要にある。

 ここでいうインデクサーは、Pylanceがキーワード補完や自動インポート、ワークスペースのシンボル検索のために使用しているエンジンのこと。このインデクサーが並列に処理を行うようにRustで実装したということだ。

python.analysis.enableParallelIndexingの設定画面
python.analysis.enableParallelIndexingの設定画面

 ブログ記事によれば、大規模プロジェクトでは平均10倍高速になったとのこと(ワークスペースを開いた後、補完が早いタイミングで行えたり、IntelliSenseのレスポンスがよくなったりするというメリットがある)。逆に小規模なプロジェクトではそれほどの差が出ない可能性もある。


HPかわさき

 よく知らないサードパーティー製のライブラリを使っているときや、そうしたコードを相手にしたときには、「このクラスってどうなっているの?」「この関数の詳しい挙動を知りたい」などと感じることがよくあります。そうしたときに、Webブラウザでドキュメントを検索したり、ソースコードに含まれるパッケージを自分で検索したりしなくて済むようになったのは、コードを理解しようというときにはとても便利だと思います。

 とはいえ、エージェントによる(大量の)コード生成が一般的になった今では、どこまで人間がコードの振る舞いを追えるのかというと、なかなか難しくなってきたかもしれません。個人的にはこうした機能を活用して、チマチマとコードを追いかけるのは大好きですが、そういうのもエージェントにお任せの時代になっちゃうんでしょうかねぇ……。


「Deep Insider Brief ― 技術の“今”にひと言コメント」のインデックス

Deep Insider Brief ― 技術の“今”にひと言コメント

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る