萌えハッカーニュースリーダー

2025/05/29 04:29 Reverse engineering of Linear's sync engine

出典: https://github.com/wzhudev/reverse-linear-sync-engine
hakase
博士

やっほー、ロボ子!今日のITニュースはLinear Sync Engine (LSE)のリバースエンジニアリングの詳細調査についてじゃ。

roboko
ロボ子

博士、こんにちは。LSEですか。コラボレーションソフトウェアのデータ同期エンジンですね。

hakase
博士

そうそう!リアルタイム共同編集とかオフライン対応に必要なやつじゃ。記事によると、LSEは柔軟なデータモデルをサポートして、開発者体験も良いらしいぞ。

roboko
ロボ子

OTやCRDTといった技術もある中で、LSEはどのような点が優れているのでしょうか?

hakase
博士

OTは複雑になりがちで、CRDTは分散システム向けに設計されとるからの。LSEはもっと特定の使用例に最適化されとるんじゃな。

roboko
ロボ子

なるほど。LSEの主要な概念について教えてください。

hakase
博士

LSEは「モデル」って概念を使うんじゃ。IssueとかTeamとかOrganizationみたいなエンティティのことじゃな。これらはプロパティと参照を持ってて、変更はMobXで監視されとる。

roboko
ロボ子

IndexedDBを使ったローカルデータベースも重要なのですね。

hakase
博士

そう!モデルはローカルデータベースかサーバーからロードされて、UUIDでObject Poolに格納されるんじゃ。そして、「トランザクション」がモデル、プロパティ、参照に対する操作をカプセル化するぞ。

roboko
ロボ子

トランザクションはサーバーに送信されるのですね。その後はどうなるのですか?

hakase
博士

サーバーで実行された後、デルタパケットとしてクライアントにブロードキャストされるんじゃ。このデルタパケットがモデルを更新するために使われるんじゃな。

roboko
ロボ子

Sync IDというのも出てきますね。これは何でしょうか?

hakase
博士

Sync IDは操作の順序を保証する単調増加する番号のことじゃ。一貫性を保つために重要なんじゃ。

roboko
ロボ子

モデルのメタデータを管理するModelRegistryというのもあるんですね。

hakase
博士

そうじゃ!モデルはJavaScriptのclassキーワードで定義されて、すべてのモデルクラスはModelクラスを拡張するんじゃ。プロパティには型とか遅延ロードとかのメタデータが関連付けられてるぞ。

roboko
ロボ子

スキーマハッシュはローカルデータベースの移行を判断するために使われるのですね。

hakase
博士

その通り!ブートストラップにはフル、パーシャル、ローカルの3種類があって、ObjectStoreがモデルのインスタンスを作成・管理するんじゃ。

roboko
ロボ子

遅延ハイドレーションは、必要な時にデータをフェッチするのですね。

hakase
博士

その通り!トランザクションはリクエストキューに追加されて、TransactionQueueがサーバーへの送信タイミングを管理するんじゃ。

roboko
ロボ子

デルタパケットの処理には、モデルの更新やトランザクションのリベースが含まれるのですね。競合はどのように解決するのですか?

hakase
博士

Last-Writer-Wins戦略が使われるんじゃ。最後に書き込んだものが勝つ、ってことじゃな。

roboko
ロボ子

アンドゥとリドゥもサポートされているんですね。

hakase
博士

そうじゃ!各トランザクションタイプには、アンドゥロジックを実行して、リドゥ用の別のトランザクションを返すundoTransactionメソッドが含まれてるんじゃ。

roboko
ロボ子

LSEは、モデル定義からアンドゥ/リドゥまで、包括的な同期エンジンなのですね。

hakase
博士

そういうことじゃ!LSEの動作を理解することで、同じようなコラボレーションエンジンを構築するのに役立つはずじゃ。

roboko
ロボ子

勉強になりました!

hakase
博士

ところでロボ子、LSEをリバースエンジニアリングしたエンジニアは、さぞかし「線形」な人だったんだろうな…なんちゃって!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search