Canopyとは
Canopyは、テキストとプログラムの構造を同じ空間で直接編集できる、次世代のコードエディタです。従来のテキストエディタとは違い、ソースコードを文字列ではなく「構造」として扱うため、安全なリファクタリングやAIとの協調作業、複数人での同時編集がしやすくなります。
解決したい問題
今のコードエディタは基本的に「文字列を編集するツール」です。人間には直感的ですが、コンピュータにとってはソースコードの意味を理解するのが難しく、AIも「どこを編集すべきか」を推測しがちです。
Canopyは、ソースコードを文字列ではなく構造(AST)として直接編集することで、この問題にアプローチします。
Canopyでできること
構造編集
変数の名前変更や関数の抽出を、テキスト置換ではなく「構造操作」として安全に行えます。たとえば「このlet定義を前に移動する」という操作を、インデントやカンマの調整を気にせず実行できます。
テキスト編集との両立
構造編集だけではなく、CodeMirrorのような普通のテキスト入力も同時に使えます。使いたい場面に応じて、文字列として書くモードと構造として触るモードを切り替えられます。
AIとの連携
編集対象が明確な構造になっているため、AIへの指示や変更の適用が正確になります。「この関数を展開して」「この変数をリネームして」といった操作が、意図しない箇所まで変わるリスクを抑えて実行できます。
複数人同時編集
CRDT(衝突のない分散編集技術)を使って、複数人が同じ文書をリアルタイムで編集できます。WebSocket relay serverを介して、ブラウザ上で協調作業が行えます。
技術的な位置づけ
CanopyはMoonBitという新しいプログラミング言語で書かれ、ブラウザ上で動作します。大きく分けて3つの層があります。
- CRDTレイヤー(event-graph-walker): 複数人編集時の整合性を保つ
- パーサー・構造レイヤー(loom): ソースコードを解析し、編集可能な構造へ変換
- UIレイヤー(Rabbita / Ideal): 構造を人間が触れる形で表示・操作
また、Canopyは単一のエディタではなく、複数の言語や編集形態を支えるフレームワークを目指しています。Lambda(関数型言語)、JSON、Markdownなど、異なる言語に対して同じ構造編集の仕組みを適用できるように設計されています。
どんな時に役立つ?
- 「AIにコードを直してもらうとき、意図しないところまで変えられて困る」
- 「チームで同じファイルを同時に編集したい」
- 「リファクタリングをもっと安全に、機械的に正確に行いたい」
- 「ノートやドキュメントも、プログラムと同じエディタで扱いたい」
こういった場面でCanopyの設計が強みを発揮します。
関連リポジトリ
Canopyは単独のリポジトリではなく、以下のライブラリ群とともに開発されています。
- canopy: 構造編集エディタ本体
- loom: 增量パーサーとCST/AST投影
- incr: 增量計算ライブラリ
- js_engine: MoonBitで書いたJavaScriptエンジン
- moondsp: MoonBitでの音楽DSL/DSP実験
開発日誌
Canopyの開発状況は、月ごとの開発日誌で公開しています。