Vimの操作感を愛おしむ人たちへ: Zedで広がる新たな可能性

ソフトウェア開発の世界は日々進化していますね。その中で、私たち開発者が使うツールは、まさに職人の道具のように大切なもの。常により良い方法を探し求めているのは、皆さん同じではないでしょうか。 そんな私たちの前に現れたのが、Zedです。このエディタ、一見するとただの新顔に思えるかもしれません。でも、その中身は、私のようなVimmerの心をしっかりと掴みました。なぜならZedは、Vimの精神や操作感を大切にしながら、現代のテクノロジーを駆使して作られているからです。

私は1年ほど前からZedを使い始め、すぐにルックやデザイン、全ての動作が期待通りかつ、速く完了する様子に魅了され、使い続けています。

筆者のZedのキャプチャ

機能的にはVSCodeが優れているし、AI Code EditorのCursorも盛り上がっていますが、もっと速く、たくさんコードを書きたい開発者の方にはZedという選択肢があることをこのブログを通じて知っていただければ幸いです。

圧倒的な応答速度を支える技術

ソフトウェア開発においてフィードバックループの速度はとても重要な指標の一つです。Zedはこの基本的な真理を理解し、パフォーマンスを念頭に置いて一から構築されています。 Zedの開発チームは、Zedのために2Dユーザーインターフェイスを構築する新しいフレームワークGPUIフレームワークを開発しました。GPUIは、3DビデオゲームのようにGPU上でウィンドウ全体をラスタライズします。その結果 高速で、信頼性が高く、スムーズなピクセル配信をすべてのフレームで実現します。

GPUIの紹介動画(https://zed.devより転載)

このアプローチは理にかなっている一方で、コードエディタを開発するにあたって最初に思いつくことではなさそうですよね。彼らもそうです。Zedは彼らが初めて開発するコードエディタではありません。

Zedの開発チームは、以前、Atomというコードエディタを開発していました。AtomはElectronを使用していたのですが、テキストレイアウトや描画など、エディタの核となる部分には低レベルの制御が必要にも関わらず、Eelectronでは制御できる限界があり、ZedはRustでGPUフレームワークを作るところから始めたようです1

私がZedを使い始めてからさまざまな機能が追加されましたが、追加によって動きが遅くなったと感じることは一度もありません。常に速く、快適に使えています。

Vimモード:馴染みと革新の出会い

多くの開発者にとって、Vimのモーダル編集と効率的なキーボードショートカットはワークフローに不可欠です。多くのエディタにVimをエミュレートしたサードパーティのエクステンションやプラグインが公開されています。 しかしながら、これらのエクステンション、プラグインはサードパーティのためエディタ本体の機能やキーバインドと競合したり、アップデートに追従できないことが少なくありません。

ZedはVim Modeが標準で搭載されています。Zedのドキュメントには「Vim Mode」のページがあり、そこには以下のように書かれています。

Vim mode in Zed is supposed to primarily "do what you expect": it mostly tries to copy vim exactly, but will use Zed-specific functionality when available to make things smoother. This means Zed will never be 100% Vim compatible, but should be 100% Vim familiar!

ZedのVim Modeは「期待通りに動作する」ことを目指しています:具体的には、Vimを正確にコピーしつつ、より円滑に動作できる場合はZed固有の機能を使用します。 ZedがVimと100%互換性を持つことはないものの、Vimに慣れた人なら、違和感なく使えるはずです!(訳は筆者)

また、Zedは毎週一回以上アップデートされている2のですが、リリースノートには、「機能追加」「Bug Fix」などに加えて、「Vim Mode」のセクションがあり今でも頻繁に改善が続けられています。

2024-07-31のリリースノートからVim部分を抜粋(リリースノート全文)

私がVimでよく使うキーバインドがCtrl-yCtrl-eです。これは、Vimのノーマルモードで、画面をスクロールするためのキーバインドなのですが、私がZedを使い始めた時はこのキーバインドはZedには実装されていませんでした。しかし、その後のアップデートで実装され、今、私はZedをVimモードで使いながらこのブログを書いています。

多様なプログラミング言語サポートしLanguage Server Protocol (LSP)にも対応

Zedは、多様なプログラミング言語をサポートしています。サポートされているファイルを開くと、Zedは自動的に適切な言語サーバーをダウンロードし、起動します。現在、Rust、TypeScript、Pythonなど、多くの主要言語に対応しています3

また、ZedはLanguage Server Protocol (LSP)をサポートしています。LSPは、コード補完、定義へのジャンプ、リファクタリングなどの機能を提供する標準プロトコルです。 試しにruby-lspを使ってみた様子を以下に示します。表示しているファイルは37singalsのWritebookです。

Ruby on RailsのActiveRecordモデルのAssociationコードジャンプ機能のデモ

Includeしているオブジェクトへのコードジャンプ機能のデモ

GitHub CopilotもLLMも使えます

GitHub Copilot使えます4。最新のリリースではGitHub Copilot Chatも使えるようになりました5

それだけでなく、OpenAIやClaudeといったAPI利用できるモデルを使ったり、Ollamaを使ってmistralなどのオープンモデルをローカルで動かしてZedから利用することもできます。

LLM連携機能を使っている様子(https://zed.devより転載)

Git連携は今後強化予定、VSCodeでGitの操作をしている人はLazygitを使えば大体カバーできる

速くて、VimモードもLLMも使えて良いことづくしですが、まだまだ足りていない機能はあり、その一つがGit連携です。 具体的にはコミットしたり、ブランチを作ったり、リモートリポジトリにプッシュ、プルする機能がZedにはありません。 私は、LazygitというツールをZedのターミナルから実行して、Gitの操作をしています。

チームでのリアルタイムコラボレーション

Zedの革新的な機能の一つが、リアルタイムコラボレーション機能です。ZedのChannels機能を使えば、リンクを共有するだけで世界中の開発者とコードを共同編集できます。これは単なる画面共有ではなく、複数の開発者が同時に同じファイルを編集できる真のリアルタイム共同作業環境です。

この機能は、ペアプログラミングやコードレビュー、チームでの問題解決に新しい可能性を開きます。離れた場所にいるチームメンバーとも、まるで隣り合わせで作業しているかのような感覚でコラボレーションができます。

私はまだこの機能は試せていないので、いつか試してみたいです。

オープンソースで活発な開発

Zedは2024年1月にオープンソース化され、GitHubで公開されています。エディタ本体はGPLライセンス、サーバーサイドコンポーネントはAGPLライセンスで提供されています。また、ZedのUIフレームワークであるGPUIはApache License 2.0で公開されています。

余談ですが、先日発表されたTop trending open-source startups in Q2 20246では、Zedが1位でした。

まとめ:Vimの精神を受け継ぎ、さらなる高みへ進む

Zedは、Vimの精神を受け継ぎつつ、現代のテクノロジーを駆使して作られた次世代のコードエディタだと思います。圧倒的な応答速度、使いやすいVimモード、最新のAI機能、そしてリアルタイムコラボレーション機能など、開発者の生産性を大幅に向上させる機能が詰まっています。

まだ不足している機能もありますが、オープンソースになる、これまで以上に急速に進化を続けています。Vimの操作感を大切にしつつ、より効率的で快適な開発環境を求める開発者にとって、Zedは魅力的な選択肢と思います。


  1. Atomの開発で経験したことがZedにどのように活かされているかがまとめられているブログ https://zed.dev/blog/we-have-to-start-over
  2. リリースプロセスはこちらにまとめられています。 https://zed.dev/docs/development/releases
  3. サポートしているプログラミング言語はこちらから確認できます: https://github.com/zed-industries/zed/tree/main/crates/languages/src
  4. Issue: https://github.com/zed-industries/zed/issues/5587, Release: https://github.com/zed-industries/zed/releases/tag/v0.82.7
  5. Preview Version 0.147.0で追加されています。https://zed.dev/releases/preview
  6. https://runacap.com/ross-index/q2-2024