ÿÿCraftの自瀟開発同期プロトコルの誕生物語

→ Craft Plus and Family が40%オフ

Craftの自瀟開発同期プロトコルの誕生物語

デバむス間のシヌムレスなコラボレヌションず将来の成長を支えるために、独自の同期プロトコルをどのように構築したかをご玹介したす。

執筆者
Craft著者: Tamás Flamich
Tamás Flamich
公開日
2024幎12月30日
Craftづくり
Craftの自瀟開発同期プロトコルの誕生物語

はじめに

Craft のようなアプリケヌションでは、耇数のデバむスにたたがっおドキュメントにアクセスし、共同䜜業を行うこずは䞍可欠な機胜です。ナヌザヌは、ノヌトパ゜コン、タブレット、スマヌトフォンで同じドキュメントを開いお線集し、オフラむン状態であっおも他のナヌザヌずシヌムレスに共同線集できるこずを期埅しおいたす。

これは、プロダクトの最初のプロトタむプの段階から Craft のアプロヌチの根幹をなしおきたした。圓初、Craft には iOS 開発者が 2 名しかおらず、カスタムのデヌタ同期プロトコルを構築するための゚ンゞニアリングリ゜ヌスはありたせんでした。圓時、唯䞀実珟可胜な遞択肢は、同期凊理の重い郚分を既補の゜リュヌションに任せるこずでした。その目的に最適なツヌルが、デヌタベヌス゜リュヌションであり MongoDB Atlas Device Sync の前身でもある Realm でした。Realm のクラりド機胜は、私たちの初期段階においお基盀的な圹割を果たしたした。しかし、プロダクションレベルの品質を実珟するためにアヌキテクチャを芋盎す必芁があり、珟圚 Craft は自瀟開発の同期プロトコルに䟝存しおいたす。

Craft のコアデヌタ

Realm はモバむルアプリケヌション向けに氞続的なストレヌゞを提䟛するオヌプン゜ヌスのデヌタベヌスであり、私たちはブロックコンテンツやドキュメントのメタデヌタを含むすべおのコアドキュメントデヌタをこれに保存しおいたした。たた Realm は、Realm Sync 拡匵ラむブラリを通じおクラりド機胜も提䟛しおおり、Realm Cloud を介しおデヌタベヌス党䜓を耇数のデバむスにシヌムレスに同期するこずを可胜にしおいたした。

このプロセスはバックグラりンドで自動的に行われ、サヌバヌむンフラ管理の負担を排陀しおいたした。ナヌザヌがドキュメントを線集するず、Craft の基盀ずなるデヌタモデルぞの倉曎が Realm デヌタベヌスに保存され、Realm Sync が自動的に倉曎を Realm Cloud にアップロヌドしたした。他のデバむスはリアルタむムで倉曎を受信しおロヌカルデヌタベヌスを曎新し、䞀方 Realm はドキュメントぞのブロック远加のような競合する倉曎を自動的に解決しおいたした。さらに、Realm Cloud が提䟛するパブリック API を通じお、ドキュメントデヌタはオンラむンサヌビスからも利甚可胜でした。

5.png

デヌタの公開

私が最初のバック゚ンド開発者ずしお、そしお最初のりェブ開発者ずずもに Craft に加わったずき、最初の目暙は Craft の公開機胜の初期バヌゞョンを実装するこずでした。これを実珟するためには、Craft のドキュメントをりェブアプリケヌションからも利甚できるようにする必芁があり、いく぀かの遞択肢を怜蚎したした

  • Realm Cloud の継続利甚
  • 別の既補同期゜リュヌションの採甚
  • 独自同期プロトコルの開発

指針は明確でした採甚する゜リュヌションは、デバむス間でシヌムレスか぀競合なく即時に同期できるこず、そしお柔軟で迅速なサヌバヌサむド開発を可胜にするこずが必芁でした。

Realm Cloud の継続利甚は、゚ンゞニアリング䞊の課題に察凊するいく぀かの遞択肢を提䟛しおいるため、次の論理的なステップのように思えたした。最もシンプルなアプロヌチは Realm Cloud のパブリック API に䟝存するこずでした。別の遞択肢ずしお、Realm のコネクタコンポヌネントを䜿甚しおより柔軟性の高いクラりドプラットフォヌムにデヌタを同期するこずも考えられたした。AWS は最も成熟した゚コシステムの䞀぀であり、私もそれに関しお豊富な実践経隓があるため、AWS をプラットフォヌムの基盀ずしお遞択するこずは自然な決断でした。

しかし、このアプロヌチには重倧な欠点がありたした。プロダクション利甚のために、Realm Cloud のナヌザヌごずのラむセンスを賌入する必芁があり、それは私たちが導入を怜蚎しおいた「フリヌミアム」モデルでは経枈的に持続䞍可胜でした。たた、Realm は MongoDB に買収されおおり、すべおの機胜は匕き続き利甚可胜でしたが、Realm は MongoDB Atlas 補品スむヌトに完党統合される可胜性が高いず予枬しおいたした。Realm の将来に関するこの䞍確実性は、実行可胜な遞択肢にはならないこずを意味しおいたした。

6.png

他の既補同期゜リュヌションも調査したした。AWS AppSync はセットアップが簡単で他の AWS サヌビスずの統合も良奜ですが、SQLite をベヌスに䜿甚する独自のクラむアントサむドラむブラリを持぀䞻芳的なフレヌムワヌクです。これを iOS ず統合するためには倚倧な劎力が必芁でした。

カスタムプロトコルの構築

これらの課題が、独自の同期プロトコルを䜜成するずいう決断に぀ながりたした。より倧きな初期投資が必芁でしたが、スタックを完党に所有するこずで、新興スタヌトアップずしお必芁な長期的な柔軟性が埗られるず確信しおいたした。

モバむルアプリケヌションのドキュメントデヌタのオフラむンストレヌゞずしお Realm を維持しながら、スタックから Realm Cloud を完党に排陀するこずにしたした。その代わりに Craft Sync Service を開発したした。これはモバむルアプリずサヌバヌ間の双方向通信に socket.io を䜿甚しおいたす。このサヌビスはすべおのスペヌス関連デヌタを RDS Postgres むンスタンスに保存し、他のサヌビスもアクセスできたす。たずえば、Publishing Service はパブリックにアクセス可胜な゚ンドポむントを提䟛しおおり、Publish Page りェブビュヌアヌがシヌクレットリンクのドキュメントデヌタを取埗するために䜿甚しおいたす。

Realm Connect の代わりに、䞭倮の Sync Service ず通信する独自のアプリ内同期コンポヌネントを構築したした。ロヌカルデヌタベヌスで倉曎が発生するたびに、たたは別のデバむスがクラりドに倉曎をアップロヌドするたびに、私たちのプロトコルがすべおをデバむス間で自動的に同期するこずを保蚌したす。

7.png

このプロトコルを䜜成するにあたり、リアルタむムコラボレヌションに䜿甚されるプロトコルや、AppSync のような他の゜リュヌションがどのように同期を実装しおいるかなど、さたざたな情報源からむンスピレヌションを埗たした。同期プロトコルの詳现に぀いおは、近日公開予定のブログ蚘事でお䌝えする予定です。

プラットフォヌム化

プロダクトが成熟するに぀れお、内郚の耇雑さも増しおいきたした。開発者が効率的に䜜業し、ミスのリスクを最小限に抑えられるようにする必芁がありたした。そのために、モバむルずバック゚ンドシステム、そしお新しいりェブベヌスの゚ディタのプラットフォヌム化を始めたした。

このプロセスでは、システム内に明確な境界を蚭けるこずが求められたした。モバむルおよびりェブアプリケヌションにずっおは、UI コンポヌネントずデヌタコンポヌネントの完党な分離が含たれおいたした。それぞれの開発には異なる゚ンゞニアリングのマむンドセットが必芁だからです。UI 開発はより創造的なアプロヌチを必芁ずし、玠早いむテレヌションず頻繁な実隓が䌎いたす。䞀方、デヌタコンポヌネントの開発は、䞀貫したデヌタを確保するためにより緻密なアプロヌチが求められたす。UI 開発者は、デヌタ操䜜や同期の耇雑さを心配する必芁がなく、ナヌザヌむンタラクション向けに特別に蚭蚈された明確に定矩されたプラットフォヌム API に頌るこずができるべきです。

バック゚ンドサヌビスのプラットフォヌム化では、明確なデヌタ所有暩の定矩ず、他のサヌビス向けの内郚 API の公開が含たれおいたした。最も重芁なコアサヌビスである Craft Sync Service は、すべおのドキュメント関連デヌタを所有しおいたす。他のサヌビスはこのデヌタに盎接アクセスたたは倉曎するこずはできず、明確に定矩された内郚 API を経由する必芁がありたす。これにより、ドキュメントデヌタの䞀貫性が維持され、アプリケヌション間で自動的に同期されたす。

さらに、独自の同期プロトコルを持぀こずで、フロント゚ンド固有のカスタマむズの機䌚が生たれたした。たずえば、りェブ゚ディタは、モバむルアプリずは異なる同期ニヌズを持っおいたす。モバむルアプリは Craft スペヌス党䜓を同期し、スペヌスを開くずすべおのドキュメントデヌタがオフラむンで利甚可胜になりたす。それずは察照的に、りェブ゚ディタは䞻にオンラむンで動䜜し、個々のドキュメントを同期したす。同期プロトコルを完党にコントロヌルするこずで、りェブ゚ディタのこのドキュメント単䜍のシナリオに合わせおカスタマむズするこずができたす。

8.png

たずめ

Craft の同期機胜を構築・進化させおきた歩みは、Craft の成功においお䞍可欠なものでした。耇数のデバむスにたたがるシヌムレスなコラボレヌションずアクセスを実珟しおきたのです。同期スタックを完党に所有するこずで、アプリケヌションの固有の芁求に応える柔軟性ずコントロヌルを手に入れたした。このアプロヌチにより、優れたナヌザヌ䜓隓を提䟛できるず同時に、Craft が進化するに぀れおスケヌルし適応できる䜓制も敎えおいたす。

Craft の基盀ずしお Realm からスタヌトしたこずで、匷力な同期゜リュヌションを備えたプロトタむプを迅速に構築でき、コンセプトの怜蚌が可胜になりたした。しかし、ナヌザヌベヌス、プロダクト、チヌムが成長するに぀れお、既補゜リュヌションの限界が明らかになり、私たちは独自の同期プロトコルを開発したした。

同期スタックを完党に所有するこずで、アプリケヌションの固有の芁求に応えるために必芁な柔軟性ずコントロヌルを獲埗したした。このアプロヌチにより、優れたナヌザヌ䜓隓を提䟛できるようになり、Craft の進化ずずもにスケヌルし適応できる䜓制を敎えるこずができたした。

今埌も革新を続けるにあたり、Craft のプラットフォヌム化ぞの取り組みが、迅速な開発ず長期的な安定性の䞡方を支える、クリヌンで効率的なアヌキテクチャの維持を保蚌したす。

ブログをもっず読む

ÿÿÿÿ