- 技術 💻
VS Code settings.jsonおすすめ設定|コピペ用全文と各項目解説
settings.json とは、VS Code の設定を JSON 形式で書いておくファイルです。 設定画面(GUI)で変えた内容もここに保存されるため、ファイルを直接編集すれば、設定のまとめ書き・コピー・チームでの共有が簡単になります。
この記事では、settings.json の場所と優先順位を図と表で整理したうえで、目的別にまとめたコピペ用の settings.json 全文と、全51キーの「既定値・推奨値・理由」の表を紹介します。設定キーと既定値は VS Code 1.140.0 のソースコード(公式リポジトリのタグ)と公式ドキュメントで確認し、JSONC(コメント付きJSON)として構文チェックした結果も載せています。キーボードショートカットは別記事「VSCodeショートカット一覧」で扱っているので、ここでは設定ファイルに絞って解説します。
settings.jsonの早見表
| 知りたいこと | 答え |
|---|---|
| 開き方 | コマンドパレット(Ctrl+Shift+P / Cmd+Shift+P)→ Preferences: Open User Settings (JSON) |
| ユーザー設定の場所(Windows) | %APPDATA%\Code\User\settings.json |
| ユーザー設定の場所(macOS) | $HOME/Library/Application Support/Code/User/settings.json |
| ユーザー設定の場所(Linux) | $HOME/.config/Code/User/settings.json |
| プロファイルごとの設定 | .../Code/User/profiles/<プロファイルID>/settings.json |
| ワークスペース設定 | フォルダー直下の .vscode/settings.json(マルチルートは .code-workspace の "settings") |
| 優先順位 | 既定 < ユーザー < リモート < ワークスペース < フォルダー < 言語別 < ポリシー |
| 言語ごとに変える | "[python]": { ... }、複数なら "[javascript][typescript]": { ... } |
| オブジェクト型の設定 | 上位と下位の値がマージされる(files.exclude など) |
| 配列・文字列・数値 | 上位の値で丸ごと上書きされる |
| コメント | // と /* */ が書ける(JSON with Comments) |
| チームで共有 | .vscode/settings.json と .vscode/extensions.json を Git 管理 |
| ワークスペースで上書きできない設定 | git.path、外部ターミナルのパスなど、セキュリティに関わる一部の設定 |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「VS Code settings.jsonおすすめ設定|コピペ用全文と各項目解説」
settings.jsonの場所と開き方
コマンドパレットから開く(いちばん確実)
| コマンド | 開くファイル |
|---|---|
| Preferences: Open User Settings (JSON) | 現在のプロファイルのユーザー設定 |
| Preferences: Open Workspace Settings (JSON) | ワークスペース設定(.vscode/settings.json) |
| Preferences: Open Default Settings (JSON) | 既定値の一覧(読み取り専用) |
| Preferences: Open Application Settings (JSON) | プロファイル以外を使っているときの既定プロファイルの設定 |
設定画面(Ctrl+, / Cmd+,)の右上にある「ファイルのアイコン」からも JSON 表示に切り替えられます。 設定画面で値を変えると、その差分だけが settings.json に書き込まれます。つまり settings.json には「既定値から変えた項目」だけが並ぶのが正常な状態です。
OSごとのファイルパス
| OS | ユーザー設定 | プロファイル設定 |
|---|---|---|
| Windows | %APPDATA%\Code\User\settings.json |
%APPDATA%\Code\User\profiles\<ID>\settings.json |
| macOS | $HOME/Library/Application Support/Code/User/settings.json |
$HOME/Library/Application Support/Code/User/profiles/<ID>/settings.json |
| Linux | $HOME/.config/Code/User/settings.json |
$HOME/.config/Code/User/profiles/<ID>/settings.json |
Insiders 版では Code の部分が Code - Insiders になります。バックアップや別PCへの移行では、このファイルをコピーするか、設定の同期(Settings Sync)を使うと手軽です。
設定の優先順位(User・Remote・Workspace・言語別・Profiles)
優先順位の図
flowchart LR
A[既定値] --> B[ユーザー設定<br>プロファイル単位]
B --> C[リモート設定<br>SSH・WSL・コンテナ]
C --> D[ワークスペース設定<br>.vscode/settings.json]
D --> E[ワークスペースフォルダー設定<br>マルチルート時]
E --> F[言語別設定<br>同じ順で既定→ユーザー→…→フォルダー]
F --> G[ポリシー設定<br>組織の管理者]
右に行くほど優先されます。 公式ドキュメントの順序は次の11段階です。
| 順位(低→高) | スコープ | 書く場所 |
|---|---|---|
| 1 | 既定値 | VS Code 本体・拡張機能 |
| 2 | ユーザー | ユーザーの settings.json(プロファイルごと) |
| 3 | リモート | リモート先のマシン設定(Remote - SSH、WSL、Dev Containers) |
| 4 | ワークスペース | .vscode/settings.json または .code-workspace |
| 5 | ワークスペースフォルダー | マルチルートの各フォルダーの .vscode/settings.json |
| 6〜10 | 言語別(既定→ユーザー→リモート→ワークスペース→フォルダー) | "[python]": {} などのブロック |
| 11 | ポリシー | 組織の管理者が配布する設定(変更不可) |
言語別設定は「言語を指定しない設定」より強い
{
"editor.tabSize": 4, // ユーザー設定(全体)
"[typescript]": {
"editor.tabSize": 2 // TypeScript だけ 2
}
}
ワークスペースに "editor.tabSize": 8 と書いても、ユーザー設定の [typescript] ブロックのほうが優先されます(言語別の設定が、言語を指定しない設定より上位のため)。チーム設定で言語ごとの値をそろえたいときは、ワークスペース側にも [typescript] ブロックで書きます。
また、"[javascript][typescript]": {} のような複数言語ブロックより、単一言語ブロックの値が優先されます。
オブジェクトはマージ、配列は上書き
| 型 | 例 | 上位スコープに書いたときの動き |
|---|---|---|
| 真偽値・数値・文字列 | editor.formatOnSave |
丸ごと上書き |
| 配列 | editor.rulers、git.branchProtection |
丸ごと上書き(足し算されない) |
| オブジェクト | files.exclude、search.exclude、github.copilot.enable |
キー単位でマージ。同じキーは上位が勝つ |
たとえばユーザー設定の files.exclude に **/__pycache__ を、ワークスペースに **/dist を書くと、両方が除外されます。
Profiles(プロファイル)との関係
プロファイルは「ユーザー設定のセット」を丸ごと切り替える機能です。 Python 用、Web 用、発表用(文字を大きく)などを分けて持てます。プロファイルを切り替えると、ユーザー設定・拡張機能・キーバインドなどが入れ替わり、ワークスペース設定はそのまま適用されます。
| 用途 | 向いている仕組み |
|---|---|
| 言語ごとにタブ幅・フォーマッターを変える | 言語別設定 [python] |
| リポジトリごとにルールをそろえる | ワークスペース設定 .vscode/settings.json |
| 作業の種類ごとに拡張機能ごと切り替える | プロファイル |
| 自分の好み(フォント、テーマ) | ユーザー設定 |
コピペ用 settings.json 全文(おすすめ設定)
前提:VS Code 1.140、拡張機能 Python(ms-python.python)・Ruff(charliermarsh.ruff)・Prettier(esbenp.prettier-vscode)・ESLint(dbaeumer.vscode-eslint)・GitHub Copilot を使う想定です。使わない言語のブロックは削除してかまいません。ユーザー設定(Preferences: Open User Settings (JSON))に貼り付けます。
{
// ===== 1. エディタ共通 =====
"editor.fontSize": 14,
"editor.fontFamily": "'HackGen Console NF', Consolas, 'Courier New', monospace",
"editor.renderWhitespace": "boundary",
"editor.rulers": [80, 120],
"editor.minimap.enabled": false,
"editor.guides.bracketPairs": "active",
"editor.stickyScroll.enabled": true,
"editor.linkedEditing": true,
"editor.cursorBlinking": "smooth",
"editor.smoothScrolling": true,
"editor.mouseWheelZoom": true,
// ===== 2. ファイル・保存 =====
"files.autoSave": "onFocusChange",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.eol": "\n",
"files.autoGuessEncoding": true,
"files.exclude": {
"**/__pycache__": true,
"**/.pytest_cache": true
},
"search.exclude": {
"**/dist": true,
"**/.venv": true
},
// ===== 3. 保存時の整形 =====
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file",
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
// ===== 4. 画面・エクスプローラー =====
"workbench.startupEditor": "none",
"workbench.tree.indent": 16,
"workbench.editor.enablePreview": false,
"explorer.compactFolders": false,
"explorer.confirmDragAndDrop": false,
"explorer.fileNesting.enabled": true,
// ===== 5. Python =====
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
}
},
"python.analysis.typeCheckingMode": "basic",
"python.terminal.activateEnvironment": true,
// ===== 6. JavaScript / TypeScript =====
"[javascript][typescript][javascriptreact][typescriptreact][json][jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"js/ts.updateImportsOnFileMove.enabled": "always",
"js/ts.preferences.importModuleSpecifier": "non-relative",
// ===== 7. Markdown =====
"[markdown]": {
"editor.wordWrap": "on",
"files.trimTrailingWhitespace": false
},
"markdown.validate.enabled": true,
"markdown.updateLinksOnFileMove.enabled": "prompt",
// ===== 8. Git =====
"git.autofetch": true,
"git.pruneOnFetch": true,
"git.confirmSync": false,
"git.branchProtection": ["main"],
"scm.defaultViewMode": "tree",
"diffEditor.ignoreTrimWhitespace": false,
// ===== 9. ターミナル =====
"terminal.integrated.scrollback": 10000,
"terminal.integrated.fontSize": 13,
"terminal.integrated.copyOnSelection": true,
"terminal.integrated.smoothScrolling": true,
// ===== 10. AI 補完(GitHub Copilot) =====
"github.copilot.enable": {
"*": true,
"plaintext": false,
"markdown": true,
"scminput": false
},
"github.copilot.nextEditSuggestions.enabled": true,
"chat.agent.enabled": true,
"chat.tools.global.autoApprove": false
}
フォントの HackGen Console NF は日本語と英数字の幅がそろう等幅フォントの一例です。インストールしていない場合は次の候補(Consolas など)が使われるので、そのまま貼っても動作します。
各設定項目の解説表(既定値・推奨値・理由)
既定値は VS Code 1.140.0 のソースコード(拡張機能は同梱の package.json)で確認した値です。Python 拡張の項目は公式の Python 設定リファレンスで確認しました。
1. エディタ共通
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
editor.fontSize |
14(macOS は 12) | 14 | 長時間でも読みやすい大きさ |
editor.fontFamily |
OS ごとの等幅フォント | 日本語対応の等幅フォント | 全角と半角の幅がそろい、表やコメントが崩れにくい |
editor.renderWhitespace |
"selection" |
"boundary" |
単語間の1スペースは隠し、連続スペースやタブだけ表示 |
editor.rulers |
[] |
[80, 120] |
1行の長さの目安線 |
editor.minimap.enabled |
true |
false |
横幅をコード表示に使う(好みで) |
editor.guides.bracketPairs |
false |
"active" |
カーソル位置の括弧の範囲だけ縦線で表示 |
editor.stickyScroll.enabled |
true |
true |
今いる関数・クラス名を上部に固定表示 |
editor.linkedEditing |
false |
true |
HTML の開始タグを変えると終了タグも連動 |
editor.cursorBlinking |
"blink" |
"smooth" |
カーソルの点滅をやわらかく |
editor.smoothScrolling |
false |
true |
スクロール位置を目で追いやすい |
editor.mouseWheelZoom |
false |
true |
Ctrl(Cmd)+ホイールで文字サイズを変更 |
2. ファイル・保存
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
files.autoSave |
"off"(Web版は "afterDelay") |
"onFocusChange" |
別ファイル・ターミナルに移ると保存。保存忘れを防ぐ |
files.trimTrailingWhitespace |
false |
true |
行末の空白を保存時に削除。差分が見やすい |
files.insertFinalNewline |
false |
true |
末尾に改行を入れる。Git の「No newline」表示を防ぐ |
files.trimFinalNewlines |
false |
true |
末尾の余分な空行を1つにそろえる |
files.eol |
"auto" |
"\n" |
新規ファイルの改行を LF に統一 |
files.autoGuessEncoding |
false |
true |
Shift_JIS などのファイルを開いたときに文字化けしにくい |
files.exclude |
.git などを除外 |
キャッシュを追加 | エクスプローラーをすっきり(オブジェクトなのでマージ) |
search.exclude |
node_modules などを除外 |
ビルド成果物を追加 | 検索結果のノイズを減らす |
files.autoSave を "afterDelay" にすると、保存時の整形(formatOnSave)は手動保存のときだけ動きます(公式の設定説明より)。整形を毎回効かせたいなら、"onFocusChange" か "off" が使いやすい選択です。
3. 保存時の整形
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
editor.formatOnSave |
false |
true |
保存するたびにフォーマッターで整形 |
editor.formatOnSaveMode |
"file" |
"file" |
ファイル全体を整形。既存コードの整形差分を避けたい場合は "modifications"(Git 管理下の変更行のみ) |
editor.codeActionsOnSave |
{} |
{"source.fixAll": "explicit"} |
保存時に自動修正を実行 |
editor.defaultFormatter |
null |
言語ブロックで指定 | フォーマッターが複数あるときの選択ダイアログを防ぐ |
codeActionsOnSave の値は "explicit"(手動保存のときだけ)、"always"(自動保存でも実行)、"never" の3つです。VS Code のソースでも、"always" は保存の種類に関係なく、"explicit" は手動保存のときだけ実行する作りになっています。以前の true / false も "explicit" / "never" として扱われます。
4. 画面・エクスプローラー
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
workbench.startupEditor |
"welcomePage" |
"none" |
起動時にすぐ作業に入れる |
workbench.tree.indent |
8 |
16 |
フォルダーの階層が見分けやすい |
workbench.editor.enablePreview |
true |
false |
シングルクリックで開いたタブが置き換わらない |
explorer.compactFolders |
true |
false |
src/main/java のような1階層ずつのフォルダーを分けて表示 |
explorer.confirmDragAndDrop |
true |
false |
ドラッグでの移動時の確認を省く(好みで) |
explorer.fileNesting.enabled |
false |
true |
package-lock.json などを関連ファイルの下にまとめる |
5. Python
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
[python] → editor.defaultFormatter |
なし | "charliermarsh.ruff" |
Ruff で高速に整形 |
[python] → codeActionsOnSave |
なし | source.fixAll、source.organizeImports |
保存時に lint 修正と import 並べ替え |
python.analysis.typeCheckingMode |
"off" |
"basic" |
型の不一致をエディタ上で表示("strict" も選べる) |
python.terminal.activateEnvironment |
true |
true |
新しいターミナルで選択中の仮想環境を自動で有効化 |
6. JavaScript / TypeScript
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
言語ブロック → editor.defaultFormatter |
なし | "esbenp.prettier-vscode" |
Prettier で整形をそろえる |
言語ブロック → editor.tabSize |
4 |
2 |
JS/TS で一般的なインデント幅 |
js/ts.updateImportsOnFileMove.enabled |
"prompt" |
"always" |
ファイル移動時に import パスを自動更新 |
js/ts.preferences.importModuleSpecifier |
"shortest" |
"non-relative" |
tsconfig の paths を使った import を優先 |
VS Code 1.140 では、JavaScript と TypeScript の設定が js/ts.* という共通の名前にまとめられ、従来の typescript.* / javascript.* の多くは非推奨(deprecated)表示になっています(同梱の package.json で確認)。古い記事の typescript.updateImportsOnFileMove.enabled などは、js/ts. 版に書き換えると警告が出ません。
| 従来のキー | 1.140 での推奨キー |
|---|---|
typescript.updateImportsOnFileMove.enabled / javascript.updateImportsOnFileMove.enabled |
js/ts.updateImportsOnFileMove.enabled |
typescript.preferences.importModuleSpecifier |
js/ts.preferences.importModuleSpecifier |
typescript.tsdk |
js/ts.tsdk.path |
typescript.inlayHints.parameterNames.enabled |
js/ts.inlayHints.parameterNames.enabled |
7. Markdown
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
[markdown] → editor.wordWrap |
"off" |
"on" |
長い文章を折り返して表示 |
[markdown] → files.trimTrailingWhitespace |
(全体設定を継承) | false |
行末2スペースの改行を残す |
markdown.validate.enabled |
false |
true |
リンク切れ・存在しない見出しへのリンクを警告 |
markdown.updateLinksOnFileMove.enabled |
"never" |
"prompt" |
ファイル移動時にリンクの更新を提案 |
8. Git
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
git.autofetch |
false |
true |
定期的に fetch し、リモートの更新に気づきやすい |
git.pruneOnFetch |
false |
true |
削除済みのリモートブランチを一覧から消す |
git.confirmSync |
true |
false |
同期ボタンの確認を省く(好みで) |
git.branchProtection |
[] |
["main"] |
main で直接コミットしようとすると確認が出る |
scm.defaultViewMode |
"list" |
"tree" |
変更ファイルをフォルダー構造で表示 |
diffEditor.ignoreTrimWhitespace |
true |
false |
行頭・行末の空白の差分も表示(レビューの見落とし防止) |
9. ターミナル
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
terminal.integrated.scrollback |
1000 |
10000 |
長いログもさかのぼれる |
terminal.integrated.fontSize |
14(macOS は 12) | 13 | エディタより少し小さくして情報量を増やす |
terminal.integrated.copyOnSelection |
false |
true |
選択しただけでコピー |
terminal.integrated.smoothScrolling |
false |
true |
スクロールを目で追いやすい |
10. AI 補完(GitHub Copilot)
| 設定キー | 既定値 | 推奨値 | 理由 |
|---|---|---|---|
github.copilot.enable |
{"*": true, "plaintext": false, "markdown": false, "scminput": false} |
markdown を true |
ドキュメントでも補完を使う(不要なら既定のまま) |
github.copilot.nextEditSuggestions.enabled |
true |
true |
次に編集しそうな箇所の提案 |
chat.agent.enabled |
true |
true |
チャットのエージェントモードを使う |
chat.tools.global.autoApprove |
false |
false |
ツール実行のたびに確認を出す(既定のまま推奨) |
github.copilot.enable はオブジェクト型なので、書いたキーだけが既定値とマージされます。言語IDごとに true / false を切り替えられます。AI関連の設定は更新が早いので、公式の「AI settings reference」で最新のキー名を確認してから追加すると安心です。
チームで共有する .vscode/settings.json と extensions.json
チームで共有するワークスペース設定には「整形・コード規約に関わる設定」だけを置き、フォントやテーマなどの好みはユーザー設定に任せるのが続けやすい分け方です。
.vscode/settings.json(テンプレート)
{
// チーム共通:整形とコード規約だけを置く(見た目の好みは各自のユーザー設定へ)
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"files.eol": "\n",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"[javascript][typescript][javascriptreact][typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff"
},
"js/ts.tsdk.path": "node_modules/typescript/lib",
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/coverage": true
}
}
| 項目 | 共有する理由 |
|---|---|
formatOnSave とフォーマッター指定 |
人によって整形結果が変わらない |
files.eol |
Windows と Mac/Linux が混在しても改行コードがそろう |
js/ts.tsdk.path |
エディタの型チェックをリポジトリの TypeScript バージョンに合わせる(初回に切り替えの確認が出る) |
python.defaultInterpreterPath |
uv venv などで作った .venv を最初から選択 |
python.defaultInterpreterPath は、Windows では ${workspaceFolder}\\.venv\\Scripts\\python.exe になります。OS が混在するチームでは、この行はユーザー設定に任せる方法もあります。
.vscode/extensions.json(テンプレート)
{
// 「推奨」タブに表示される拡張機能(ID は Marketplace の「発行元.名前」)
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"charliermarsh.ruff",
"ms-python.python",
"editorconfig.editorconfig"
],
"unwantedRecommendations": []
}
このファイルがあると、リポジトリを開いたときに「推奨拡張機能をインストールしますか?」の通知が出ます。 拡張機能の ID は、拡張機能の詳細画面の歯車メニュー「拡張機能 ID のコピー」で取得できます。
ワークスペースで上書きできない設定
| 種類 | 例 | 理由 |
|---|---|---|
| セキュリティに関わるパス | git.path、terminal.external.windowsExec など |
他人のリポジトリを開いただけで任意のプログラムが実行されないように |
| アプリケーション全体の設定 | 更新・セキュリティ関連 | ウィンドウやワークスペースをまたぐ設定のため |
| 制限モード(Restricted Mode) | 信頼していないフォルダー | 一部の設定・拡張機能の動作が制限される |
settings.jsonを構文チェックした結果
VS Code 本体はこの検証環境にないため、エディタ上での表示は未確認です。 代わりに、次の2点を Node.js で確認しました。
- VS Code と同じ JSONC パーサー(npm の
jsonc-parser3.3.1)で構文エラーがないか - 設定キーが VS Code 1.140.0 のソースコード(GitHub の公式リポジトリ、タグ
1.140.0)に存在するか
# 前提:Node.js 22、作業フォルダで
npm i jsonc-parser
# VS Code のソースを必要な部分だけ取得
git clone --depth 1 --filter=blob:none --sparse https://github.com/microsoft/vscode.git vscode-src
cd vscode-src && git fetch --depth 1 origin tag 1.140.0 && git checkout 1.140.0
git sparse-checkout set --no-cone 'src/vs/*' '/extensions/git/package.json' '/extensions/typescript-language-features/package.json' '/extensions/markdown-language-features/package.json' '/extensions/copilot/package.json'
// check-settings.mjs
import fs from "node:fs";
import { execSync } from "node:child_process";
import { parse, printParseErrorCode } from "jsonc-parser";
const VSCODE_SRC = process.env.VSCODE_SRC; // VS Code 1.140.0 のソース
const extProps = {};
for (const f of ["git", "typescript-language-features", "markdown-language-features", "copilot"]) {
const j = JSON.parse(fs.readFileSync(`${VSCODE_SRC}/extensions/${f}/package.json`, "utf8"));
for (const c of [].concat(j.contributes.configuration)) Object.assign(extProps, c.properties);
}
const grep = (s) => { try { execSync(`grep -rqF "${s}" ${VSCODE_SRC}/src`); return true; } catch { return false; } };
// 'editor.xxx' はエディタオプションとして 'xxx' の名前で登録されているものもある
const inCore = (k) => grep(`'${k}'`) || (k.startsWith("editor.") && grep(`, '${k.slice(7)}'`));
const THIRD = /^(python\.)/; // Python 拡張(別リポジトリ)の設定
function lineCol(text, offset) {
const lines = text.slice(0, offset).split("\n");
return `${lines.length}:${lines.at(-1).length + 1}`;
}
for (const file of process.argv.slice(2)) {
const text = fs.readFileSync(file, "utf8");
const errors = [];
const data = parse(text, errors, { allowTrailingComma: false, disallowComments: false });
console.log(`\n== ${file}`);
if (errors.length) {
for (const e of errors) console.log(` 構文エラー ${printParseErrorCode(e.error)} at ${lineCol(text, e.offset)}`);
continue;
}
if (file.endsWith("extensions.json")) { console.log(` OK: recommendations ${data.recommendations.length} 件`); continue; }
const keys = [];
for (const [k, v] of Object.entries(data)) {
if (k.startsWith("[")) for (const ik of Object.keys(v)) keys.push(ik);
else keys.push(k);
}
const uniq = [...new Set(keys)];
let ok = 0;
for (const k of uniq) {
const where = extProps[k] ? "builtin-ext" : inCore(k) ? "core" : THIRD.test(k) ? "python-ext" : null;
if (where === "python-ext") console.log(` - ${k} (Python 拡張: 公式リファレンスで確認)`);
else if (where) ok++;
else console.log(` NG ${k} (1.140.0 のソースに見つからない)`);
}
console.log(` OK: JSONC 構文エラーなし / キー ${uniq.length} 個中 ${ok} 個を VS Code 1.140.0 のソースで確認`);
}
実行結果(Node.js v22.22.2):
$ VSCODE_SRC=./vscode-src node check-settings.mjs settings.json .vscode/settings.json .vscode/extensions.json
== settings.json
- python.analysis.typeCheckingMode (Python 拡張: 公式リファレンスで確認)
- python.terminal.activateEnvironment (Python 拡張: 公式リファレンスで確認)
OK: JSONC 構文エラーなし / キー 51 個中 49 個を VS Code 1.140.0 のソースで確認
== .vscode/settings.json
- python.defaultInterpreterPath (Python 拡張: 公式リファレンスで確認)
OK: JSONC 構文エラーなし / キー 10 個中 9 個を VS Code 1.140.0 のソースで確認
== .vscode/extensions.json
OK: recommendations 5 件
Python 以外のキーはすべて VS Code 1.140.0 のソース(本体と同梱拡張機能)に存在し、Python 拡張の3項目は公式の Python 設定リファレンスで確認しました。 Ruff・Prettier・ESLint は拡張機能 ID の指定だけで、それぞれの拡張機能の設定キーは使っていません。
よくある構文エラーの例
カンマ抜けと末尾カンマを含むファイルをチェックした結果です。
{
// 末尾カンマと、カンマ抜け
"editor.formatOnSave": true
"files.eol": "\n",
}
== bad.json
構文エラー CommaExpected at 4:3
構文エラー PropertyNameExpected at 5:1
構文エラー ValueExpected at 5:1
4行目の先頭で「カンマが必要」と判定されています。直し方は、3行目の末尾に , を足し、最後の項目の後ろの , を消すことです。settings.json に構文エラーがあると、意図した設定が反映されないことがあります。編集後は問題パネル(Ctrl+Shift+M / Cmd+Shift+M)で赤い波線がないか確認すると安心です。
設定が反映されないときのチェックリスト
| 症状 | 確認すること | 直し方 |
|---|---|---|
| ユーザー設定が効かない | ワークスペースや言語別の設定で上書きされていないか | 設定画面で項目を検索し、「ワークスペース」タブで値を確認 |
| 別のプロファイルで設定が消えた | 現在のプロファイル名(左下の歯車) | プロファイルごとに設定を持つ。必要な項目をコピー |
| 保存しても整形されない | editor.defaultFormatter が未指定、または拡張機能が未インストール |
言語ブロックでフォーマッターを指定 |
| 自動保存で整形されない | files.autoSave が "afterDelay" |
"onFocusChange" に変えるか、手動保存する |
| 設定キーに波線や取り消し線が出る | 未知のキー(拡張機能がない)、または非推奨のキー | 拡張機能を入れる、js/ts.* など新しいキーに置き換え |
| ワークスペース設定が効かない | 制限モードになっている | フォルダーを信頼する(Manage Workspace Trust) |
git.path をワークスペースに書いたが効かない |
ユーザー設定専用の項目 | ユーザー設定に書く |
よくある質問
Q. settings.json はどこにありますか?
A. Windows は %APPDATA%\Code\User\settings.json、macOS は $HOME/Library/Application Support/Code/User/settings.json、Linux は $HOME/.config/Code/User/settings.json です。いちばん確実なのは、コマンドパレットで「Preferences: Open User Settings (JSON)」を実行する方法です。プロファイルを使っている場合は、そのプロファイル用のファイルが開きます。
Q. ユーザー設定とワークスペース設定、どちらに書けばよいですか? A. 自分の好み(フォント、テーマ、ミニマップ)はユーザー設定、チームでそろえたいルール(フォーマッター、改行コード、タブ幅)はワークスペース設定が基本です。ワークスペース設定のほうが優先されるので、チームのルールが個人の設定より優先されます。
Q. settings.json にコメントを書いても大丈夫ですか?
A. はい。settings.json は「JSON with Comments(JSONC)」として扱われるので、// や /* */ のコメントを書けます。他のツールで読み込む .json ファイル(package.json など)はコメント不可なので、混同しないようにしましょう。
Q. おすすめ設定を入れたら動作が重くなりました。
A. 表示系(smoothScrolling、stickyScroll、bracketPairs のガイド)は軽量ですが、git.autofetch や大きなフォルダーの監視は負荷になることがあります。大きなリポジトリでは files.watcherExclude と search.exclude にビルド成果物や依存フォルダーを追加すると軽くなります。
まとめ
- settings.json は設定画面の内容をJSONで書いたもの。コマンドパレットの「Open User Settings (JSON)」で開くのが確実
- 優先順位は既定 < ユーザー < リモート < ワークスペース < フォルダー < 言語別 < ポリシー
- オブジェクト型はマージ、配列・値は上書き。
files.excludeは足し算、editor.rulersは置き換え - 目的別のコピペ用全文(51キー)と、既定値・推奨値・理由の表で、変えた理由まで説明できる
- VS Code 1.140 では JS/TS の設定が
js/ts.*に統一され、従来のtypescript.*は非推奨表示 - チーム共有は
.vscode/settings.json(整形・規約)とextensions.json(推奨拡張) の2つ - JSONC パーサーでの構文チェックと、1.140.0 のソースでのキー確認で、書き間違いを事前に見つけられる
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「VS Code settings.jsonおすすめ設定|コピペ用全文と各項目解説」
株式会社RJCでは、開発環境を整える工夫を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。