世界を動かす技術を、日本語で。

Zedデバッガーが登場しました

概要

  • Zed に新たに デバッガ機能 が追加
  • 高速性親しみやすさカスタマイズ性 を重視した設計
  • Rust, C/C++, JavaScript, Go, Python など主要言語を標準サポート
  • 拡張API により他のDAP実装も柔軟に対応可能
  • 今後の拡張 や高度な機能追加も計画中

Zedデバッガの特徴

  • 2,000人以上の開発者 からの要望に応えたデバッガ機能の実現
  • Zed 1.0 に向けた大きな一歩
  • デバッガ設計の三本柱
    • 高速性 :コンテキスト切り替えの時間短縮
    • 親しみやすさ :Zedのデザイン言語に沿ったUIと一般的なデバッガフロー
    • カスタマイズ性 :UI・キーバインド・デバッグ設定などの柔軟な調整
  • 主要言語 (Rust, C/C++, JavaScript, Go, Python)を標準サポート
  • Debug Adapter Protocol (DAP) 対応で、拡張システムを通じて他言語・ツールも利用可能

デバッグ設定と自動化

  • locators によるビルド設定からデバッグ設定への自動変換
    • tasks.jsonでビルドタスクを一度書けば、debug.jsonで参照可能
    • 自動設定 機能で、ほとんどの場合手動でデバッグ設定を記述せずに利用開始
  • Cargo, Python, JavaScript, Go 用のlocatorsを現時点でサポート
  • 詳細な設定方法は 公式ドキュメント 参照

デバッグセッション中の体験

  • スレッド・変数・ブレークポイント・コールスタック などの状態をわかりやすく表示
  • デバッガパネル はドラッグ&ドロップで自由にカスタマイズ可能
  • キーボード操作 のみでデバッグ操作が完結
    • コードのステップ実行やブレークポイントの切り替えもマウス不要

コミュニティ主導の開発

  • 8か月間977コミット25,000行超 のコードによる開発
  • Remco Smits 氏を中心としたコミュニティの貢献

アーキテクチャと拡張性

  • データ層UI層 の二層アーキテクチャ
    • データ層がDAPと直接通信し、セッション状態やキャッシュ管理を担当
    • UI層は必要な情報のみ取得し、効率的な描画とデータ取得を実現
  • 協調デバッグ やマルチプレイヤーセッションへの拡張も容易
  • 70以上のDAP実装 の個別対応は困難なため、拡張APIで柔軟に統合
    • 独自スキーマやJSONサーバーとの連携、ダウンロード・起動ロジックも実装可能
    • LSP拡張と同様に、開発者が独自のデバッガ統合を簡単に実現

インライン変数値表示の工夫

  • インライン変数値 はLSPの一部機能だが、DAPのみ利用だと制約あり
  • Tree-sitter を活用し、実行スコープ内の変数を正確に特定
    • .scmファイルを用いることで、LSPサーバー非依存で多言語対応
    • 現時点でPython, Rust, Goをサポート、今後さらに拡大予定

今後の展望

  • ウォッチリスト・メモリビュー・逆アセンブリビュー・スタックトレースビュー など高度なビューの追加計画
  • 自動設定対応言語・ビルドシステム の拡充
  • フィードバック はDiscordやGitHubリポジトリで受け付け

まとめ

  • Zedデバッガ は高速・親しみやすく・カスタマイズ性に優れ、主要言語を標準サポート
  • 拡張APIlocators により、柔軟なデバッグ設定と多言語対応を実現
  • Tree-sitter 活用でインライン変数値表示も高精度
  • 今後の進化 にも期待できる開発基盤

Hackerたちの意見

Zed大好き!Claude maxと一緒に使えたらいいのにな。すごくいいよね。

これ、MCP設定でできないの?今日試してみたらうまくいったから、Zedでも似たような使い方と設定ができるか書き留めておいたよ。https://www.bobbby.online/post/a-clever-hack-claude-code-as-...

ここ1ヶ月くらいZedをフルタイムで使ってるけど、めっちゃ気に入ってる。起動が早いのがいいね。Linuxでフォントがぼやける問題があったけど、今は直ったみたい。何が原因だったのかはわからないけど。

Zedは素晴らしいよ。最近neovimからZedに移行したんだけど、すごくいい体験だった。全体的にサクサク動くし、Vimのバインディングがうまく統合されてるのが好き。エージェントモードもいい感じ。VSCodeの影に隠れがちだけど、拡張エコシステムはまだ発展途上…でも、今まで使ったことに関しては十分だよ。デバッガーが大きな欠けていた機能だったけど、今はちゃんと作られてて本当に嬉しい。素晴らしい仕事だね。

ZedのRustコードの自動補完はどう?WindsurfとCursorの「tab-tab-tab」コード自動補完がめっちゃ速くて、提案されるほとんどがピッタリで、提案がどんどん続いて、リファクタリング作業をほぼ自動化してくれるのが好き。こういう自動補完はTypeScriptや他のスクリプト言語でめっちゃうまく機能する。IntelliJやRustRoverは、CursorやWindsurfのあのレベルの動作には全然及ばなかったし、JetBrainsのモデルやCo-pilotと組み合わせてもそうだった。これはIDEやモデル、言語のミスマッチだと思ってる。Rustがこれに向いてなかったんだろうね。いくつか質問があるんだけど、1) Rustで「tab-tab-tab」で全てがスムーズに自動補完されるようになった?(これ、Zedでもできるの?)2) ZedはCursorやWindsurfと比べてどうなの?RustRoverや特にJetBrainsのRust ASTの扱いと比べてどう?

Zedのせいじゃないけど、PlatformIOがサポートされてないからまだVSCodeに縛られてる。PlatformIOがZedをサポートしない限り、この拡張サポートの問題はしばらく続くと思う。

Zedのせいじゃない Zedは言語拡張しかサポートしてないから、ある意味責任があるよ。埋め込みRustを使ってるなら、PlatformIOは本当に必要ないし、probe-rsは非常に優秀で簡単だよ。

有能なソフトウェアエンジニアは、デバッガーがどう動いてエディタに統合されているかの基本的な理解を失わないために、「Under the hood」セクションをちゃんと読むべきだと思う。ZedでDebug Adapter Protocol (DAP)を実装しているRustコードを読んだら、すごく若いSWEsが「自己文書化されたコード」だけを好むってすぐに指摘するだろうし、コメントを全部削除したり、「コメントがあるなら、たぶん悪いコードだ」と信じたりするかもしれない。定義されたプロトコルを実装していて、複雑なソフトウェアのどんな部分でもスケーラブルに設計されている高度なソフトウェアには、特定のインターフェースがなぜそのように設計されているのか、そしてそれがソフトウェア(この場合はZed)にどうフィットするのかを説明するコメントが好きなんだ。広く再利用されるようなプラグインシステムとしてね。このブログ記事は、エディタでのデバッガー統合をうまく説明していて、Zedを使ってみたくなる。拡張エコシステムがもっと良くなればいいな。 [0] https://zed.dev/blog/debugger#under-the-hood

Linuxサポートが出てから(2年前?)、やっと「非Retina」な「LoDPi」(普通の画面ね)がサポートされてるか確認しに行くんだけど、残念ながらまだダメだった :/

ちょっと見た目は悪いけど、BetterDisplay(無料ツール)をインストールしてLoDPI画面をHiDPIに設定すると、テキストの表示が良くなるよ。

Windowsはサポートしてないし、Linuxでも普通の画面はサポートしてない…基本的にMac向けのソフトなの?

まだWindows版を待ってる。

https://github.com/deevus/zed-windows-builds

ニッチな機能だけど、まだ切り替えない理由は、Zedがctrl+スクロールでズームやフォントサイズを変更できないから。アメリカ以外のキーボードレイアウトに慣れちゃって、ズーム変更のためのキー操作が簡単じゃないんだよね。このやり方に慣れすぎちゃった。正直言って、ほぼ自分が求めてるものが揃った素晴らしいモダンIDEになりそうだね。

Ctrlを押しながらの accidental scroll でフォントサイズが変わるのが、IDEで一番嫌いな機能の一つって面白いよね。誰が最適なフォントサイズを他の値に変えたいなんて思うんだろう。これが他の人にとっては致命的に重要な機能だなんて、ちょっと不思議だよ。

Zedが機能豊富で軽量なIDEに進化するのを見るのが楽しみ。個人的には、デバッグアダプタプロトコル(DAP)とランゲージサーバープロトコル(LSP)が、ここ10年でプログラミングツールにとって最高の出来事だと思ってる。(同じリンクについて別のスレッドでこのコメントを書いたけど、フロントページには載らなかった)