共通機能
共通機能は、拡張機能にとって重要な構成要素です。ほとんどすべての拡張機能でこれらの機能の一部が使用されます。ここでは、それらを活用する方法を説明します。
コマンド
コマンドは、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 がストレージを管理し、各拡張機能のアクティベーション時に復元します。globalState
のsetKeysForSync
メソッドを使用して同期するキーを設定することで、グローバルストレージ内のキーと値のペアを選択的に同期できます。ExtensionContext.storageUri
: 拡張機能が読み書きアクセスを持つローカルディレクトリを指す、ワークスペース固有のストレージ URI です。現在のワークスペースからのみアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。ExtensionContext.globalStorageUri
: 拡張機能が読み書きアクセスを持つローカルディレクトリを指すグローバルストレージ URI です。すべてのワークスペースからアクセス可能な大きなファイルを保存する必要がある場合に適したオプションです。ExtensionContext.secrets
: 暗号化されるシークレット(または機密情報)のためのグローバルストレージです。これらはマシン間で同期されません。VS Code デスクトップ版では、Electron の safeStorage API を利用します。VS Code 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 を使用して簡単に利用できます。
進捗API
vscode.Progress
API を使用して、ユーザーに進捗状況を報告できます。
ProgressLocation
オプションを使用して、さまざまな場所に進行状況を表示できます。
- 通知領域
- ソース管理ビュー
- VS Code ウィンドウでの一般的な進捗
Progress サンプルはこの API を示しています。