microsoft/vscodeを読んだ

laiso
·

「Cursorのタイムマシンビジネスで大儲けや〜」みたいなネタを見て、アッそういえばフォークエディタ作ってみたいんだったと思い出してソースからビルドしてみることにした。

VSCodeのビルドは思ったより難しくなかった。LinuxにElectronアプリを作れる環境を整えただけで、これはこれですごい。

もっと特殊な魔改造Chromium+Cコンパイラ最適化とかしてるのかと思い込んでいた。

ただ、codeコマンドはRustで書いてあった。これは初めて知った。

カスタムビルドを起動できるようになったので、コアコンポーネントをいじって壊してみる。 layout.tsなどを起点にどのファイルがどの機能を実装しているのかを把握した。

これでVSCode内部をどこでも変更できるようになった。いったん満足した。

Copilot Chat

次はついでにCopilot Chat拡張のコードを読んでみる。

extension.js

本体。でかすぎる。minifyして2000行ぐらいある。

プロンプト関連が全部入っている。プロンプトのレンダラにTSXをテンプレートエンジンとして使っている。

Preactでプロンプトのトレースデータを視覚化している(内部ツール?)。

LRUキャッシュとメモ化が使われている。

TikTokenizer。たぶんトークン数カウント用。

各言語のTree-sitterクエリもここで定義されている。

worker2.js

worker2はTree-sitter言語パーサー関連処理を投げる先。 Tree-sitterのWasmバイナリが同梱されている。

PHP、Dart、KotlinあたりはTree-sitterバイナリがなさそうだけど、これらの言語はCopilot Agent のコード理解に不利になるんだろうか? 私は普段PHPで使っているけどとくに問題に思ったことはない。

diffWorker.js

dynamicProgrammingDiffingとmyersDiffingAlgorithmの2つのDIFFアルゴリズム関数がある。 でかすぎる差分はMyersで処理されるらしい。

copilotDebugCommand.js

JSON-RPCクライアント/サーバーを実装するクラス。 cliから呼び出せる。多分デバッグ用。

フォークエディタたち

それとは別にVSCode拡張APIでCursorってどの程度実現できるんだろう?というのも気になったので、拡張APIでは実現できない機能を検証してみた。

結果としては拡張パネルの外のVSCode自体のDOMには触れなそうだが、ほとんどの機能は拡張でも実現できそう。 というかClineやCopilot Editがやってることはそもそもできる。

Cursorでいうと独自の設定ウィンドウを出すとかはたぶん難しそうなのと、Shadow Workspacesは拡張では難しいのではないか。 Shadow Workspacesのおかげで並列ファイル編集できて直列な(単一のWorkspace内で実行する)ClineやCopilotより編集完了が早い。

関連してバックグラウンドの差分生成とエディタへのApplyでもworker 分離している件は拡張でも一見できそうだが、リソースをたくさん使うから拡張外にプロセス分離して実装したくなりそう。

あとはCursor Tab。こいつはエディタ上のアクティビティを収集してそうなので拡張の権限では手が出せない。このへんが現状のCursorの差別化ポイントか。

あとこれは技術的なIssueではないかもしれないが、拡張だとソースコードにアクセスできる。 有料ライセンスのツールとしてはこれは都合がよくないのではないか。 難読化ぐらいはほどこせるが。Wasmバイナリはどうなんだろう。

Clineエコシステム

転じてこれも与太話だけどClineの人たちはビジネススキームをどうするんだろう。

本家Clineはおそらく出資を受けて開発するだろう。Roo Codeはあれ単体でも会社PRになっていいのかもしれない。

悲観的シナリオではClineもVSCodeフォーク製品になってしまうことだけど、そうしたらOSS Clineたちにユーザーが流れてゆく。


余談だけどサクラエディタのコードも公開されているらしい。AIサクラエディタにビジネスチャンスが!?(出会い系っぽい響き)

@laiso
インターネットユーザー。lai.so