共通機能
共通機能は、拡張機能の重要な構成要素です。ほとんどすべての拡張機能がこれらの機能の一部を使用しています。ここでは、それらを活用する方法を説明します。
コマンド
コマンドは、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 を利用します。Web 用の VS Code の場合、Double Key Encryption (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 を示しています。