Canopy開発日誌-2025年12月〜2026年2月-まとめ

Canopyは「エディタ」を作る前に、CRDT実験から始まった。12月26日の3日間で原型が立ち、2月末にはmonorepo化に至る。日々の記録は通常版の日誌、英語版はHighlights (English)

ソースコードを構造(IR)として編集する MoonBit 製エディタ。概要はCanopyとは

1. 文字列エディタではなくCRDT実験として始まった

12月26日、まだ画面上にエディタらしいものはない。FugueMaxのmergeアルゴリズムと最小限のpublic APIだけを先に作った。

CRDTを先に置き、projectional editingをその上に積む順番は意図的だ。後から同期機能を足したテキストエディタとは、出発点が違う。

2. 3日目にはもう構造的パースがあった

年末の3日間で、CRDTだけでは終わらなかった。12月28日にはLezer方式のincremental reparsingと構造検証が入っていた。

入力のたびに木がテキストと同期する。あとから全文を再構築しない——この設計は、最初の週から固定されている。

3. 1月は協調編集の骨格づくり

1月はローカルCRDTの実験から、複数人編集を見据えた基盤へ広がった。branchシステム、version vector、event-graph-walker(のちに独立ライブラリへ)を構築した。

CRDTの形式仕様とRLE実装が、それまでの間に合わせのmergeコードを置き換えた。WebSocket signaling serverもこの時期に入り、協調編集はデモの話だけではなくなった。

4. projectional editingの最初の実装

文字ではなくプログラムの意味を編集する——Canopyの核となる発想のPhase 1〜3がこの月に実装された。Reactベースの協調編集デモも作り、ブラウザ上で複数カーソルが同時に動くところまで見せられた。

CRDTと構造編集が、同じリポジトリの中で初めて接続された月でもある。

5. 2月はmonorepo化

2月末までに、単一パッケージでは収まらなくなった。git submoduleによる分割、LCSベースのAST children reconciliation、UndoManager統合、品質検証CI workflowが整った。

loomやincrが後に独立リポジトリへ育てられる形が、ここで出来上がる。incrはbatch rollbackやTrackedCell、docs整備も進め、js_engineはこの3ヶ月だけで約480コミットと、静かに別の勢いで積み上がっていた。


CRDTプロトタイプから動くmonorepoまで3ヶ月。ほぼ一人でのコミットで、PRレビューのプロセスはまだない——それは3月以降の話になる。