Zedの拡張機能を自分用にメモ
実はすでに数百の拡張機能がコミュニティによって公開されている。言語サポート、テーマ、MCPサーバー、デバッグアダプターまで揃っていて、普段の開発に困ることはほぼない。
拡張機能ギャラリーを開く
まずは何がインストールできるか確認するところから。
Cmd+Shift+X(macOS)/ Ctrl+Shift+X(Linux/Windows)でExtension Galleryが開く。もしくはメニューバーの「Zed > Extensions」でも同じ。
ここで検索・フィルタリング・インストールが全部できる。フィルターは以下のカテゴリに分かれている。
- Languages — 言語サポート(シンタックスハイライト + LSP)
- Language Servers — 言語サーバー単体
- MCP Servers — Model Context Protocolサーバー
- Agent Servers — AIエージェント連携
- Themes — カラーテーマ
- Icon Themes — ファイルアイコンテーマ
- Debug Adapters — デバッグアダプター
- Snippets — コードスニペット
人気の拡張機能を知っておく
2026年6月時点でのダウンロード数ランキング(公式ギャラリーから)。
| 拡張機能 | ダウンロード数 | 内容 |
|---|---|---|
| HTML | 5.5M | HTMLサポート |
| TOML | 1.1M | TOMLサポート |
| Git Firefly | 1.1M | Gitシンタックスハイライト |
| Catppuccin | 893k | パステルカラーテーマ |
| Java | 893k | Javaサポート |
| Dockerfile | 717k | Dockerfileサポート |
| SQL | 585k | SQLサポート |
| PHP | 583k | PHPサポート |
| Vue | 511k | Vueサポート |
| Ruby | 455k | Rubyサポート |
テーマ系も人気で、Catppuccin・Tokyo Night・Dracula・One Dark Proといった定番テーマはすでに移植されている。
TerraformユーザーはTerraformとOpenTofuの拡張機能がどちらも存在する。Terraform拡張機能は261k DL。
拡張機能のインストール先
インストールした拡張機能は以下のディレクトリに保存される。
| OS | パス |
|---|---|
| macOS | ~/Library/Application Support/Zed/extensions |
| Linux |
$XDG_DATA_HOME/zed/extensions または ~/.local/share/zed/extensions
|
| Windows | %LOCALAPPDATA%\Zed\extensions |
ディレクトリの中は2つのサブディレクトリに分かれている。
-
installed/— 拡張機能のソースコード -
work/— 拡張機能が作成したファイル(ダウンロードした言語サーバーなど)
拡張機能の自動インストール設定
settings.json の auto_install_extensions で、起動時に自動インストールする拡張機能を指定できる。
{
"auto_install_extensions": {
"catppuccin": true,
"terraform": true,
"dockerfile": true
}
}
チームで同じ拡張機能を使いたいときに便利。
拡張機能の種類と機能
Language(言語サポート)
最も多いカテゴリ。Tree-sitterによるシンタックスハイライトと、LSP(Language Server Protocol)を通じたコード補完・定義ジャンプ・診断を提供する。
HTML、CSS、JavaScript、TypeScript、Python、Go、Rust、Java、PHP、Ruby、Swift、Kotlin、Dart/Flutter、LaTeX、Luaなど主要言語はひととおり揃っている。
Terraform / OpenTofu、Ansible、Helm、Prisma、Protobufなどインフラ系も対応している。
https://zed.dev/docs/extensions/languages#language-extensions
Theme(テーマ)
カラーテーマ。themes/ ディレクトリにJSONファイルを置く形式で、JSON schema(https://zed.dev/schema/themes/v0.2.0.json)に従って定義する。
テーマのJSONは以下の要素で構成される。
- テーマファミリー名・作者名
-
themes配列(同一ファミリー内の複数テーマ) - 各テーマの
appearance(light/dark) -
background、foreground、accentなどの色設定 - シンタックスハイライト用の
syntaxオブジェクト - UIコンポーネント(ボーダー、テキスト、要素)の色
- エディタ固有の色(背景、ガター、行番号)
- ターミナル用のANSI色設定
Zed公式のTheme Builderも用意されていて、ブラウザ上でテーマを視覚的に作れる。
Icon Theme(アイコンテーマ)
プロジェクトパネルのファイルアイコンを変える。Material Icon Theme(350k DL)やCatppuccin Icons(417k DL)が人気。
https://github.com/catppuccin/zed
Snippets(スニペット)
よく使うコードのスニペット集。
MCP Servers(MCPサーバー)
Model Context Protocol(MCP)サーバーを拡張機能としてパッケージしたもの。
ZedのAgentパネルから直接インストール・有効化できる。
Debug Adapters(デバッグアダプター)
Zedの組み込みデバッガー用のアダプター。言語ごとにDAP(Debug Adapter Protocol)準拠のアダプターを追加できる。
拡張機能を自作する
前提
Rustが必要。インストールは必ず rustup 経由で。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
HomebrewでRustをインストールしても動かない。rustup を使うこと。
ディレクトリ構造
拡張機能はGitリポジトリで、extension.toml が必須。フルで書くとこんな構成になる。
my-extension/
├── extension.toml
├── Cargo.toml
├── src/
│ └── lib.rs
├── languages/
│ └── my-language/
│ ├── config.toml
│ └── highlights.scm
└── themes/
└── my-theme.json
extension.toml の最低限の記述はこう。
id = "my-extension"
name = "My extension"
version = "0.0.1"
schema_version = 1
authors = ["Your Name <you@example.com>"]
description = "My cool extension"
repository = "https://github.com/your-name/my-zed-extension"
WebAssembly(Rust)
手続き的な処理はRustで書いてWebAssemblyにコンパイルする。Cargo.toml の設定。
[package]
name = "my-extension"
version = "0.0.1"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
zed_extension_api = "0.1.0"
src/lib.rs で Extension トレイトを実装して register_extension! マクロを呼ぶ。
use zed_extension_api as zed;
struct MyExtension {
// ... state
}
impl zed::Extension for MyExtension {
// ...
}
zed::register_extension!(MyExtension);
デバッグ出力を見たいときは zed --foreground で起動すると、println! や dbg! の出力が見える。
ローカルでテスト(Dev Extension)
公開せずにZedで動作確認できる。Extensionページの「Install Dev Extension」ボタンをクリックして、拡張機能のディレクトリを選ぶ。
すでに公開版をインストールしている場合は、自動的に公開版がアンインストールされてdev版に切り替わる。Extensionsページには「Overridden by dev extension」と表示される。
トラブルシューティングは zed: open log(Zed.log)で確認。
MCPサーバー拡張機能を作る
MCPサーバーを拡張機能としてパッケージする場合、extension.toml に登録する。
[context_servers.my-context-server]
lib.rs で context_server_command メソッドを実装して、MCPサーバーの起動コマンドを返す。
impl zed::Extension for MyExtension {
fn context_server_command(
&mut self,
context_server_id: &ContextServerId,
project: &zed::Project,
) -> Result<zed::Command> {
Ok(zed::Command {
command: get_path_to_context_server_executable()?,
args: get_args_for_context_server()?,
env: get_env_for_context_server()?,
})
}
}
GitHubリリースやnpmからバイナリをダウンロードする処理もこの関数内に書ける。
公開する
zed-industries/extensions リポジトリへPRを出す流れ。
まずリポジトリをforkしてclone。
git clone https://github.com/your-fork/extensions
cd extensions
git submodule init
git submodule update
自分の拡張機能のリポジトリをsubmoduleとして追加する。
git submodule add https://github.com/your-username/my-zed-ext.git extensions/my-ext
git add extensions/my-ext
submoduleのURLはHTTPS(https://github.com/...)を使うこと。SSH(git@github.com:...)はNG。
extensions.toml にエントリを追加する。
[my-extension]
submodule = "extensions/my-extension"
version = "0.0.1"
pnpm sort-extensions を実行してソート済み状態にしてPR。マージされると自動でパッケージングされてZedの拡張機能レジストリに公開される。
命名ルール: 拡張機能のIDや名前に zed や Zed は含めない(すべてZedの拡張機能なので自明)。
ライセンス要件(2025年10月以降)
2025年10月1日以降、拡張機能リポジトリには必ずライセンスファイルが必要。受け入れられるライセンスはApache-2.0・MIT・BSD系など主要なOSSライセンス。ライセンスファイルはリポジトリのルートに置く(LICENSE、LICENCE のプレフィックスで始まるファイル名)。
まとめ
Zedの拡張機能エコシステムはまだVSCodeほどではないが、日常の開発で困ることは少ない。
- インストール →
Cmd+Shift+Xでギャラリーを開く - 主要言語・テーマ・アイコンは既に揃っている
- MCPサーバーも拡張機能として配布できる
- 自作はRust + WebAssembly、開発中はDev Extension機能で即テスト
自作したいなら zed_extension_api クレートを使って、まずDev Extensionとして動かしてみるのが一番早い。
参考
