---
title: VS CodeやZedなどのエディターでPrettierとOxfmtが共存できない問題の対処法
url: https://roboin.io/article/2026/10/25/how-to-fix-prettier-and-oxfmt-conflicts/
description: ZedでフォーマッターとしてOxfmtを使おうとしたところ、Prettierと共存できないという問題に直面しました。対処法として、Bunをフォーマッターとして指定するのがよさそうという結論になったので、詳しくまとめます。
publishedDate: 2026-10-24T17:37:57.137Z
modifiedDate: 2026-10-24T17:37:57.137Z
thumbnail: https://roboin.io/api/og/2026/10/25/how-to-fix-prettier-and-oxfmt-conflicts/
thumbnailAlt: 記事のサムネイル画像
thumbnailCaption: N/A
---

# VS CodeやZedなどのエディターでPrettierとOxfmtが共存できない問題の対処法

ZedやVS CodeでフォーマッターとしてOxfmtを使おうとしたところ、Prettierと共存できないという問題に直面しました。対処法として、Bunをフォーマッターとして指定するのがよさそうという結論になったので、詳しくまとめました。

## 問題の詳細

ZedはフォーマッターとしてPrettierを組み込んでおり、デフォルトではPrettierでフォーマットします。フォーマッターとしてOxfmtを使いたい場合は、次のように設定します。

```json
{
    "formatter": {
        "language_server": {
            "name": "oxfmt"
        }
    }
}
```

しかし、これを設定するとPrettierが無効化されので、Prettierを使用しているプロジェクトでは`.prettierrc.json`が無視され、Oxfmtのデフォルトの設定でフォーマットされてしまいます。反対に、この設定をしないとOxfmtを使用しているプロジェクトでは`.oxfmtrc.json`が無視され、Prettierのデフォルトの設定でフォーマットされます。

どちらか片方のプロジェクトしか扱わない場合は問題ありませんが、普段扱っているプロジェクトのフォーマッターがPrettierとOxfmtで混在している場合には、併用できないという問題が生じます。

一応、Zedはプロジェクトの`.zed/settings.json`で設定を上書きます。そのため、広く使われているPrettierをグローバル設定のフォーマッターにして、Oxfmtを使っているプロジェクトではプロジェクト設定でOxfmtを使うように構成できます。

自分で管理しているプロジェクトではそれで問題ありませんが、他人の管理するプロジェクトでは勝手にZedの設定を追加するわけにもいきません。

Zedでしか確認していませんが、おそらくVS Codeでも同様の問題が生じると思われます。

## 対処法

この問題についてChatGPTと議論していたところ、フォーマッターとしてBunを設定するのがよさそうという結論になりました。

Bunは[v1.4.4](https://bun.com/blog/bun-v1.4.4)でPrettierとOxfmtの両方と互換性のある`bun fmt`コマンドを導入しました。`bun fmt`は、`.prettierrc.json`のあるプロジェクトではPrettier互換のフォーマッターとして振る舞います。また、`.oxfmtrc.json`のあるプロジェクトではOxfmt互換のフォーマッターとして振る舞います。

つまり`bun fmt`を使えば、プロジェクトがPrettierとOxfmtのどちらを使用しているかにかかわらず、設定を読み込んでフォーマットできるということになります。

なお、`bun fmt`はPrettierとOxfmtの両方と互換性があることになっていますが、内部でそれらを使っているわけではないので、エッジケースで異なるフォーマット結果になる可能性は否定できません。それでも、そのようなケースはまれでしょうし、ほとんどのプロジェクトはCIでフォーマットをチェックしていると思うので大きな問題はないと考えます。

Zedの場合は、システムにBun v1.4.4以降をインストールして次のように設定することで、Bunをフォーマッターとして利用できます。

```json
{
    "formatter": {
        "external": {
            "command": "bun",
            "arguments": ["fmt", "--no-script", "--stdin-filepath", "{buffer_path}"]
        }
    }
}
```

VS Codeでは、[Simple LSP Client](https://marketplace.visualstudio.com/items?itemName=wdomitrz.simple-lsp-client)のような拡張機能をインストールして、Bunをフォーマット用の言語サーバーとして登録します。VS CodeのSimple LSP ClientではPowerShellのプロファイルが読み込まれないようで、miseなどでBunを管理している場合はバイナリーの絶対パスを指定する必要がありました。

```json
{
    "simpleLspClient.formatters": {
        "bun": {
            "cmd": [
                "bun",
                "fmt",
                "--no-script",
                "--stdin-filepath",
                "${file}"
            ],
            "filetypes": [
                "javascript",
                "javascriptreact",
                "typescript",
                "typescriptreact",
                "json",
                "jsonc",
                "css",
                "scss",
                "less",
                "html",
                "markdown",
                "yaml"
            ]
        }
    },
    "[javascript][javascriptreact][typescript][typescriptreact][json][jsonc][css][scss][less][html][markdown][yaml]": {
        "editor.defaultFormatter": "wdomitrz.simple-lsp-client",
        "editor.formatOnSave": true
    }
}
```

## まとめ

ZedやVS CodeでPrettierとOxfmtが共存できない問題の対処法について解説しました。

通常の設定ではPrettierとOxfmtを共存させられないので、`bun fmt`コマンドをフォーマッターとして指定することで、実質的にそれらを共存させられます。