「⌘S を押した瞬間にコードが整形される」というあの気持ちよさが急に消えると、開発のリズムは一気に崩れますよね。Prettier も入っているし editor.formatOnSave も true のはず。それでもセミコロンが揃わない、インデントが直らない、最悪なのは「ファイルによっては効くけれど、なぜか TypeScript だけスルーされる」というケースです。
ここでは私が Antigravity を業務で使っていて何度も踏んだ Format on Save の罠を、優先順位の高い順にチェックリスト化しました。1〜2分で原因が特定できる順序で並べていますので、上から順番に試してみてください。
最初に確認する3つの設定
Format on Save が動かないとき、99% は以下の3項目のどれかです。Antigravity の Settings を開き(⌘, または Ctrl+,)、検索ボックスに format と入れて確認します。
editor.formatOnSaveがtrueになっているかeditor.defaultFormatterにフォーマッタが指定されているか(例:esbenp.prettier-vscode)- 対象言語(例:
[typescript])のeditor.defaultFormatterがワークスペース側で別の値に上書きされていないか
特に3つ目の落とし穴がやっかいです。ユーザー設定では Prettier を指定しているのに、ワークスペースの .vscode/settings.json で null や別拡張がオーバーライドされていると、そのプロジェクトだけフォーマットが無効化されます。Antigravity の Settings UI 右上にある「Workspace」タブを開き、上書きされていないか必ず確認してください。
// .vscode/settings.json — チーム開発で推奨する最小構成
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}このファイルをコミットしておけば、チームメンバー全員が同じフォーマッタで保存するようになります。「自分だけ整形されない」現象の根治薬は、ほぼこれです。
フォーマッタが複数候補ある場合の正しい選び方
JavaScript / TypeScript の世界では、Prettier・ESLint・Biome・Deno fmt と複数のフォーマッタが共存しがちです。どれが走るかはコマンドパレットから明示的に確認できます。
⌘⇧P でコマンドパレットを開き、Format Document With... を実行してみてください。候補が複数並ぶ場合、Antigravity はあなたが選んだ最後のフォーマッタを記憶し、以降の自動フォーマットでもそれを使い続けます。Format on Save が「なぜか間違ったフォーマッタを呼んでいる」場合、ここで一度正しいものを選び直すだけで直ることが多いです。
注意したいのは、ESLint を --fix で走らせるのと Prettier で整形するのは別物だという点です。両方を保存時に動かしたいなら、次のように codeActionsOnSave を組み合わせます。
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}"explicit" は VS Code 1.85 以降の書き方で、true/false の旧記法を使うと将来動かなくなります。Antigravity も最新の VS Code エンジンに追従しているので、新記法に揃えておくのが安全です。
ファイル種別だけ動かないときに見る場所
「.ts は整形されるのに .tsx だけ動かない」「Markdown だけスキップされる」――こういう症状は言語別の上書きが原因です。Settings の検索ボックスに対象の言語名(例: typescriptreact)を入れて、editor.defaultFormatter の値を確認してください。空欄か、入っていないフォーマッタの拡張機能 ID が指定されていれば、それが犯人です。
加えて、フォーマッタ側がそのファイル種別を「対応していない」可能性もあります。Prettier であれば、.prettierignore に対象ファイルが入っていないか、プロジェクトルートに置いた prettier.config.js の overrides でファイルパターンが除外されていないかを確認します。
// prettier.config.js — overridesでうっかり除外していないか確認
module.exports = {
semi: true,
singleQuote: true,
overrides: [
{
files: "*.md",
options: { proseWrap: "preserve" }
}
]
};私の経験では、.prettierignore に過去のメンバーが追加した *.tsx 行が残っていて、新メンバーだけが「自分のマシンでだけ tsx が整形されない」と困っていたことがありました。Git の履歴で git log -p .prettierignore を眺めるだけで原因が特定できます。
拡張機能の競合とAIサジェストとのケンカ
最近増えているのが、AI 補完やリンター系拡張が裏で別の整形を走らせて、Prettier の結果を上書きしてしまうケースです。Antigravity の Output パネル(⌘⇧U)を開いて、Prettier や ESLint、AI 系拡張のチャンネルに切り替えてみてください。保存時にどの拡張が動いたかがログに残ります。
複数のフォーマッタが連続で走っていれば、editor.codeActionsOnSave の順序を見直す必要があります。基本的には「リンタの fixAll → Prettier」の順がトラブルが少なく、両方走らせるとどちらが最後に勝つかで挙動が変わります。
加えて、AI 補完が確定タイミングで自動的にカーソル位置を変えてしまい、Format on Save のタイミングと重なると整形がスキップされることもあります。怪しい場合は AI 系拡張を一時的に無効化して、フォーマットだけが効くか確かめてみてください。
それでも直らないときの最終手段
ここまで試して動かないなら、Antigravity の設定キャッシュが壊れている可能性があります。次の順で復旧します。
Developer: Reload Window(コマンドパレット)でウィンドウを再起動する- ユーザー設定
settings.jsonの Format on Save 関連行を一旦コメントアウトし、Reload してから1行ずつ戻す Extensionsビューでフォーマッタ拡張を「Disable」→「Enable」して再インストール状態にする- それでもダメなら拡張機能のログ(
Output → Log (Extension Host))でエラーが出ていないか確認
技術書1冊で議論の前提が共有できるのは、地味ですが効きます。
全体を振り返って — 保存時フォーマットを止めないための1つの習慣
Format on Save が壊れる原因の多くは、設定の「上書き層」のどこで切れたかが見えていないことです。私のおすすめは、新しいプロジェクトを始めたら最初の commit で .vscode/settings.json と .prettierrc、.editorconfig を一緒に置いてしまうこと。後から追加しようとすると「自分の環境では効くのに他のメンバーでは効かない」現象に必ず遭遇します。
関連する症状で困っている場合は、Antigravityでタブ補完が効かないときの直し方 や 言語サーバー(LSP)が応答しないときの修正手順、Settings Syncが動作しないときの対処法 も合わせて読むと、エディタ周辺のトラブルシューティングが一通り押さえられます。
今日のうちに .vscode/settings.json を1行だけ覗いて、editor.defaultFormatter がチームで揃っているか確認してみてください。それだけで「Format on Save がおかしくなった日」を1回減らせます。