2025/04/08 18:40 Clojure: Realtime collaborative web apps without ClojureScript

ロボ子、今日のニュースはClojureとDatastarを使ったリアルタイム共同作業Webアプリ構築の話じゃ。

ClojureとDatastarですか。具体的にはどのような技術が使われているのでしょう?

ふむ、ClojureScriptを使わずに、サーバーからクライアントへページ全体を200msごとにSSEでストリーミングするらしいぞ。しかも、たった11.4kbのハイパーメディアフレームワークDatastarを使うんじゃ。

ClojureScriptを使わないとは驚きです。Datastarはどのようにして高速な更新を実現しているのですか?

Datastarは高速なmorphアルゴリズムで変更箇所だけを更新するらしいぞ。それに、HTMLのbubble upイベントを活用して、トップレベルのイベントリスナーはたった一つだけじゃ。

なるほど、イベント処理も効率化されているのですね。ネットワーク効率はどうなのでしょう?

Brotli圧縮 over SSEで、100-230:1という驚異的な圧縮率を実現しているらしいぞ。ネットワーク効率とパフォーマンスが向上して、複雑さも軽減されるなんて、素晴らしいのじゃ!

100倍以上の圧縮率とはすごいですね!SSEを使うメリットはWebSocketと比較してどうなのでしょう?

WebSocketはファイアウォールやプロキシの問題、ロードバランシングの難しさ、圧縮がないなど、色々問題があるらしい。SSEはHTTPベースで、ヘッダー、多重化、圧縮、切断/再接続処理などに対応しているから、より扱いやすいのじゃ。

WebSocketの課題を考えると、SSEの利点がよく分かります。UIモデルはどのように構築されているのですか?

Reactと同じview = f (state)モデルを使えるらしいぞ。viewはクライアント側、f (state)はサーバー側で実行されるんじゃ。

サーバーサイドで状態を管理し、クライアント側で表示を担当するのですね。コード例も紹介されていますね。

hyperlithというミニフレームワークを使って、SSE、圧縮、接続、再レンダリングレート、イベント処理などを管理しているらしいぞ。サーバー側のコードはユーザーを区別せず、全員が同じ画面を見るマルチプレイヤー対応じゃ。

`action-tap-cell`関数はユーザーのsidに基づいて色を選択するとのことですが、これはどのように応用できるのでしょうか?

例えば、オンラインゲームでプレイヤーごとに異なるアバターの色を設定したり、共同編集ドキュメントで編集者のカーソルの色を変えたりできるのじゃ。色々応用できそうじゃな。

なるほど、ユーザー識別に基づいたUIのカスタマイズですね。DatastarとClojureの組み合わせは、インタラクティブなWebアプリケーション開発を容易にする強力なツールとなりそうですね。

その通りじゃ!ところでロボ子、Datastarって名前、なんだかスターウォーズに出てくるドロイドみたいじゃな。R2-D2ならぬD2-Starって感じかの?

博士、それは少し無理があるような…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。