Skip to content

VSCodeワークスペース設定が自動で変更される問題

問題の説明

ReactプロジェクトでESLint、Prettier、Viteを使用している際に、VSCodeのワークスペース設定が自動的に変更されてしまう現象があります。具体的には、settings.jsonファイル内の下記設定がtrueから"explicit"に自動変更されます:

  • source.fixAll.eslint
  • source.organizeImports

この現象は、VSCodeの起動時やコーディング中など、さまざまなタイミングで発生します。元の設定ファイルは以下のようになっています:

json
{
  "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.eslintsource.organizeImportsの設定値が以下のように変更されました:

  • 従来のtrue → 新しい形式の"explicit"に変更
  • 従来のfalse → 新しい形式の"never"に変更

VSCodeがワークスペース設定を自動的に更新するのは、従来のブール値形式から新しい文字列形式への移行を促すための動作です。

解決方法

設定を新しい形式に手動で更新することで問題は解決します。.vscode/settings.jsonファイルを以下のように修正してください:

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配下の特定項目のみです。

補足情報

設定値の詳細オプション

新しい形式ではexplicitnever以外にも、より詳細な制御が可能です:

json
{
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit",
    "source.organizeImports": "ifRequired"
  }
}
  • "always":常に実行(問題がない場合も)
  • "ifRequired":必要な場合のみ実行(推奨)
  • "explicit":明示的にリクエストされた場合(保存時に実行)

複数リントツール使用時の設定例

ESLintとPrettierを併用する場合の推奨設定:

json
{
  "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"に手動で更新する必要があります。新しい設定形式はより細かな制御を可能にするため、プロジェクトの要件に応じて詳細な設定を行うことも可能です。