ユーザー設定とワークスペース設定

VS Code は設定可能要素がとにかく多い。なおかつ作用域がユーザーとワークスペースの二種類ある。前者はユーザーが実行する VS Code のどのプロセスでも大域的に適用される設定であり、後者はワークスペース内に保存され、このワークスペースでしか適用されない設定だ。

Attention

Visual Studio Code 利用ノート 冒頭の前提条件に留意すること。

設定エディター

次のどの方法でも設定エディターが開く:

  • メインメニューから File‣Preferences‣Settings を選択する

  • コマンドパレットから Preferences: Open Settings (UI) を実行する

  • コマンドパレットから Preferences: Open User Settings を実行する

  • Activity Bar 歯車アイコンメニューから Settings を選択する

  • Ctrl + , を押す

UI 版か JSON モードの Editor が開くが、当分前者を述べる。

利用者ノート

後者を開いているが前者を開きたい場合、Editor 右上の紙アイコンをクリックする。逆方向も同様。

設定エディターを開くと、目当ての設定項目を検索して発見できる。検索欄から検索すると、条件に一致する項目がハイライト表示され、反対に一致しない設定は隠される。

変更された設定項目は Editor での変更線と同様に青い線で表示される。

設定項目をアクティブにすると、ツリーとの隙間に小さな歯車アイコンが表示される。これをクリックするとコンテキストメニューが開く。ここには次の選択肢がある:

  • Reset Setting: 値を既定値に戻す

  • Copy Setting ID: 設定項目 ID をクリップボードにコピーする

  • Copy Setting as JSON: 設定項目のキーと値の対応をクリップボードにコピーする

  • Sync This Setting: 後述

設定を編集する

設定項目はチェックボックス、入力欄、ドロップダウンリストのいずれかで編集する。

設定グループ

設定項目はグループになっていて簡単にナビゲートすることができる。

最上部に Commoonly Used グループがあり、頻出カスタマイズが表示される。

拡張機能は、独自のカスタム設定を追加することができ、それらの設定は Extensions グループに存在する。

利用者ノート

Text Editor, Workbench, Window, Features, Application, Security の標準グループはいずれも一階層しか子グループを持たないようだ。一方、Extensions グループは複数階層からなるものがある。拡張機能が別の拡張機能を使う場合だろうか。

設定を変更する

本書では Activity Bar を非表示にする方法を述べている。

  1. 設定エディター (UI) を開く。

  2. 検索欄に activity と入力する。

  3. 左のツリーの Appearance をクリックしてエディター上の表示項目をさらに絞る。

  4. 見出し Workbench ‣ Activity Bar: Visible のチェックボックス状態を変更する。

設定値を既定値とは異なる値に変更した場合、箱の左側に青い線が表示される。

小歯車アイコンのコンテキストメニュー項目 Reset Setting を選択すれば、どの設定項目でも既定値に戻すことができる。

設定エディターフィルター

設定エディターの検索欄は管理を容易にするためにフィルター機能を搭載している。検索欄の右側に漏斗アイコンで示されるボタンがあり、簡単に検索フィルターを追加するオプションがいくつか用意されている。

利用者ノート

EXTENSIONS ビューの検索欄の漏斗アイコンメニューと同じ操作で理解しやすい。

変更された設定

フィルターメニューの modified をまず述べる。このメニュー項目を選択する代わりに、入力欄に直接 @modified とタイプしてもよい。

これは、どのような設定を行ったかを確認するものだ。設定値が既定値と異なる場合、または同じであっても設定ファイルで明示的に値が設定されている場合、このフィルターの下に設定値が表示される。このフィルターが便利なのは、設定したことを忘れてしまった場合や、うっかり設定したために動作が期待通りにならない場合だ。

その他のフィルター

その他のフィルターを挙げる:

@ext

拡張機能固有の設定。拡張機能の ID を @ext:ms-python.python.Python のように指定する。

@feature

Features グループ固有の設定。例えば、@feature:explorerEXPLORER の設定項目に絞って表示する。

@id

設定 ID に基づき設定を検索する。@id:workbench.activityBar.visible のようにするのだが、これがわかるくらいなら JSON ファイルを直接編集したほうが早い。

@lang

言語 ID に基づいた言語フィルターを適用する。例えば TypeScript で絞るには @lang:typescript と入力する。

@tag

VS Code システム固有の設定。例えば、Workspace Trust に関する設定は @tag:workspaceTrust で絞る。

検索欄は入力された検索内容を記憶しており、Undo/Redo に対応している。

検索欄右側にある Clear Search Settings Input ボタンをクリックすれば、検索語句やフィルターを素早く消去できる。

拡張機能設定

インストール済み拡張機能は固有の設定を持つ。これらについても標準設定項目と同様に、設定エディターの Extensions グループで確認できる。

または EXTENSIONS ビューから拡張機能を選択し、 Feature Contributions タブを確認してもよい。こちらの方法は閲覧専用だ。

設定ファイル settings.json

これまで述べてきた設定エディターは、ファイル settings.json に保存されている設定値の UI だ。このファイルはコマンド Preferences: Open Settings JSON を実行することで、Editor で直接確認・編集する。設定は、設定 ID と値のペアを指定して、JSON として表現される。

ファイル settings.json の編集時には IntelliSense が機能する。設定と値のスマート補完や説明文ポップアップなどが出現し、設定名や JSON の書式が誤っていることによるエラーに関するハイライト表示もある。

Workbench: Color Customizations など、JSON 直接編集でしか設定できない項目もある。そういう項目については Edit in settings.json リンクが画面上に現れる。

設定ファイルを編集する

本書では Editor の行番号の色をカスタマイズする手順を述べている。重要なのは次の記述なので割愛。

この例では色テーマすべてに対して一斉に行番号を設定しているが、特定の色テーマに対して何かを調整したり、色テーマ拡張を独自に作成したりできる。

Editor 上で settings.json をつねに直接編集したいならば、設定項目 workbench.settings.editor の値を json に変える。

ユーザー設定ファイルのパス

VS Code を Windows にインストールした場合、ユーザー設定ファイルのパスはこうだ:

%APPDATA%\Code\User\settings.json

設定をすべてリセットする

設定エディターのコマンド Reset Setting で個別に設定をリセットすることもできるが、ファイル settings.json を開いて中括弧 {} で囲まれたエントリーを削除すれば、変更した設定すべてをリセットできる。ただし、この場合、以前の設定値を復元できなくなる。

ワークスペース設定

ワークスペース設定とは、プロジェクトに固有の設定だ。プロジェクト開発者間で共有する設定を定義する。ワークスペース設定はユーザー設定より優る。

VS Code のワークスペースは、通常、プロジェクトのルートフォルダーだけだ。ワークスペース設定は、デバッグやタスクの設定と同様にフォルダー .vscode に保存される。また、マルチルートワークスペース機能により、VS Code ワークスペース一つに複数のルートフォルダーを持つことが可能だ。

利用者ノート

本ノートではマルチワークスペースに立ち入っていない。

ワークスペース設定エディターへのアクセス方法:

  • コマンド Preferences: Open Workspace Settings を直接実行する

  • 設定エディターの Workspace タブをクリックする

UI の利用方法はユーザー版と同じだ。

一部、ワークスペース設定として仕様できないユーザー設定項目がある。たとえば、更新や保障に関するアプリケーション全体の設定は、ワークスペース設定で上書きできない。

ワークスペース設定ファイルのパス

ユーザー設定と同様に、ワークスペース設定もファイル settings.json に保存され、コマンド Preferences: Open Workspace Settings (JSON) によって直接編集することができる。

ワークスペース設定ファイルは、ルートフォルダー内のフィルダー .vscode の下に配置される。

マルチルートワークスペースの場合、ワークスペース設定はワークスペース設定ファイル内にある。

ワークスペース設定の settings.json は、プロジェクトの利用者全員で共有されるものだ。

言語モード固有の編集設定

言語モード固有の設定をカスタマイズする一つの方法は、設定エディターを開き、漏斗アイコンをクリックし、言語オプションを選択して、言語フィルターを追加するものだ。また、検索欄に @lang:languageId 形式で直接言語フィルターを入力することもできる。表示される設定は、その言語モードに対して設定可能で、該当する場合はその言語モード固有の設定値が表示される。

言語フィルターが設定されている状態で設定を変更すると、その言語モードに対する作用域で設定が有効になる。例えば @lang:css フィルターがかかっているときにユーザースコープの設定項目 diffEditor.codeLens を変更すると、設定エディターはユーザー設定ファイルの CSS固有のセクションに新しい値を保存する。

検索欄に言語フィルターを複数入力した場合、現時点では最初の言語フィルターしか効かない。

言語モード別にカスタマイズする方法はもう一つあり、グローバルコマンド Preferences: Configure Language Specific Settings を直接実行することだ。 UI の場合には言語選択欄が開くので、所望の言語を選択する。すると、選択した言語の言語フィルターが付いた設定エディターが開き、その言語固有の設定をすることができる。

言語固有のエディター設定は、言語固有でない設定がより狭い作用域であっても、言語固有でないエディター設定よりつねに優先される。例えば、言語固有のユーザー設定は、言語固有でないワークスペース設定より優先される。

言語固有の設定をワークスペースに適用するには、他の設定と同様にワークスペース設定に配置する。ユーザーとワークスペースの両方の作用域で同じ言語の設定が定義されている場合、ワークスペースで定義されているものを優先してマージする。

言語固有の設定コードは次のようなものだ:

{
    "[language1]": {
        "key1": "value1",
        "key2": "value2"
    }
}

settings.json の IntelliSense を利用して、言語固有の設定を見つけられる。エディター設定全部と非エディター設定の一部がサポートされている。言語モードによっては、Preferences: Open Default Settings を実行して表示される defaultSettings.json で言語固有の既定値を確認できる。

Settings precedence

設定は異なる作用域が形成する複数階層で上書きされる。次の一覧で言えば、より後ろの作用域が前のものを上書きしていく:

  • 既定。未構成時の値。

  • ユーザー設定。VS Code プロセスすべてに対して大域的に適用。

  • リモート設定。ユーザーが開いたリモートマシンに適用。

  • ワークスペース設定。開いたフォルダーまたはワークスペースに適用。

  • ワークスペースフォルダー設定。マルチルートワークスペースの特定のフォルダーに適用。

  • 言語固有の既定設定。拡張機能が提供できる、言語固有の既定値。

  • 言語固有のユーザー設定。ユーザー設定と同じかつ言語に固有。

  • 言語固有のリモート設定。リモート設定と同じかつ言語に固有。

  • 言語固有のワークスペース設定。ワークスペース設定と同じかつ言語に固有。

  • 言語固有のワークスペースフォルダー設定。ワークスペースフォルダー設定と同じかつ言語に固有。

  • ポリシー設定。システム管理者が設定。どの他の設定値よりもつねに優先される。

設定値には種類が色々とある:

設定値の例

String

"files.autoSave": "afterDelay"

Boolean

"editor.minimap.enabled": true

Number

"files.autoSaveDelay": 1000

Array

"editor.rulers": []

Object

"search.exclude": { "**/node_modules": true, "**/bower_components": true }

原始型や配列型の値は上書きだ。つまり、他の作用域より優先的に設定された値が、他の作用域の値の代わりに使用される。ただし、Object 型を持つ値はマージされる:キー:値のペアがなければそれが追加され、あれば値が上書きされる。

利用者ノート

この規則は非常に重要だ。

Settings and security

設定項目の中には、実行ファイルパスを指定するようなものがある。例えば、内蔵端末が使用するシェルを選択するなどだ。保障強化のため、このような設定はユーザー設定でのみ定義でき、ワークスペース作用域では定義できないようになっている。

ワークスペース設定でサポートされていない設定の一覧:

  • git.path

  • terminal.external.windowsExec

  • terminal.external.osxExec

  • terminal.external.linuxExec

これらの設定を定義したワークスペースを初めて開くと、VS Code は警告を発し、それ以降は値をつねに無視する。

設定同期

設定同期機能により、VS Code プロセス間でユーザー設定を共有することができる。この機能により、様々なマシンにインストールした VS Code 間で、設定、キーバインド、インストールした拡張機能を共有することが可能だ。設定動機を有効にするには、次のいずれかの方法による:

  • 設定エディター右の Turn on Settings Sync をチェックするか

  • Activity Bar 上 Accounts アイコンクリックのコンテキストメニュー

利用者ノート

コマンドパレットで sync を検索すると関連コマンドも確認できる。試すといい。

既定値

コマンド Preferences: Open Default Settings を実行すると、Editor で defaultSettings.json を読み取り専用で見ることができる。