Python 拡張機能の作成
注: VS Code 拡張機能の開発が初めての場合は、まず 最初の拡張機能 (Your First Extension) のチュートリアルを読み、簡単な Hello World 拡張機能を作成してみることをお勧めします。
Python 拡張機能は、ユーザーのコンピューター上で利用可能な Python 環境を他の拡張機能が扱えるようにするための API を提供しています。自分の拡張機能からこれらの API にアクセスするための型やヘルパーユーティリティを含む、@vscode/python-extension npm モジュールを確認してください。
Python 拡張機能テンプレート
Python 拡張機能テンプレートは、お気に入りの Python ツール用の Visual Studio Code 拡張機能の開発を始めるのに役立ちます。対象は、リンター、フォーマッタ、コード解析、あるいはこれらを組み合わせたものでも構いません。このテンプレートには、ツールを VS Code に統合するための基本的な構成要素が含まれており、前述の Python API にも既にアクセス可能な状態になっています。
プログラミング言語とフレームワーク
この拡張機能テンプレートは、拡張機能側と言語サーバー側の 2 つの部分で構成されています。拡張機能側は TypeScript で記述され、言語サーバー側は pygls (Python language server) ライブラリを使用して Python で記述されています。
このテンプレートを使用する場合、コードの大部分は Python 側の作業になります。ツールと言語サーバープロトコル (Language Server Protocol) を使用して、拡張機能側を統合することになります。pygls は現在、LSP バージョン 3.16 で動作します。
TypeScript 側は、VS Code およびその UI とのやり取りを担当します。拡張機能テンプレートには、ツールで使用できるいくつかの設定が組み込まれています。ツールをサポートするために新しい設定を追加する必要がある場合は、TypeScript を少し触る必要があります。拡張機能テンプレートにはいくつかの設定例が含まれています。また、当社のチームが開発した人気のあるツール向け拡張機能も参考にしてください。
要件
- VS Code 1.64.0 以上
- Python 3.7 以上
- node >= 14.19.0
- npm >= 8.3.0 (
npmは node と一緒にインストールされます。npm のバージョンを確認し、npm install -g npm@8.3.0を使用して更新してください) - VS Code 用 Python 拡張機能
Python の仮想環境の作成と操作方法を理解しておく必要があります。
はじめに
始めるには、テンプレートの README の手順に従ってください。そこでは、テンプレートを使用してリポジトリを作成する方法や、必要なツール(nox タスクランナーなど)およびオプションの依存関係(テストサポート)をインストールする方法を学習できます。
README には最新の手順が記載されており、拡張機能の package.json のプレースホルダー(<pythontool-module>、<pythontool-display-name> など)をカスタマイズする方法についても詳しく説明されています。
テンプレートの機能
テンプレートを介して拡張機能を作成すると、以下の拡張機能コントリビューションが含まれます。<pytool-module> が mytool に、<pytool-display-name> が My Tool に置き換えられたと想定します。
- コマンド My Tool: Restart Server (コマンド ID:
mytool.restart)。 - 以下の設定
mytool.logLevelmytool.argsmytool.pathmytool.importStrategymytool.interpretermytool.showNotification
- 以下の拡張機能アクティベーションのトリガー
- 言語が
pythonの場合。 - 開いているワークスペース内で
.py拡張子のファイルが見つかった場合。 - コマンド
mytool.restartが実行された場合。
- 言語が
- ログ出力用の出力チャネル: 出力 > My Tool。
ツールの統合
生成された bundled/tool/server.py ファイルが、ほとんどの変更を加える場所になります。ファイル内の TODO コメントが、カスタマイズが必要な箇所を示しています。また、他の Python ファイルや Markdown ファイルなど、テンプレート内の他の場所にある TODO コメントも検索してください。MIT ライセンスを維持する場合でも、LICENSE ファイルを確認しておくことをお勧めします。
例
テンプレートから作成された実装例がいくつかあります。
- Pylint - ファイルの
open(開く)、save(保存)、close(閉じる)時のリンティングおよびコードアクションを実装。 - Flake8 - リンティングとコードアクションを実装。
- Black Formatter - Black フォーマッタを統合。
- autopep8 - autopep8 フォーマッタを統合。
- isort - インポートの並べ替えを行うコードアクションを追加。
また、pygls 言語サーバーの統合をより深く理解するために、言語サーバープロトコルの仕様を確認することもできます。
拡張機能の開発
テンプレートの README には、テンプレートに含まれる開発サイクルサポートについて詳しく記載されています。テンプレートには、拡張機能のビルド、実行、デバッグ、テストを行うためのコマンドや構成が含まれています。
開発中に問題が発生した場合は、一般的な問題の解決を支援するトラブルシューティング (Troubleshooting) セクションを参照してください。
パッケージ化と公開
拡張機能を公開する前に、拡張機能固有の package.json フィールド(publisher や license など)を更新する必要があります。また、付随する Markdown ファイル(CODE_OF_CONDUCT.md、CHANGELOG.md など)も更新してください。
拡張機能の公開準備ができたら、nox の build-package タスクを使用して .vsix ファイルを作成し、それを拡張機能の管理ページにアップロードできます。
VS Code 拡張機能の作成と公開が初めての場合は、VS Code メインサイトの拡張機能作成 (extension authoring) トピックで概説されているベストプラクティスに従うことをお勧めします。そこでは、Marketplace で拡張機能を魅力的に見せる方法や、ユーザーが安心してインストールできるように確認済みパブリッシャーになるためのガイダンスが提供されています。