VSCodeワークスペース設定が自動で変更される問題
問題の説明
ReactプロジェクトでESLint、Prettier、Viteを使用している際に、VSCodeのワークスペース設定が自動的に変更されてしまう現象があります。具体的には、settings.json
ファイル内の下記設定がtrue
から"explicit"
に自動変更されます:
source.fixAll.eslint
source.organizeImports
この現象は、VSCodeの起動時やコーディング中など、さまざまなタイミングで発生します。元の設定ファイルは以下のようになっています:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true, // 自動的に"explicit"に変更される
"source.organizeImports": true // 自動的に"explicit"に変更される
},
"editor.formatOnSave": true,
"editor.wordWrap": "on",
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
原因
この挙動は、VSCode 1.85.0で導入された変更が原因です。バージョン1.85.0より前ではtrue
/false
のブール値がサポートされていましたが、このバージョンからsource.fixAll.eslint
とsource.organizeImports
の設定値が以下のように変更されました:
- 従来の
true
→ 新しい形式の"explicit"
に変更 - 従来の
false
→ 新しい形式の"never"
に変更
VSCodeがワークスペース設定を自動的に更新するのは、従来のブール値形式から新しい文字列形式への移行を促すための動作です。
公式アップデート情報
解決方法
設定を新しい形式に手動で更新することで問題は解決します。.vscode/settings.json
ファイルを以下のように修正してください:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit", // trueから"explicit"に変更
"source.organizeImports": "explicit" // trueから"explicit"に変更
},
"editor.formatOnSave": true,
"editor.wordWrap": "on",
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
変更後の動作
"explicit"
:ファイル保存時に指定されたアクションが自動実行されます(従来のtrue
と同等の動作)"never"
:アクションが実行されません(従来のfalse
と同等)
注意
他の設定項目(editor.formatOnSave
など)は従来通りブール値のままで問題ありません。変更が必要なのはcodeActionsOnSave
配下の特定項目のみです。
補足情報
設定値の詳細オプション
新しい形式ではexplicit
とnever
以外にも、より詳細な制御が可能です:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "ifRequired"
}
}
"always"
:常に実行(問題がない場合も)"ifRequired"
:必要な場合のみ実行(推奨)"explicit"
:明示的にリクエストされた場合(保存時に実行)
複数リントツール使用時の設定例
ESLintとPrettierを併用する場合の推奨設定:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "explicit"
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
まとめ
VSCode 1.85.0以降では、保存時のコードアクション設定がブール値から文字列形式に変更されました。この仕様変更に対応するためには、true
を"explicit"
に手動で更新する必要があります。新しい設定形式はより細かな制御を可能にするため、プロジェクトの要件に応じて詳細な設定を行うことも可能です。