共通機能

共通機能は、拡張機能の重要な構成要素です。ほぼすべての拡張機能がこれらの機能の一部を使用しています。それらを活用する方法を説明します。

コマンド

コマンドは、VS Code の動作の中心です。コマンド パレットを開いてコマンドを実行したり、カスタム キーバインディングをコマンドにバインドしたり、右クリックしてコンテキスト メニューでコマンドを呼び出したりします。

拡張機能でできること:

  • vscode.commands API を使用してコマンドを登録および実行します。
  • contributes.commands 機能拡張ポイントを使用して、コマンド パレットでコマンドを利用できるようにします。

コマンドの詳細については、拡張機能ガイド / コマンド トピックを参照してください。

構成

拡張機能は、contributes.configuration 機能拡張ポイントを使用して拡張機能固有の設定を提供し、workspace.getConfiguration API を使用してそれらを読み取ることができます。

キーバインディング

拡張機能は、カスタム キーバインディングを追加できます。詳細については、contributes.keybindings および キー バインディング トピックを参照してください。

コンテキスト メニュー

拡張機能は、右クリック時に VS Code UI のさまざまな部分に表示されるカスタム コンテキスト メニュー項目を登録できます。詳細については、contributes.menus 機能拡張ポイントを参照してください。

データ ストレージ

データを保存するには 5 つのオプションがあります。

  • ExtensionContext.workspaceState: キー/値ペアを書き込むことができるワークスペース ストレージ。VS Code はストレージを管理し、同じワークスペースが再度開かれたときに復元します。
  • ExtensionContext.globalState: キー/値ペアを書き込むことができるグローバル ストレージ。VS Code はストレージを管理し、拡張機能がアクティブ化されるたびに復元します。globalStatesetKeysForSync メソッドを使用して同期するキーを設定することで、グローバル ストレージ内のキー/値ペアを選択的に同期できます。
  • ExtensionContext.storageUri: 拡張機能に読み取り/書き込みアクセス権があるローカル ディレクトリを指すワークスペース固有のストレージ URI。これは、現在のワークスペースからのみアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。
  • ExtensionContext.globalStorageUri: 拡張機能に読み取り/書き込みアクセス権があるローカル ディレクトリを指すグローバル ストレージ URI。これは、すべてのワークスペースからアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。
  • ExtensionContext.secrets: 暗号化されるシークレット (または機密情報) 用のグローバル ストレージ。これらはマシン間で同期されません。VS Code デスクトップの場合、これは Electron の safeStorage API を利用します。VS Code for the Web の場合、これは二重鍵暗号化 (DKE) 実装を使用します。

拡張機能コンテキストは、拡張機能エントリ ファイルactivate 関数で使用できます。

setKeysForSync の例

拡張機能で異なるマシン間で一部のユーザー状態を保持する必要がある場合は、vscode.ExtensionContext.globalState.setKeysForSync を使用して状態を 設定同期 に提供します。

次のパターンを使用できます。

// on activate
const versionKey = 'shown.version';
context.globalState.setKeysForSync([versionKey]);

// later on show page
const currentVersion = context.extension.packageJSON.version;
const lastVersionShown = context.globalState.get(versionKey);
if (isHigher(currentVersion, lastVersionShown)) {
    context.globalState.update(versionKey, currentVersion);
}

マシン間で状態を共有すると、非表示または表示済みのフラグを共有することで、ウェルカム ページまたは更新ページの複数のインスタンスをユーザーに表示してしまう問題を回避するのに役立ちます。

通知の表示

ほぼすべての拡張機能は、ある時点でユーザーに情報を提示する必要があります。VS Code は、さまざまな重大度の通知メッセージを表示するための 3 つの API を提供しています。

クイック ピック

vscode.QuickPick API を使用すると、ユーザー入力を簡単に収集したり、複数のオプションからユーザーに選択させたりできます。QuickInput サンプル は、この API を示しています。

ファイル ピッカー

拡張機能は、window.showOpenDialog API を使用して、システムのファイル ピッカーを開き、ファイルまたはフォルダーを選択できます。

出力チャネル

出力パネルには、ログ記録に最適な OutputChannel のコレクションが表示されます。window.createOutputChannel API を使用すると、これを簡単に活用できます。

Progress API

vscode.Progress API を使用して、ユーザーに進行状況の更新を報告できます。

進行状況は、ProgressLocation オプションを使用して、さまざまな場所に表示できます。

  • 通知領域
  • ソース管理ビュー
  • VS Code ウィンドウでの一般的な進行状況

Progress サンプル は、この API を示しています。