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