Atom の作者達が作った Rust 製エディタ Zed (OSS)

## 1. 概要
2024年の1月24日に[ZedがOpen source化](https://zed.dev/blog/zed-is-now-open-source)しました! ということで、Zedとは何か、実際に使ってみてどうだったかというのを簡単にご紹介できればと思います。 

## 2. Zed とは何か?
AtomとTree-sitterのクリエイターによる、Rust製のコードエディターで、OSS (オープンソースソフトウェア) であり、 Githubのリポジトリ [こちら](https://github.com/zed-industries/zed?tab=readme-ov-file)で公開されています。

公式サイトから一部抜粋すると下記のような特徴があるようです。

### 2.1 パフォーマンスを重視した設計
- ![スクリーンショット 2024-02-20 17.33.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/79c6a788-43c7-0ed3-23a0-75286ceca559.png)
- ![スクリーンショット 2024-02-20 17.33.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/5bac6e0e-5453-6c08-d5b0-b7b84815e539.png)
- ![スクリーンショット 2024-02-20 17.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/c44c21bb-b6e8-eeb3-f12a-560cf9354f20.png)

### 2.2 インテリジェンス系のサポート
- Github Copilotのサポート
- GPT-4 を使用して、自然言語のプロンプトを入力することで、コードを生成したりリファクタリング可能

### 2.3 言語対応
- 入力時にすべてのバッファの完全な構文ツリーを維持し、正確なコードハイライト、自動インデント、検索可能なアウトラインビューなどに対応
- 特定の言語でファイルを最初に開いたタイミングで、適切な言語サーバーがサポートされている場合、それをダウンロードして起動するようです
    - 現在複数の言語をサポートしていそうですが、一部列挙します
        - Rust
        - TypeScript
        - Python
        - Ruby
        - PHP
        - Go
        - lua など
        - その他の言語対応は[こちら](https://github.com/zed-industries/zed/tree/main/crates/zed/src/languages)をご確認ください

### 2.4 チャンネルによるチーム内の連携強化
- 現時点ではプライベートベータ版なようですが、コラボレーション機能(Collaboration)の新しいバージョンという扱いで、チームの連携を強化できる機能を開発中のようです
- 機能としては、共同編集、カーソルの追尾(フォロー)、メモやチャットに関する機能などがありそうです
- 公式サイトは[こちら](https://zed.dev/docs/channels)

### 2.5 コラボレーション機能による複数人での共同編集
- Zedユーザー同士である必要はありますが、ゲストはファイルを開いたり、編集したり、保存したり、検索を実行したり、言語サーバーとやりとりしたりすることができるようです
- チャンネルの機能はこの機能の新しいバージョンという扱いのようです
- 公式サイトは[こちら](https://zed.dev/docs/collaboration)

### 2.6 その他機能など
- Vimモードの搭載
    - ただし[公式サイト](https://zed.dev/features#vim)を見る限りVimモードはいまだ開発中のようで、体験の基本的な部分ですらまだできていなさそうです

- ターミナルの内蔵

- テーマに関する機能

## 3. どのOSで対応している？
現在はMacOS(10.15以上)のみに対応しています。

現在(2024年2月22日時点)のロードマップを見る限り、LinuxとWebのサポートは検討されてそうです。また、関連したissueは公開されていますが、ロックされています。

- [Linuxのサポート](https://github.com/zed-industries/zed/issues/5395)
- [Windowsのサポート](https://github.com/zed-industries/zed/issues/5394)
- [Webのサポート](https://github.com/zed-industries/zed/issues/5396)

## 4. OSSという話だったけどライセンスはどうなっている？
リポジトリのトップから見たライセンスファイルは下記の3つのようです。

- [AGPL-3.0(GNU Affero General Public License version 3)](https://github.com/zed-industries/zed/blob/main/LICENSE-AGPL)

- [Apache-2.0 (Apache License 2.0)](https://github.com/zed-industries/zed/blob/main/LICENSE-APACHE)

- [GPL-3.0(GNU General Public License version 3)](https://github.com/zed-industries/zed/blob/main/LICENSE-GPL)

ドキュメントを見るに [zed/script/generate-licenses](https://github.com/zed-industries/zed/blob/2b56c43f2d2172d0a8dcaadd9096280eaa7d2de7/script/generate-licenses) で使用しているサードパーティーのクレートのライセンスなどを確認しているようでした。 `generate-licenses` ではテーマに関するライセンスと、 コードに関するライセンスを分けているので、それぞれ確認してみます。

### 4.1 テーマに関するライセンス
テーマに関するライセンスは下記に記載があります。
- https://github.com/zed-industries/zed/blob/2b56c43f2d2172d0a8dcaadd9096280eaa7d2de7/assets/themes/LICENSES

### 4.2 コードに関するライセンス
[zed/script/generate-licenses](https://github.com/zed-industries/zed/blob/2b56c43f2d2172d0a8dcaadd9096280eaa7d2de7/script/generate-licenses) を見る限り、コードに関するライセンスは[cargo-about](https://github.com/EmbarkStudios/cargo-about)を用いて作成されているようです(下記は一部抜粋)。

```
echo -e "# ###### CODE LICENSES ######\n" >> $OUTPUT_FILE

[[ "$(cargo about --version)" == "cargo-about 0.5.2" ]] || cargo install cargo-about --locked --git https://github.com/zed-industries/cargo-about --branch error-code-on-warn

echo "Generating cargo licenses"
cargo about generate --fail-on-missing-license -c script/licenses/zed-licenses.toml script/licenses/template.hbs.md >> $OUTPUT_FILE
```

手元で実行して、作成された assets/licenses.md でコードに関するライセンスを見ると下記のようでした。
```
## Overview of licenses:

* MIT License (142)
* Apache License 2.0 (80)
* ISC License (10)
* BSD 3-Clause "New" or "Revised" License (7)
* BSD 2-Clause "Simplified" License (3)
* Creative Commons Zero v1.0 Universal (3)
* Mozilla Public License 2.0 (3)
* zlib License (3)
* OpenSSL License (2)
* Unicode License Agreement - Data Files and Software (2016) (1)
```

ただし実行時に下記でエラーとワーニングが出ていたため、下記も合わせて確認が必要です
```
2024-02-22 2:07:36.947431 +00:00:00 [WARN] crate 'ring 0.17.7' doesn't have a license field
2024-02-22 2:07:41.608886 +00:00:00 [WARN] crate 'tree-sitter-clojure 0.0.9' doesn't have a license field
2024-02-22 2:07:45.577073 +00:00:00 [ERROR] unable to parse license expression for 'tree-sitter-hcl 0.0.1': Apache
```

また、 cargo-about を実行する際に受け入れるライセンスリストは [zed/script/licenses
/zed-licenses.toml](https://github.com/zed-industries/zed/blob/2b56c43f2d2172d0a8dcaadd9096280eaa7d2de7/script/licenses/zed-licenses.toml) を見る限り下記のようです。

```
accepted = [
    "Apache-2.0",
    "MIT",
    "Apache-2.0 WITH LLVM-exception",
    "MPL-2.0",
    "BSD-3-Clause",
    "BSD-2-Clause",
    "ISC",
    "CC0-1.0",
    "Unicode-DFS-2016",
    "OpenSSL",
    "Zlib",
]
```

## 5. 実際に試してみる
実際に試すには下記の２つの方法が手っ取り早そうです。

1. 公式サイトの[ダウンロード用のページ](https://zed.dev/download)からダウンロード
2. Brewでインストール
    - `brew install zed`

今回は前者の公式サイトから バージョン 0.123.2 をダウンロードしてきます。

ディスクイメージをダウンロードできたのでこれを実行してみます。下記のように規約の確認画面があるので、確認して同意します。

![スクリーンショット 2024-02-20 14.14.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/783b47b8-4b5b-63c7-008a-61e549cc9d51.png)

もろもろ終了すると下記のように アプリケーションが確認できるので、 Applications の中に移動させて起動します。
![スクリーンショット 2024-02-20 14.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/22e12fb1-2784-d423-eac0-f1d867993b60.png)

開いてみた感じ、下記のようなシンプルなエディターが開きました。
![スクリーンショット 2024-02-20 14.43.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/86899059-8f0a-5b84-aa31-b945dd8ae42b.png)

初期表示には下記のチェックボックスがあり、各種設定を有効化・無効化できそうです。

- Vim モードの有効化　(Enable vim mode)
    - 公式サイトではVimモードはまだ開発中のようなので、現時点では有効にしないほうがいいかもしれません。
　
- アノニマスデータの送信 (Send anonymous usage data)
    - これはインストール時に表示された規約の `3.3.1.1. Telemetry Data` に記載のあるテレメトリデータではないかと思います。
　
- クラッシュレポートの送信 (Send crash reports)

てきとうにMacのターミナルなどからディレクトリやファイルを作成します。
```
$ mkdir hello_test
$ cd hello_test
$ touch test.rs
```

メニューバーのアプリメニューから、Openを選んで開いてみます。
![スクリーンショット 2024-02-21 1.46.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/c19f5bc2-77e9-8c1a-6399-dc01144a9372.png)

フォルダを指定して開いてみると下記のような感じでした。
![スクリーンショット 2024-02-21 1.47.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/4466eb38-b1bf-c12d-d1a1-bd8e8c2c5837.png)

各種ボタンなどをざっと確認すると下記のような感じです。
![スクリーンショット_2024-02-21_2_54_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/00c5100c-9bd6-9dba-f363-0fc069800095.png)


### 5.1 ターミナルなどからの直接起動
勿論 VScode　などと同じようにMacであれば、ターミナルなどから直接起動することもできます。
```
$ open hello_test -a Zed
```

### 5.2 言語対応の確認
どんな感じに実際のファイルが見えるかを確認するために、Zedのソースコードを落として確認してみます。

```
$ git clone git@github.com:zed-industries/zed.git
$ open zed -a Zed
```

開いたZedから `crates/zed/src/main.rs` のファイルを開いてみると下記のような画面になり、ハイライトなどは適切に効いていそうに見えます。またよくあるパンくずリストも表示されています。

![スクリーンショット 2024-02-21 3.12.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/38785968-97e2-6d0b-bdea-831b573b4103.png)

### 5.3 コードアクション
またカーソルを特定の位置に合わせた際に　雷マーク が表示される場合は、コードアクションを実行可能です。

例えば下記のようにuse文をつかって書き換えるかどうか選択できます。
![スクリーンショット 2024-02-21 19.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/484df361-4934-cad1-3321-48eb8bfcebe6.png)

これを選択した場合は、下記のように自動でuse文を使った形に変更され、
![スクリーンショット 2024-02-21 19.37.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/ab64c0da-b527-f9b4-da75-8f1bac5cc6a6.png)
use文自体も自動で追加されます。
![スクリーンショット 2024-02-21 19.37.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/9c55e6ec-65c7-d721-cc8b-0c5001556c8d.png)

もっとシンプルな例だと、下記なようにブロックコメントに変更するかなどもあります。
![スクリーンショット 2024-02-21 19.25.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/5c26c400-f0e5-f4c2-0da5-a849eda33569.png)

### 5.4 Github Copilotの挙動を確認
ではGithub Copilotの動きも見ていきます。

画面右下の下記のアイコンをクリックしてみると、
![スクリーンショット_2024-02-22_11_25_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/e0a28115-e7c7-7a5b-b1cc-50e99a869aef.png)

下記のように Sign in か Copilot　の無効化 の選択肢が出てくるので、サインインしてみます。
![スクリーンショット_2024-02-22_11_27_09-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/f2f8cbf9-dd67-ef59-0c7c-44577586975f.png)

Sign in を押すと、下記のようなアクティベーションコードが表示されるのでコピーし、Connect to Github を押すと、ブラウザでGithubのページへ移動します。
![スクリーンショット 2024-02-22 14.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/3138a9e1-acb0-6563-752f-f628de969cb7.png)

Githubのページでは先ほどのアクティベーションコードの確認があるので、これを入力して Continue を押します。
![スクリーンショット 2024-02-22 14.17.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/249411a2-4cd0-179a-1d9d-43b2c4cafb20.png)

下記のように、立地・IP・アクセス時間や、プラグインの振る舞いを確認し、 Authroize Github Copilot Pluginを押します。
![スクリーンショット 2024-02-22 14.17.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/272672b1-38c2-2c54-2f1e-3d476472ab27.png)

下記のように完了画面がでると、有効化は完了です。
![スクリーンショット 2024-02-22 14.18.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/12ddd783-2cba-83f7-7f8d-155a1c5c7876.png)

Zedの方では下記のような表示がでて有効化していることがわかります。
![スクリーンショット 2024-02-22 14.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/36c118e3-5a04-240f-8668-ce6f164048ab.png)

また、先程の表示にもあったように有効化すると、セッティングやサインアウトなどがボタンから選択できるようになっていました。
![スクリーンショット 2024-02-22 14.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/7992ac43-766d-4cc3-6034-e08883cbd6e5.png)

適当に書いてみるに、確かにGithub Copilotが動いていそうです。
![スクリーンショット 2024-02-22 16.16.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/cbec7212-9697-d5d2-98ae-bf0f92285781.png)

## 6. VSCodeのリポジトリと簡単に比較
類似製品として私が使っているVSCodeと簡単に比較してみてみます。
　
ですが、VSCode自体はOSSではないため、Microsoftがコミュニティと一緒にVSCodeを開発するためのリポジトリである [Visual Studio Code - Open Source ("Code - OSS")](https://github.com/microsoft/vscode)と簡単に比較していきます。

| |[Zed](https://github.com/zed-industries/zed)|[Visual Studio Code - Open Source](https://github.com/microsoft/vscode)|
|:--|:--|:-----------------------------|
|Star|24.6k|156k|
|Fork|858|27.2k|
|Watch|109|3.3k|
|Issue(Open)|1461|7342|
|Issue(Close)|2466|164470|
|Pull Request(Open)|50|396|
|Pull Request(Close)|3815|27335|

※ 2024年2月23日時点での参考程度の比較です。

## 7. 後書き
個人的なイメージで言うと、パフォーマンス面とメモリの面ではVSCodeより若干優位性があるように見えておりまして、今はまだ拡張や機能が揃っていませんが、時間とともに充実していけば実用の選択肢に入るのではないかと思っています。

今回の記事では目玉機能である、チャンネルやコラボレーションなどは試せなかったので時間のある時にそれらも試して共有できればと思います。

この記事がどなたかの参考になれば幸いです。