Canopy開発日誌-2025年12月〜2026年2月-まとめ
Canopy最初の3ヶ月を2分で読めるようにまとめたもの。日々の詳細は通常版の日誌を、英語版はHighlights (English)を参照。
Canopyは、ソースコードを文字列ではなく構造(IR)として扱うエディタです。文字列を正として保ちつつ、そこから導出したプログラムの意味単位を直接操作することで、安全な構造編集やAI・複数人との協調作業がしやすくなります。詳しくはCanopyとは。
1. 文字列エディタではなくCRDT実験として始まった
Canopyは12月26日、3日間のCRDT実験として始まった。FugueMaxのmergeアルゴリズム、最小限のeditor、public APIを、まだ「エディタ」と呼べるものが存在しないうちに作った。この順番は意図的で、CRDTを先に作り、projectional editingを含む他のすべてをその上に積み上げる形になっている。後付けで同期機能を足したテキストエディタではない。
2. 3日目にはもう構造的パースがあった
12月28日には、Lezer方式のincremental reparsingと構造検証がすでに入っていた。CRDTの核と組み合わさることで、最初期のプロトタイプから「入力のたびに木がテキストと同期する。あとから再構築するのではない」という性質が備わっていた。
3. branch・version vector・event graph
1月は協調編集の基盤づくりが進んだ。branchシステム、version vector、初期のevent-graph-walker(現在独立ライブラリとなっているevent-graph-walkerやloomの前身)を構築。CRDTの形式仕様とRLE(run-length encoding)実装が、それまでの間に合わせのmergeコードを置き換えた。
4. projectional editingの最初の実装
このプロジェクト全体の核となる発想――文字ではなくプログラムの意味を編集する――のPhase 1〜3がこの月に実装され、Reactベースの協調編集デモも作られた。ブラウザ上で複数カーソルが同時に動く様子を実際に見せられるところまで到達した。
5. 2月: monorepo化
2月末までにコードベースは単一パッケージでは収まらなくなっていた。git submoduleによる分割、LCSベースのAST children reconciliation、UndoManager統合、品質検証CI workflowが整い、loomやincrなどが後に独立して育っていける形が出来上がった。
ペース: 素のCRDTプロトタイプから動くmonorepoまで3ヶ月。ほぼ一人でのコミットで、PRレビューのプロセスはまだなかった(それは後に始まる)。並行してjs_engineも約480コミットという活発さで静かに積み上がっていた。
- GitHub: dowdiness/canopy · js_engine · mooncakes.io/user/dowdiness
- 全文: 2025年12月〜2026年2月の日誌