背景
Visual Studio Code (VS Code)は最も高いシェアを誇る統合開発環境(IDE)である.サードパーティ拡張機能による圧倒的な拡張性に加え,ビルトインされたGitHub CopilotによるAI Coding機能,GitHubとの連携性など,エコシステムが完成している.ついでにいうとMITライセンスで提供されるオープンソースソフトウェアでもある.
VS CodeのGitHubリポジトリを眺めれば分かる通り,殆ど全てのコンポーネントがTypeScript/JavaScriptで実装されている.VS Code拡張機能も同様である.そのため起動は遅いしメモリはドカ食いするしレスポンスも速くない.複数のワークスペースを開いたり,アプリケーションを終了せずに使い続けたりしていると,メモリを占有してパフォーマンスが劇的に下がる.Mozilla Firefoxほどメモリ管理が酷いわけではないが.
図1. VS Codeのイメージキャラクター
VS CodeはOSSなだけあって多数のフォークが存在する.AI Code Editorの代表であるCursorや,以前の記事で紹介したVoid Editorなどがそうである.これらはVS Code拡張機能を含むVS Codeエコシステムほぼそのまま流用できる.一方,実装の大部分がVS Codeと共通なわけだから,弱点もまたVS Codeと共通である.デカいし重い.
TypeScriptのような中途半端な型システムを備えた言語や,JavaScriptのような許しがたい制約の緩すぎる型システムを備えた言語を用いるということは,強力かつ一貫した型システムを備えた言語であれば型チェックレベルで弾けたであろうバグや脆弱性の責任を,開発者が負わねばならなくなるということである.
また,動的メモリ管理をGCに丸投げすることは,きわめて大きなランタイムオーバーヘッド(時間計算量・空間計算量)を伴う.GCに頼らない動的メモリ管理は,C言語でやれと言われればうんざりしただろうが,現代的な言語では(何ならC++03でさえ)型システムとの統合によって殆ど意識せずとも可能になっている.例えば,コンストラクタ及びデストラクタが適切にヒープの確保と解放を行うようなクラスを使うとか,C++ならばスマートポインタを使うとかである.とくにRustは型システムを含む言語仕様レベルで適切なメモリ管理を自動的に強制する.
それなら,Rustでも何でも強力な型システムを備えたメモリ安全な言語で書けばいいわけだが,そうすると前述のようなVS Codeの遺産を引き継げなくなってしまうわけである.IDEのような巨大なソフトウェアをフルスクラッチで実装するコストが単純にデカいというのもある.
Zed
この地獄の苦行を成し遂げたのが以下に紹介するZedである:
ZedはRustベースのオープンソースIDEであり,ClaudeによるAI Codingを最大限活用して実装されている.比較的高レベルで動く巨大なアプリケーションをフルスクラッチで実装するなら,堅牢なコーディング性能を持つとともに,巨大なコンテキストウィンドウを備えたClaudeを使わない手はないだろう.以下はZedリポジトリ内にあるAI Coding Agentに対するコーディングルールである.
Pros
- 起動が超高速: メモ帳よりちょっと遅い程度
- メモリ消費量が劇的に少ない: おおよそ sub-100MB – sub-1GB のオーダー
- レスポンスが劇的に速い: 例えば,Markdownのプレビュー機能を使うと,ソースコードペイン上でのカーソル移動のプレビューペインへの反映のレイテンシがとてつもなく小さい.VS Codeだと1secオーダーで遅延することがある
- 拡張機能が最低限存在する: VS Codeには遠く及ばないものの,最低限の拡張機能は用意されている
- AI Coding Agentとの連携: AI Coding Agent機能(Chatベース)がビルトインされている.Agent Client Protocolベースの連携機能(Claude Agent / Codex CLI / Gemini CLI)のほか,API Key(Anthropic,Google AI,OpenAI,etc.)の使用,GitHub Copilot Chat / Zed AIとの連携,ローカルプロバイダ(LM Studio,Ollama)もサポートする
- Remote SSHとの連携性: Zedのコーディングエージェント機能はZed Agent/Claude AgentともにRemote SSH使用時も問題なく動作する.Continueの記事やVoid Editorの記事で述べたような不具合は生じない
AI Agent機能の詳細
ボトムナビゲーションバーの右側にある✨マークを押すとAI Chat Windowが表示される.チャットパネル右上のプラスボタンを押すと,AI Agentのプルダウンメニューが表示される.
- External Agents: Agent Client Protocol使用
- Zed Agent: その他(Zed AI連携,API Key使用,GitHub Copolit Chat連携,ローカルLLMなど)
画面右上の「…」ボタンのプルダウンメニューにある「Settings」か,Zed Agentパネル右下のモデル選択プルアップメニューにある「Configure」か,キーコンビネーション「Alt + Shift + C」を押すと,Agent設定画面に遷移するので,アカウント連携やAPI Key登録はここで行う.Ollamaについては,APIエンドポイント,Context Windowsの変更,クラウドモデル使用のためのAPI Key設定なども,ここで実行できる.
Zed Agentパネルでは,登録したAPI Keyで利用可能なモデルや,ローカルLLMプロバイダがserveしているモデルが自動検出され,モデル選択メニューから選択したり,よく使うモデルにFavorites Starを付けてクリップしたりできる.
Claude Agentパネルは次のようである.External Agentのパネルではモデル選択メニューの左隣にあるプルアップメニューの項目がプロバイダ毎に異なる(Claude: Default / Accept Edits / Plan Mode / Don't Ask / Pypass Permissions).またモデル選択メニューから設定画面に遷移できない.その他はZed Agentウィンドウと大体同じである.
Cons
- 拡張機能が少ない: VS Codeと比べると圧倒的に少ない
- Workspace/Project周りのUIが反直観的: Workspaceを開いている状態でProject(ディレクトリ)を開くと,当該WorkspaceにProjectが追加される.Workspaceを開いていない状態でProjectを開くと(複数選択可),Workspaceが新規作成され,選択した全てのProjectがそこに追加される.しかし,Workspaceを開いた状態から,新規にWorkspaceを作成するパスや,Projectを新規Workspaceとして開くパスが存在しないように見える.新規ウィンドウを開く→Projectを追加という手順をとる必要がある
- Workspaceそのものを直接操作できない: 複数ProjectをWorkspaceとしてひとまとめにする機能があるにもかかわらず,Workspaceそのものを直接操作する方法が存在しない(Workspaceに名前を付けたり,Workspaceを一覧したり,Workspace-scopedなZed Settingsを作成したり)
- Project Settings周りの挙動が怪しい: 何らかの条件でSettingsウィンドウにおけるProject(Project-scopedなZed Settings)の項目の増殖が起こりうる.WorkspaceへのProjectの追加→Workspaceの削除を繰り返したり,あるいは,少なくとも1つのZedウィンドウは残したまま,複数ウィンドウでワークスペースを開いたり閉じたりを繰り返したり.とにかくいろいろと操作していると,いつの間にか増殖していることがある
- ボトムナビゲーションバーの視認性が悪い: 左下のボタンがLeft Side Pane(Project / Git / Outline / Collab)に対応する.残り2つはProject Search & Diagnosticsである.右下はカーソル位置 / 言語 / Edit Prediction(Zed AI機能) / Debug Panel / Agent Panel / Notification Panel である.単純にアイコンが小さすぎて視認性が悪く,またアイコンが直観的でない.ボトムナビゲーションバーに全てを突っ込みすぎている感じがある
-
Markdownプレビューの挙動: ソースファイルをスクロールしてもプレビューはスクロールしない.ソースファイルの表示位置ではなくカーソル位置を基準に表示されるからである.またinline HTML tagのプレビュー機能が限定的であり,例えば中央揃え
<p align="center">...</p>などのプレビューが機能しない(無視される)
まとめ
Zedは2021年6月にv0.1がinitial releaseされてから,minor/patch releaseが1000回以上繰り返されているが,未だmajor release v1.0.0に至っていない発展途上のプロジェクトである.
オープンソースソフトウェアなのだから,ユーザーは拡張機能を作ることも,バグをIssueで報告することも,脆弱性をGitHub Security advisoriesで報告することも,それらをPull requestで修正することもできる.あるいは気に食わない部分があればforkして独立させてもよい.(ライセンスがGPL-3.0であることには注意.)
For Windows Users
この記事でも書いたように,WindowsにプリインストールされているPowerShell 5は使い物にならないので,PowerShell 7を使うべきである.Zedでターミナルを変更したい場合は settings.json の以下のフィールドを適宜変更するとよい:
"terminal": {
"shell": {
"program": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
},
},



