一般的な機能
共通機能は、拡張機能を作成する上で重要な構成要素です。ほぼすべての拡張機能がこれらの機能の一部を使用します。それらの活用方法を以下に示します。
コマンド
コマンドは、VS Code の動作の中心となるものです。コマンドパレットを開いてコマンドを実行したり、カスタムキーバインドをコマンドに割り当てたり、右クリックでコンテキストメニューからコマンドを呼び出したりすることができます。
拡張機能は以下を行うことができます
vscode.commandsAPI を使用してコマンドを登録および実行する。contributes.commands寄与ポイントを使用して、コマンドパレットでコマンドを利用できるようにする。
コマンドの詳細については、「拡張機能ガイド / コマンド」のトピックを参照してください。
構成
拡張機能は、contributes.configuration 寄与ポイントを使用して拡張機能固有の設定を寄与し、workspace.getConfiguration API を使用してそれらを読み取ることができます。
キーバインド
拡張機能はカスタムキーバインドを追加できます。詳細については、contributes.keybindings および「キーバインド」のトピックを参照してください。
コンテキストメニュー
拡張機能は、VS Code UI のさまざまな場所で右クリック時に表示されるカスタムコンテキストメニュー項目を登録できます。詳細については、contributes.menus 寄与ポイントを参照してください。
データストレージ
データを保存するための5つのオプションがあります
ExtensionContext.workspaceState: キーと値のペアを書き込めるワークスペースストレージです。VS Code がストレージを管理し、同じワークスペースが再度開かれたときに復元されます。ExtensionContext.globalState: キーと値のペアを書き込めるグローバルストレージです。VS Code がストレージを管理し、拡張機能がアクティブ化されるたびに復元されます。globalStateのsetKeysForSyncメソッドを使用して同期するキーを設定することで、グローバルストレージ内のキーと値のペアを選択的に同期できます。ExtensionContext.storageUri: 拡張機能が読み取り/書き込み権限を持つローカルディレクトリを指す、ワークスペース固有のストレージ URI です。現在のワークスペースからのみアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。ExtensionContext.globalStorageUri: 拡張機能が読み取り/書き込み権限を持つローカルディレクトリを指す、グローバルストレージ URI です。すべてのワークスペースからアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。ExtensionContext.secrets: 暗号化されるシークレット(または機密情報)のためのグローバルストレージです。これらはマシン間で同期されません。VS Code デスクトップ版では、Electron の safeStorage API を利用します。Web 版の VS Code では、二重鍵暗号化 (DKE) 実装を使用します。
拡張機能のコンテキストは、「拡張機能エントリーファイル」内の activate 関数で利用可能です。
setKeysForSync の例
拡張機能でユーザーの状態を異なるマシン間で保持する必要がある場合は、vscode.ExtensionContext.globalState.setKeysForSync を使用して 設定同期 (Setting Sync) にその状態を提供してください。
以下のパターンを使用できます
// 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 を使用して簡単に活用できます。
プログレス API
vscode.Progress API を使用して、ユーザーに進捗状況を報告できます。
ProgressLocation オプションを使用して、進捗をさまざまな場所に表示できます。
- 通知領域
- ソース管理ビュー
- VS Code ウィンドウ内の全体的な進捗
Progress サンプルでこの API を解説しています。