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