Python拡張機能の作成
注: VS Code拡張機能の作成に慣れていない場合は、最初に「初めての拡張機能」チュートリアルを読み、簡単な「Hello World」拡張機能の作成を試すことをお勧めします。
Python拡張機能は、ユーザーのマシンで利用可能なPython環境と連携するためのAPIを他の拡張機能に提供します。拡張機能からこれらのAPIにアクセスするための型とヘルパーユーティリティを含む@vscode/python-extension npmモジュールを確認してください。
Python拡張機能テンプレート
Python拡張機能テンプレートは、お気に入りのPythonツール用のVisual Studio Code拡張機能の構築を開始するのに役立ちます。これは、リンター、フォーマッタ、またはコード分析、あるいはそれらすべてを組み合わせたものである可能性があります。このテンプレートは、ツールをVS Codeに統合する拡張機能を構築するために必要な基本的な構成要素を提供し、上記のPython APIへのアクセスもすでに含まれています。
プログラミング言語とフレームワーク
拡張機能テンプレートは、拡張機能部分と言語サーバー部分の2つの部分で構成されています。拡張機能部分はTypeScriptで記述され、言語サーバー部分はpygls
(Python言語サーバー) ライブラリを介して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.logLevel
mytool.args
mytool.path
mytool.importStrategy
mytool.interpreter
mytool.showNotification
- 拡張機能アクティベーションのトリガー
- 言語
python
の場合。 - 開いているワークスペースに
.py
拡張子のファイルが見つかった場合。 - コマンド
mytool.restart
の場合。
- 言語
- ログ出力チャネル出力 > My Tool。
ツールの統合
生成されたbundled/tool/server.py
ファイルは、ほとんどの変更を行う場所です。ファイル内のTODO
コメントは、さまざまなカスタマイズポイントを指摘しています。また、他のPythonファイルやMarkdownファイルなど、テンプレートの他の場所にあるTODO
コメントも検索してください。MITライセンスを維持したい場合でも、LICENSEファイルをレビューすることをお勧めします。
例
テンプレートから作成されたいくつかの実装例があります。
- Pylint - ファイルの
open
、save
、close
時のlintingとコードアクションを実装しています。 - Flake8 - lintingとコードアクションを実装しています。
- Black Formatter - Blackフォーマッターを統合します。
- autopep8 - autopep8フォーマッターを統合します。
- isort - インポートをソートするためのコードアクションを追加します。
Language Server Protocolの仕様を確認することで、pygls
言語サーバーの統合をよりよく理解することもできます。
拡張機能の開発
テンプレートのREADMEには、テンプレートに含まれる開発サイクルサポートについて詳しく説明されています。テンプレートには、拡張機能をビルド、実行、デバッグ、テストできるコマンドと構成が含まれています。
開発中に問題が発生した場合は、一般的な問題に役立つトラブルシューティングセクションがあります。
パッケージングと公開
拡張機能を公開する前に、特定の拡張機能のために拡張機能のpackage.json
フィールド(publisher
やlicense
など)を更新する必要があります。また、補助的なMarkdownファイル(CODE_OF_CONDUCT.md
、CHANGELOG.md
など)も更新することをお勧めします。
拡張機能の公開準備が整ったら、.vsix
ファイルを作成するためのnox
build-package
タスクがあり、その後、拡張機能の管理ページにアップロードできます。
VS Code拡張機能の作成と公開に慣れていない場合は、メインのVS Codeの拡張機能の作成トピックに概説されているベストプラクティスに従うことをお勧めします。ここでは、拡張機能をマーケットプレイスで見栄え良くする方法や、ユーザーが安心して拡張機能をインストールできるように、検証済みパブリッシャーになる方法に関するガイダンスが見つかります。