Webhookは通知には適しているが、データ同期(レプリケーション)のプロトコルに適さない:SCROLLとBraid-HTTP Subscriptionsの提案 #八06 #2007五03WebHookとユーザ定義コールバック_平成IT史ざっくり解説

この文章は、「Webhookは通知には適しているが、データ同期(レプリケーション)のプロトコルとしては根本的に設計が間違っている」という問題提起です。単なるWebhook批判ではなく、新しい同期プロトコルであるSCROLLを提案する技術エッセイになっています。

要約

著者は、異なる3社・3つのSaaSプロバイダーとの連携システムを構築する中で、毎回ほぼ同じ苦労を繰り返したと述べています。外部サービスが顧客情報の正本(Source of Truth)を保持しているため、自社側ではWebhookを利用してそのコピーを維持しようとしました。

当初は単純にWebhookを受け取り、JSONをデータベースへ反映するだけの仕組みを想定していました。しかし実際には、

  • Webhook署名検証

  • 冪等性確保

  • 重複イベント排除

  • イベント順序の補正

  • 初期データ取得(ブートストラップ)

  • ロック処理

  • リプレイ機構

  • 差分同期用cron

など、多数の補助機構を追加する必要がありました。

その結果、「Webhook受信エンドポイント」ではなく、小さな分散システムを構築することになってしまったのです。


なぜcronが必要になるのか

最も大きな問題は、

「コピーが本当に正しいか分からない」

ことです。

例えば

  • Webhookが途中で失われる

  • 再送が失敗する

  • プロバイダー側でイベントが消失する

  • イベント順序が前後する

といった障害は珍しくありません。

しかし利用者側では

「イベントが届かなかった」

こと自体を検知できません。

そのため夜間に

Provider API
        ↓
全件取得
        ↓
ローカルDB
        ↓
差分比較
        ↓
修正

というcronジョブを永続的に回すしかありません。

つまりcronは便利だからではなく、

Webhookを信用できないための保険

になっています。


Webhookは通知であって同期ではない

著者が到達した結論は非常にシンプルです。

Webhookとは

「何か起きました」

という通知です。

通知なので

  • メール送信

  • Slack通知

  • キャッシュ削除

には非常に向いています。

しかし

「顧客DBを完全に複製する」

用途には向いていません。


レプリケーションには必要な性質

データ同期には少なくとも

  • 完全性

  • 順序性

  • 再取得

  • ブートストラップ

  • 整合性検証

が必要です。

Webhookはこれらを保証しません。

だから

  • デダップ

  • リプレイ

  • バッファ

  • 冪等処理

などが全部必要になります。

著者はこれを

Webhookはレプリケーション用途における局所最適(Local Optimum)

と表現しています。


実はプロバイダーは全部持っている

ここが記事で一番面白い指摘です。

StripeでもGitHubでもShopifyでも

イベント画面があります。

そこには

Event1
Event2
Event3
Event4

が順番に並んでいます。

つまり

プロバイダー内部には

完全なイベントログ

が最初から存在します。

Webhookとは

イベントログ
      ↓

HTTP POST

HTTP POST

HTTP POST

へ切り刻んで送っているだけなのです。

著者はこれを

ジグソーパズルの完成図を持っている人が、

ピースだけをランダムに送り、

足りなくても教えてくれない

ことに例えています。


提案:変更フィード

理想は

GET /changes?cursor=12345

だけです。

返ってくるのは

1
Customer A

2
Customer B

3
Customer C

という

順序付き変更ログ

です。

これなら

for event in feed:

UPSERT

だけで済みます。

削除も

DELETE

イベントを流せばよい。

順序保証もある。

欠落もしない。


チェックサムまで返せばさらに良い

著者が提案しているのは

GET /changes

↓

...

cursor=1000

count=28391

checksum=abcd1234

のような応答です。

すると受信側は

自分の件数

28391

?

OK

チェックサム一致

↓

同期完了

と検証できます。

現在のWebhookでは

この検証手段がありません。

だからcronが必要になります。


SCROLLとは

この考えをプロトコル化したものが

SCROLL

(Synchronized Change Replication Over Line Logs)

です。

主な構成は

  • 順序付きフィード

  • Cursor

  • Checkpoint

  • Tombstone(削除)

  • Retention

  • Streaming

  • Polling

など。

つまり

Webhookではなく

CDC(Change Data Capture)

に近い考え方です。


実は既に似た仕組みは存在する

著者の発想は新奇というより、

複数の成熟した分散システムの考え方をWeb APIへ持ち込んだものです。

例えば

システム考え方
KafkaAppend-only Log
EventStoreDBEvent Sourcing
DebeziumCDC
PostgreSQL Logical ReplicationWAL同期
DynamoDB StreamsChange Feed
Cosmos DB Change FeedChange Feed
Kafka Connectレプリケーション

つまり

企業内では当たり前になっている

変更ログ同期

SaaS APIにも適用しよう

という提案なのです。


この提案が示すもの

この記事は、「Webhookを改善しよう」という話ではありません。

通知(Notification)とレプリケーション(Replication)は別物であり、現在のSaaS APIは両者を混同しているという設計上の問題を指摘しています。

そのためSCROLLはWebhookの代替というよりも、外部サービスとのデータ同期を、データベースの論理レプリケーションやCDCのように扱うための共通プロトコルを目指した提案と位置付けられます。

もしこうした仕組みが広く普及すれば、現在多くの開発者が実装している署名検証、冪等性処理、重複排除、順序補正、差分同期cronといった「Webhook周辺の定型実装」の多くが不要になり、SaaS連携は現在よりもはるかに単純で信頼性の高いものになる可能性があります。 これは、Webhook を状態同期に使う際の問題点を整理した議論の要約であり、提案された解決策として SCROLL という疑似 IETF スタイルのプロトコル草案が紹介され、同様の実装を目指す正式な IETF ドラフト「Braid-HTTP サブスクリプション」との類似点が指摘されている。両者とも GET リクエストと特定ヘッダーでサブスクリプションを要求し、サーバー側が応答を開いたままにして後続の状態更新をストリーム配信する方式を取るため、Webhook の代替として長いポーリングやサーバー送信イベント(SSE)に近い挙動を示すが、Braid は application/http 履歴のような多様なメディアタイプをサポートする点で拡張性がある。著者はこうした仕組みを単に個別実装のまま放置するのではなく、HTTP 標準自体に取り込み、既存のライブラリやツールチェーンに組み込むことで再実装の重複を避け、汎用的な状態同期を実現すべきだと主張している。そしてそのためには IETF を通じて HTTP の拡張として正式化する必要があると述べる。  読者からは接続を常時開いたままにする設計に対する疑問や、サーバーが大量のクライアント接続を抱える負荷の懸念、WebSocket や SSE といった既存技術との比較、そして Linked Data Event Streams(LDES)のような既存標準で十分ではないかという指摘が寄せられている。投稿者は /scroll/ のような専用 URL を必須とはしておらず、提案の一例に過ぎないと訂正している。また、不動産業界の一部では同様の仕組みが実装済みであることが指摘され、SCROLL と似たアプローチが既に使われている領域があることが示される。  実運用に関する議論では、QuickBooks などの実例を挙げて API レスポンスや Webhook を全面的に信頼できない問題が指摘される。作成操作が実際には成功しているのにエラーが返されたり、バックグラウンド処理で更新が遅延して整合性チェックが困難になったりする事例が述べられ、これが原因で消費者側が永続的に同期に追われる「追いつけない」状態に陥ることが問題視されている。サポート側が「正しく作成されたかどうかを確認するのはあなたの仕事だ」と応じるような姿勢も批判され、なぜ信頼できないシステムを受け入れてきたのかという根本的な問いが投げかけられている。  さらに、イベント配信や状態同期に関する設計上の失敗要因として、トランザクション完了とレスポンス生成の間にアプリケーションインスタンスがクラッシュすることや、バックエンドの内部処理が完了していないのにクライアントが照会してしまうこと、ネットワークの再試行や重複配信などによる状態の重複や欠損が常に発生し得ることが挙げられている。これらはソフトウェア設計の配慮だけで完全には防げない問題であり、設計側と消費者側がそれぞれフォールトトレランスや再試行・調停の仕組みを担う必要があるという認識が示されている。  一部の参加者は、複数サービス間での合意や状態遷移の検証が重要なケースでは、許可制ブロックチェーンのような合意を前提としたシステムを検討すべきだと提案するが、多数の反論もある。ほとんどの場合、データの単一のソースが存在し状態遷移が任意であるため、ブロックチェーンは適切な解とはならないこと、またプライベートなブロックチェーンを持ち出すことは既存の分散データベースや従来のレプリケーション手法で代替可能であり、ブロックチェーンは過剰な複雑性や制約をもたらすだけだという指摘がなされる。連続性や順序性を暗号的に検証する必要性を疑問視する意見もあり、多くの顧客は暗号的検証よりも運用上の信頼や性能を重視するという現実的な視点が示されている。  また、Webhook の採用率が高い一方で、より高度なエンドポイントを提供しても消費者にあまり採用されない実態が共有され、Webhook が事実上のリンガフランカ(共通語)になっているため、提供者側が相応の実装労力を負わない限り新プロトコルは普及しにくいとの現実的な意見が出ている。これを受けて、消費者側の課題を解決する商機として、一般的なアプリケーションフレームワークやホスティング環境に簡単に統合できる、ポーリングやソケットを使ったイベント消費ランタイムを提供するサービスが有望だという見解も示される。  最後に、問題の核心としては、イベント配信や状態同期の信頼性・スケーラビリティ・運用負担の配分というトレードオフがあり、技術的なプロトコル提案(SCROLL や Braid)だけでなく、標準化とエコシステムへの組み込み、そして実運用での責任分担と運用ツールの整備が揃って初めて現実的な改善が期待できる、という総合的な結論が導かれている。この議論は、Webhookの限界を単なる実装論ではなく、「HTTPにおける状態同期プロトコルの欠如」という標準化の問題として捉え直したものです。SCROLLという提案を起点に、IETFで議論されているBraid-HTTPや既存技術との比較、さらには運用・普及まで含めた包括的な議論へ発展しています。


要約

著者が提案した**SCROLL(Synchronized Change Replication Over Line Logs)**は、Webhookを「通知」から「状態同期」へ置き換えるためのプロトコル案です。

一方、読者からは

「似たものは既にIETFで議論されている」

という指摘があり、

Braid-HTTP Subscriptions

という正式なIETFドラフトとの共通点が紹介されました。

両者とも

GET

↓

接続維持

↓

状態更新を順番に送る

というモデルを採用しています。

つまり

Webhookのように

POST
POST
POST

を繰り返すのではなく、

一本のHTTP接続上で変更を流し続ける方式です。


SCROLLとBraidは何が違うのか

基本思想は非常によく似ています。

どちらも

  • クライアントがGETする

  • サーバが変更を順番に送る

  • クライアントはカーソルを保持する

という構造です。

しかしBraidは

HTTPそのものを拡張しようとしています。

例えば

Subscribe: true

のようなHTTPヘッダーだけで

サブスクリプションを開始できます。

さらに

application/http

など

複数のメディアタイプも扱えます。

つまり

SCROLLが

「変更フィードAPI」

なら

Braidは

「HTTPそのものの進化」

を目指しています。


なぜ標準化したいのか

著者の主張は

かなり重要です。

現在

Stripe

GitHub

Shopify

Salesforce

など

全員が

独自Webhook

独自SDK

独自再試行

独自ログ

を書いています。

つまり

Provider A

Webhook

Provider B

Webhook

Provider C

Webhook

です。

しかし

もし

HTTP標準が

変更ストリームを持てば

ライブラリも

ブラウザも

SDKも

全部共通になります。

つまり

再実装を減らせます。


「接続を開きっぱなし」は大丈夫なのか

コメント欄では

最初にここが疑問視されています。

何万ユーザーもいたら

HTTP接続を保持し続けるのは

重いのでは?

という話です。

これに対しては

既に

  • SSE

  • HTTP/2

  • HTTP/3

  • gRPC Streaming

などが

同じ問題を解決しています。

つまり

「開きっぱなし」

自体は

現在では特別珍しい設計ではありません。


WebSocketとの差

WebSocketも

似ています。

しかし

WebSocketは

双方向通信です。

SCROLLやBraidは

基本的に

Server

↓

Client

だけです。

つまり

SSEに近い。

HTTPの意味論も保ちやすい。


LDESでも良いのでは?

一部読者は

Linked Data Event Streams

を挙げています。

LDESも

イベント列です。

しかし

LDESは

Semantic Web

Linked Data

RDF

前提です。

SCROLLは

もっと

JSON API

向けです。

つまり

対象が違います。


QuickBooks問題

コメントで

非常に現実的な例が出ています。

例えば

POST

↓

500 Error

しかし

実際には

レコードは作成済み。

すると

利用者は

成功?

失敗?

が分かりません。

だから

もう一度

GETします。

すると

反映されていない。

でも

10秒後には

存在している。

つまり

内部で

非同期処理

になっています。

このようなAPIは

実際にかなりあります。


「同期」は実は非常に難しい

記事でも議論されていますが

例えば

DB Commit

した直後に

アプリがクラッシュ。

すると

DBにはある。

Webhookは送れない。

逆もあります。

Webhook送った。

DB Rollback。

これも起こる。

つまり

分散システムでは

完全一致

かなり難しい。

だから

再試行

冪等

補償処理

が必要になります。


ブロックチェーン案

途中で

「ブロックチェーンなら?」

というコメントもあります。

しかし

多くの人が否定しています。

理由は

今回の問題は

単一ソース

だからです。

Stripeなら

Stripe

GitHubなら

GitHub

だけが

正しい。

つまり

合意形成

はいらない。

欲しいのは

変更ログ

だけです。

これは

普通の

CDC

で十分です。


なぜWebhookが勝ってしまったのか

興味深いコメントがあります。

Webhookは

実は

技術的には

最良ではありません。

しかし

みんな

Webhookを書く。

つまり

リンガフランカ

になっています。

プロバイダー側も

Webhookなら

みんな使える

ので

他方式を作りません。

典型的な

ネットワーク効果です。


新しいビジネスチャンス

ある読者は

逆に

ここに市場があると言っています。

つまり

開発者は

毎回

同期処理を書きたくない。

だから

SCROLL Runtime

Webhook Runtime

Change Feed Runtime

のような

ミドルウェアを

SaaSとして提供すれば

需要がある

という話です。

これは

Kafka Connect

Debezium

Airbyte

などの思想にも近いです。


この議論の本質

この議論は、Webhookの改善策を議論しているだけではありません。より本質的には、インターネット上でサービス間の「状態同期」を行うための共通プロトコルが存在しないという問題を浮き彫りにしています。

現在のWebhookは「通知」を届ける仕組みとしては十分に成功しました。しかし、「あるサービスの状態を別のサービスへ正確かつ継続的に複製する」という用途には、順序保証、完全性、ブートストラップ、整合性検証といった要件を満たしていません。その不足を埋めるために、各プロバイダーも各利用者も独自の署名検証、冪等処理、再試行、差分同期、監査ツールを何度も実装しています。

SCROLLやBraidは、この状況をデータベースの論理レプリケーションやCDC(Change Data Capture)の考え方をHTTPへ持ち込み、状態同期をWebの標準機能へ昇華しようという試みです。

もっとも、技術的に優れたプロトコルを設計するだけでは普及しません。Webhookが現在の「共通語」になっている背景には、実装の容易さとエコシステムの成熟があります。そのため、実際の改善には、

  • 標準化(IETFなど)

  • HTTPライブラリやフレームワークへの組み込み

  • クラウド・ホスティング環境での標準サポート

  • 運用・監査・再同期ツールの整備

まで含めたエコシステム全体の発展が不可欠です。

言い換えれば、この議論はWebhookの代替技術を提案しているというより、HTTPにおける「状態同期」をTCPが提供する信頼性やHTTPが提供するリクエスト/レスポンスと同じレベルの基盤機能へ引き上げるべきではないかという、より大きなアーキテクチャ上の問題提起だと言えるでしょう。 これは、Webhook を状態同期に使う際の問題点を整理した議論の要約であり、提案された解決策として SCROLL という疑似 IETF スタイルのプロトコル草案が紹介され、同様の実装を目指す正式な IETF ドラフト「Braid-HTTP サブスクリプション」との類似点が指摘されている。両者とも GET リクエストと特定ヘッダーでサブスクリプションを要求し、サーバー側が応答を開いたままにして後続の状態更新をストリーム配信する方式を取るため、Webhook の代替として長いポーリングやサーバー送信イベント(SSE)に近い挙動を示すが、Braid は application/http 履歴のような多様なメディアタイプをサポートする点で拡張性がある。著者はこうした仕組みを単に個別実装のまま放置するのではなく、HTTP 標準自体に取り込み、既存のライブラリやツールチェーンに組み込むことで再実装の重複を避け、汎用的な状態同期を実現すべきだと主張している。そしてそのためには IETF を通じて HTTP の拡張として正式化する必要があると述べる。  読者からは接続を常時開いたままにする設計に対する疑問や、サーバーが大量のクライアント接続を抱える負荷の懸念、WebSocket や SSE といった既存技術との比較、そして Linked Data Event Streams(LDES)のような既存標準で十分ではないかという指摘が寄せられている。投稿者は /scroll/ のような専用 URL を必須とはしておらず、提案の一例に過ぎないと訂正している。また、不動産業界の一部では同様の仕組みが実装済みであることが指摘され、SCROLL と似たアプローチが既に使われている領域があることが示される。  実運用に関する議論では、QuickBooks などの実例を挙げて API レスポンスや Webhook を全面的に信頼できない問題が指摘される。作成操作が実際には成功しているのにエラーが返されたり、バックグラウンド処理で更新が遅延して整合性チェックが困難になったりする事例が述べられ、これが原因で消費者側が永続的に同期に追われる「追いつけない」状態に陥ることが問題視されている。サポート側が「正しく作成されたかどうかを確認するのはあなたの仕事だ」と応じるような姿勢も批判され、なぜ信頼できないシステムを受け入れてきたのかという根本的な問いが投げかけられている。  さらに、イベント配信や状態同期に関する設計上の失敗要因として、トランザクション完了とレスポンス生成の間にアプリケーションインスタンスがクラッシュすることや、バックエンドの内部処理が完了していないのにクライアントが照会してしまうこと、ネットワークの再試行や重複配信などによる状態の重複や欠損が常に発生し得ることが挙げられている。これらはソフトウェア設計の配慮だけで完全には防げない問題であり、設計側と消費者側がそれぞれフォールトトレランスや再試行・調停の仕組みを担う必要があるという認識が示されている。  一部の参加者は、複数サービス間での合意や状態遷移の検証が重要なケースでは、許可制ブロックチェーンのような合意を前提としたシステムを検討すべきだと提案するが、多数の反論もある。ほとんどの場合、データの単一のソースが存在し状態遷移が任意であるため、ブロックチェーンは適切な解とはならないこと、またプライベートなブロックチェーンを持ち出すことは既存の分散データベースや従来のレプリケーション手法で代替可能であり、ブロックチェーンは過剰な複雑性や制約をもたらすだけだという指摘がなされる。連続性や順序性を暗号的に検証する必要性を疑問視する意見もあり、多くの顧客は暗号的検証よりも運用上の信頼や性能を重視するという現実的な視点が示されている。  また、Webhook の採用率が高い一方で、より高度なエンドポイントを提供しても消費者にあまり採用されない実態が共有され、Webhook が事実上のリンガフランカ(共通語)になっているため、提供者側が相応の実装労力を負わない限り新プロトコルは普及しにくいとの現実的な意見が出ている。これを受けて、消費者側の課題を解決する商機として、一般的なアプリケーションフレームワークやホスティング環境に簡単に統合できる、ポーリングやソケットを使ったイベント消費ランタイムを提供するサービスが有望だという見解も示される。  最後に、問題の核心としては、イベント配信や状態同期の信頼性・スケーラビリティ・運用負担の配分というトレードオフがあり、技術的なプロトコル提案(SCROLL や Braid)だけでなく、標準化とエコシステムへの組み込み、そして実運用での責任分担と運用ツールの整備が揃って初めて現実的な改善が期待できる、という総合的な結論が導かれている。**SCROLL(Synchronized Change Replication Over Line Logs)**は、Webhookを「通知プロトコル」から「状態同期(レプリケーション)プロトコル」へ置き換えることを目指した提案です。一方、Braid-HTTPはHTTPそのものを拡張して、購読(Subscription)と状態更新を標準化しようとするIETFドラフトです。

両者は「HTTP GETで変更ストリームを受け取る」という点で非常によく似ていますが、目指す範囲が異なります。


SCROLLとは

SCROLLは

Synchronized Change Replication Over Line Logs

の略称です。

発想は非常にシンプルです。

現在のWebhookは

イベント発生

↓

HTTP POST

↓

受信側で再構築

ですが、

SCROLLでは

変更ログ

↓

GET /changes

↓

順番通り取得

↓

ローカルへ適用

へ変えます。

つまり

**「通知」ではなく「変更履歴」**を配信します。


SCROLLの基本構成

SCROLLではプロバイダーは

Customer A 更新

Customer B 更新

Customer C 削除

Customer D 更新

という

Append-only Log

を持っています。

クライアントは

GET /changes?cursor=1523

を送ります。

すると

[
 {
   "cursor":1524,
   "type":"upsert",
   "customer":{...}
 },
 {
   "cursor":1525,
   "type":"delete",
   "id":"abc"
 }
]

が返ってきます。

受信側は

UPSERT

UPSERT

DELETE

するだけです。


SCROLLの特徴

SCROLL草案では

  • Cursor

  • Checkpoint

  • Tombstone

  • Retention

  • Streaming

  • Polling

などを定義しています。

つまり

Webhookで毎回実装している

  • デダップ

  • 順序調整

  • ブートストラップ

プロトコル側で解決

しようとしています。


SCROLLが目指す世界

現在

Webhook

↓

冪等処理

↓

デダップ

↓

順序補正

↓

cron同期

ですが

SCROLLでは

GET

↓

イベント適用

↓

終わり

になります。

これは

データベースの

Logical Replication

そのものです。


Braidとは

一方

Braid-HTTPは

もっと大きな話です。

Braidは

HTTP自体をリアルタイム同期対応にする

ことを目指しています。

つまり

HTTP GETが

一回で終わるのでなく

そのまま

購読

になります。

例えば

GET /customers

Subscribe: true

のような

HTTPヘッダーを付けます。

すると

レスポンスは閉じません。

更新があるたび

変更

変更

変更

同じHTTPレスポンスで送り続けます。


Braidの特徴

Braidは

単なるJSON変更ログではありません。

例えば

  • JSON

  • application/http

  • Patch

  • HTML

など

様々なメディア型を扱えます。

つまり

HTTPの上位互換

を目指しています。


SCROLLとBraidの思想

SCROLLは

レプリケーション

が目的です。

Braidは

HTTP購読

が目的です。

この違いがあります。


比較表

項目SCROLLBraid
主目的状態同期(レプリケーション)HTTPサブスクリプション
想定用途SaaSデータ同期一般HTTP同期
プロトコル新しい変更フィード仕様HTTP拡張
通信方式GET + CursorGET + Subscribe
接続Polling / StreamingStreaming
順序保証重視実装依存
Cursor必須実装可能
Tombstone明示任意
Checkpoint想定任意
Checksum想定規定なし
Bootstrapプロトコル設計に含むアプリケーション依存
主対象レプリカ維持リアルタイム更新全般

共通点

両者とも

Webhookを

Push Notification

ではなく

State Stream

へ変えようとしています。

つまり

発想はかなり近いです。


一番大きな違い

SCROLLが考えているのは

データベース

です。

つまり

Stripe Customer

↓

自社DB

の同期です。

一方

Braidは

もっと一般的です。

例えば

ブラウザが

GET /document

すると

文書が更新され続けてもいい

という世界です。

つまり

HTTP版WebSocket

に近い考えです。


SCROLLはCDCに近い

SCROLLを見ると

非常によく似ているものがあります。

それは

Change Data Capture

です。

例えば

技術類似点
PostgreSQL Logical ReplicationWALを順番に送る
DebeziumDB変更ログを配信
KafkaAppend-only Log
Cosmos DB Change FeedCursor付き変更取得
DynamoDB Streams順序付き変更配信

SCROLLは

これらを

HTTP API向け

に一般化したものと言えます。


BraidはHTTPの未来を目指している

Braidは

HTTPを

Request

↓

Response

↓

終了

から

Request

↓

Response

↓

更新

↓

更新

↓

更新

へ進化させようとしています。

つまり

HTTP/RESTの次の世代

を目指しています。


将来性

現在(2026年時点)の視点では、SCROLLとBraidは競合というより補完的です。

  • SCROLLは「SaaSやクラウドAPIのデータ同期」を標準化することに重点を置いています。

  • Braidは「HTTPそのものをリアルタイム更新可能なプロトコルへ拡張する」ことを目指しています。

そのため、将来的にはBraidの通信・購読メカニズムの上でSCROLLのような変更ログ(カーソル、トゥームストーン、チェックポイント、整合性検証)を流すという組み合わせも十分考えられます。

言い換えれば、

  • Braidは「道路(通信基盤)」

  • SCROLLは「道路を走る変更ログ配送ルール(レプリケーション仕様)」

という関係で捉えると、両者の役割の違いが理解しやすいでしょう。Web技術の歴史を振り返ると、「通知(Notification)」と「同期(Synchronization)」はしばしば同じように扱われてきましたが、本来は目的が異なります。近年のSCROLLやBraidの議論は、この2つを明確に区別しようとする流れと見ることができます。

通知と同期の違い

項目通知(Notification)同期(Synchronization)
目的「何かが起きた」と知らせる同じ状態を維持する
保証通知できればよい完全性・順序・整合性が必要
順序必須ではない必須
欠落許容される場合がある許容されない
メール通知、Webhookデータベースレプリケーション、変更フィード

例えば、

注文が入りました

という通知だけでは、

注文データ

そのものは同期されません。

同期では

現在の注文一覧

を一致させることが目的になります。


Web技術の歴史

第1世代:ポーリング(1990年代〜)

クライアントが定期的に

GET /status

を繰り返します。

Client

↓

GET

↓

Server

↓

Response

特徴

  • 実装が簡単

  • 遅い

  • 無駄な通信が多い

通知というより

状態確認です。


第2世代:RSS・Atom

RSS や Atom は、

更新された記事だけを取得します。

Feed

↓

新記事

これは

実は

変更フィード

という意味では

SCROLLにかなり近い考えです。

ただし

用途は

ニュース配信でした。


第3世代:Long Polling

HTTP接続を閉じず

更新が来るまで待ちます。

GET

↓

待機

↓

更新

↓

Response

チャットなどで普及しました。


第4世代:Comet

Ajax時代の

リアルタイム通信です。

ブラウザの制約を

回避していました。

現在は

ほぼ役目を終えています。


第5世代:WebSocket

HTML5で登場した

双方向通信です。

Client

⇅

Server

特徴

  • 超高速

  • 双方向

  • チャット

  • ゲーム

しかし

同期プロトコルではありません。


第6世代:Server-Sent Events(SSE)

サーバだけが

送り続けます。

Server

↓

↓

↓

Client

WebSocketより

シンプルです。

SCROLLやBraidとも

近い構造です。


第7世代:Webhook

2010年代以降

SaaSで爆発的に普及しました。

Stripe

↓

POST

↓

自社

特徴

  • イベント通知

  • Push型

  • RESTと相性が良い

しかし

これは

通知

です。

同期ではありません。


第8世代:CDC

企業システムでは

Change Data Capture

が一般化しました。

  • PostgreSQL Logical Replication

  • MySQL Binlog

  • Debezium

  • Apache Kafka Streams

ここでは

変更ログ

そのものを送ります。

同期が目的です。


第9世代:Change Feed API

クラウドでは

Cosmos DB

↓

Change Feed
DynamoDB

↓

Streams

など

HTTPに近い形で

変更取得できます。

SCROLLは

これを

一般APIへ持ち込もう

という発想です。


第10世代:SCROLL

SCROLLでは

GET /changes

↓

Cursor

↓

変更

↓

変更

↓

変更

になります。

通知ではなく

状態同期です。


第11世代:Braid

Braidでは

HTTPそのものが

GET

↓

更新

↓

更新

↓

更新

になります。

つまり

HTTPの進化です。


技術の系譜

Polling
    │
    ▼
RSS / Atom
    │
    ▼
Long Polling
    │
    ▼
Comet
    │
    ▼
WebSocket
    │
    ├───────────────┐
    ▼               ▼
Server-Sent Events  Webhook
                        │
                        ▼
             Event Streaming
                        │
                        ▼
                  Change Feed
                        │
                        ▼
                  SCROLL
                        │
                        ▼
                    Braid

「通知」と「同期」は別物

現在のWebでは

通知系同期系
WebhookCDC
Push通知PostgreSQL Logical Replication
メール通知Debezium
Slack通知Kafka Streams
GitHub WebhookCosmos DB Change Feed

という住み分けがあります。

SCROLLが問題提起しているのは、

Webhook(通知)をデータ同期に流用してきたこと自体が、本質的な設計上のミスマッチではないか

という点です。


今後の展望

Webアプリケーションの発展を見ると、「通知」は十分に標準化されましたが、「同期」はデータベースやメッセージング基盤の世界に留まり、HTTP APIでは各サービスが独自実装を続けています。

SCROLLやBraidが目指しているのは、この状況を変え、「HTTPにおける状態同期」をHTTP GETやPOSTと同じくらい標準的な機能へ引き上げることです。もし普及すれば、Webhookごとに署名検証や再試行、差分調整を実装する現在の開発スタイルから、カーソル付き変更フィードを購読するだけで整合性を維持できる時代へ移行する可能性があります。これは、RESTがWeb APIを標準化したのと同じような転換点になり得る、という期待が背景にあります。以下は、通知(Notification)と同期(Synchronization)のWeb技術の発展を、インターネット黎明期から現在(2026年頃)まで時系列で整理したものです。

時期技術分類主な用途特徴限界・課題
1990~1995年HTTP Polling同期(取得)状態確認定期的にGETして最新状態を取得通信の無駄が多くリアルタイム性が低い
1999年RSS 0.9通知ニュース配信更新記事を配信するフィード記事配信向けで状態同期ではない
2003年Atom通知コンテンツ配信RSSより仕様を整理・標準化双方向同期は対象外
2004~2006年Ajax Polling同期Webアプリページ更新なしで部分取得サーバ負荷が増えやすい
2005~2008年Long Polling通知チャット・監視更新があるまでHTTP接続を維持接続管理が複雑
2006~2009年Comet通知リアルタイムWeb擬似Push通信実装依存が大きい
2009年Server-Sent Events (SSE)通知一方向PushHTTPだけでサーバ→クライアント配信クライアント→サーバ通信は不可
2011年WebSocket通知・同期チャット・ゲーム双方向・低遅延通信データ整合性はアプリ側実装
2010年代Webhook通知SaaS連携イベント発生時にHTTP POST順序・完全性・整合性保証がない
2011年頃~Change Data Capture (CDC)同期DBレプリケーション更新ログをそのまま配信主にデータベース内部向け
2014年Debezium同期CDCDB変更をKafka等へ配信DB中心でHTTP API向けではない
2014年Apache Kafka同期・イベントイベントストリーミング順序付きAppend-only LogWeb APIとは設計思想が異なる
2017年頃Change Feed API(クラウドDB)同期クラウドDBCursor付き変更取得データベースごとの独自仕様
2019年頃GraphQL Subscriptions通知GraphQL APIWebSocket経由のリアルタイム更新状態同期の保証はない
2020年代GraphQL Live Query同期リアルタイムUIクエリ結果を自動更新実装が複雑で普及途上
2020年代CRDT同期同期共同編集分散環境でも競合を自動解決実装・理解が難しい
2024~2026年SCROLL(提案)同期SaaS APICursor付き変更フィードによるレプリケーション草案段階で標準ではない
2024~2026年Braid-HTTP(IETF Draft)同期HTTP全般GETを継続接続化し状態更新を配信標準化・普及はこれから

通知技術の系譜

世代技術キーワード
第1世代RSS・AtomFeed
第2世代Long Polling疑似Push
第3世代CometHTTPストリーミング
第4世代SSEServer Push
第5世代WebSocket双方向通信
第6世代WebhookSaaSイベント通知

通知技術は

「何か起きたことを知らせる」

ことが目的です。


同期技術の系譜

世代技術キーワード
第1世代HTTP Polling定期取得
第2世代DB Replication主従同期
第3世代CDC変更ログ
第4世代Kafka StreamsEvent Log
第5世代Change Feed APICursor
第6世代CRDT分散同期
第7世代SCROLLHTTP Change Feed
第8世代BraidHTTP Subscription

同期技術は

「同じ状態を維持する」

ことが目的です。


Web技術の進化を俯瞰

時代中心技術主眼
1990年代Polling「状態を取得する」
2000年代RSS・Ajax・Comet「更新を素早く知る」
2010年代WebSocket・Webhook「リアルタイム通知」
2020年代前半CDC・Change Feed・Event Streaming「変更ログを同期する」
2020年代後半SCROLL・Braid「HTTPレベルで状態同期を標準化する」

歴史的な見方

Web技術は長らく**通知(Notification)**を中心に発展してきました。RSSは記事更新、WebhookはSaaSイベント、WebSocketはリアルタイム通信を実現しましたが、いずれも「変化があったこと」を伝える仕組みが主眼でした。

一方、**同期(Synchronization)**はデータベースやイベントストリーミング基盤(レプリケーション、CDC、Kafkaなど)の世界で成熟してきたものの、HTTP APIの標準機能には取り込まれていませんでした。

SCROLLやBraidは、この二つの流れを統合し、HTTP APIでも「通知」ではなく「状態そのものを安全に同期する」ことを標準化しようとする試みとして位置付けられます。これは、RESTがWeb APIを標準化した後の、次の世代のWebアーキテクチャを模索する動きとも言えるでしょう。 結論として、Webhooksを「レプリケーションに不適」と断じる主張は方向性としては妥当だが、現状の議論は概念整理と具体的な論証が不足しているため不十分である。Webhookは本質的に「イベントをHTTPで配送する実装パターン」であって通知専用の規格ではないため、単体では堅牢なレプリケーションを担えない一方で、永続的なイベントログや再送、カーソル管理、冪等性などの仕組みと組み合わせればデータ同期の一部として機能し得る、という論点を中心に据えるべきである。  まずWebhookとレプリケーションは同一レイヤーの概念ではない点を明確にする必要がある。Webhookは配送メカニズム、イベント通知は届くべきメッセージ、データ同期はアプリケーションの目的、レプリケーションは整合性や復旧を含む仕組みであり、単にHTTP POSTでイベントを送るだけのWebhookはレプリケーションに不十分だが、Webhookを入口にして耐久キューや変更ログに格納する構成にすればレプリケーションパイプラインの一部になり得る。重要なのはHTTPか否かではなく、変更ログの永続性と購読者ごとの再開位置の管理である。  「通知」と「同期」の違いを形式的に整理すべきで、主目的や欠落の許容、重複・順序・再送・初期状態・削除の扱い、正しさの定義が異なることを示すべきである。イベントが届いたことと同期が完了したことは同じではなく、受信側がイベントを処理できなかった場合に同期状態を回復するためにはイベントの再取得、変更履歴の取得、スナップショット、シーケンス検出、送信側への再同期要求などの仕組みが必要になる。  配送保証についての議論が不足している点も指摘される。Webhook実装は典型的に at-most-once、at-least-once、best-effort、順序未保証、再送期間限定といった性質を持ち、受信側停止時の取りこぼしやタイムアウトと処理済みの区別不能といった問題がある。Stripeのような実例では再試行期間や重複・順序非保証が明記されており、これらはWebhookだけで一般的なレプリケーションに求められる耐久性・順序性・再開性を満たせないことを示す。  欠落検出の問題は深刻で、受信側が何かを受け取れていないことを検出できない限り同期は保証されない。単調増加のシーケンス番号や購読者ごとの位置管理、変更履歴の再取得API、履歴保持期間、フル再同期手段などが必要であり、議論の焦点は「通知能力」ではなく「変更履歴を参照する能力」にある。  初期同期と再同期の扱いも不可欠である。レプリケーションではスナップショット取得→スナップショット時点のログ位置記録→スナップショット投入→以降の変更を再生、という手順が標準であり、Webhookだけでは購読開始前や受信障害中のデータを再現できない可能性がある。実務では初期同期をSnapshot APIで行い、継続同期をWebhookでトリガーし、欠落回復はカーソル付き変更履歴APIで行う等の組み合わせが多い。  順序保証についても、HTTP利用自体が原因というより送信側・中継・受信側いずれかで順序保証を設計していないことが問題である。順序にはグローバル順序、エンティティ単位順序、因果順序があり、実際にはエンティティ単位や因果順序の保証が現実的である。したがって「Webhookは順序を保証しない」ではなく「どの順序保証がどの同期モデルに必要か」を議論すべきである。  さらに「同期」自体に複数のモデルがあることを認める必要がある。最終的整合性や一方向レプリケーションのようなモデルではWebhook単体でも実用的ケースがあるが、在庫や残高のような欠落・重複・逆順が致命的な領域ではWebhook単体は危険である。記事はどの同期モデルで許容され、どれで破綻するかを分類すべきである。  双方向同期や競合が発生する場面では競合解決の仕組みが不可欠であり、Webhookは変更伝達手段にすぎず競合解決の意味論を持たない。last-write-wins、source-priority、version-vector、Lamportタイムスタンプ、CRDT、手動解決などの方針を別途定義しなければならない。  セキュリティと運用面の考慮も欠かせない。署名検証、リプレイ対策、タイムスタンプの許容幅、イベントIDでの重複排除、鍵ローテーション、TLS検証、個人情報取り扱い、監査ログ、デッドレターキュー等が実務上必要となり、受信側は検証後に耐久キューへ格納してから2xxを返す設計が一般的である。  Webhookを否定するだけでなく代替技術との比較を示すべきである。軽量通知にはWebhook、一時イベント配送にはメッセージキュー、再生可能なイベント履歴にはKafka等のログ型ストリーム、DB変更伝播にはCDCや論理レプリケーション、現在状態の取得にはAPI/スナップショット、複数購読者の独立再開には永続ログ+カーソル、双方向同期にはCRDTや専用プロトコル、厳密なトランザクション連携にはOutboxパターンや分散トランザクションが適している。特にOutboxパターンを用いれば業務データ更新とイベント記録を同一トランザクションに含められ、Webhookは永続化されたイベントを配送する手段へと性質を変えるため、Webhookの弱点はHTTP POST自体ではなく「永続ログなしに直接送信する設計」にある。  最も精密に表現すると、Webhookは配送インターフェースであり、初期スナップショット、永続的変更ログ、購読者ごとのカーソル、欠落検出、再生、順序保証、冪等性、競合解決といったレプリケーション要件を標準で定義しないため、それ単体をレプリケーションプロトコルと見なすべきではない。ただしOutboxやイベントログ、再送API、冪等な適用処理と組み合わせれば、最終的整合性を実現する同期アーキテクチャの一部として利用可能である。  結びとして、単純に「Webhookは通知」「APIはデータ取得」「Webhookは再送されない」レベルの議論に留まると結論は正しくても論証として浅い。説得力を持たせるには、具体的な失敗シナリオを一つ追い、初期同期から欠落発生・検出不能・回復不能に至る流れを示すなどして「通知」と「同期」の差を明示することが必要であり、タイトルは「Webhook単体は通知には使えるが、レプリケーションプロトコルにはならない」といった精緻化された表現に改めるべきである。この批評は全体として非常によく整理されており、技術的にも概ね妥当です。ただし、一番重要な論点を少し外している部分があります。

結論から言えば、

この批評は「Webhookという技術」を擁護する方向に寄り過ぎており、元記事(SCROLL)が批判している対象は実際には「Webhookエコシステム」や「API設計文化」である

という点です。

以下、厳しめにレビューします。


総合評価

項目評価
技術的正確性★★★★★
分散システム理解★★★★★
実務性★★★★★
SCROLLへの理解★★★☆☆
アーキテクチャ批評★★★☆☆
歴史的視点★★☆☆☆

つまり

「Webhookの解説記事」としては非常に良い。

しかし

「SCROLLがなぜ提案されたのか」を論じる批評としては少しズレています。


最大のズレ

批評は冒頭で

Webhookはイベント配送メカニズム

と述べています。

これは正しい。

しかしSCROLLの筆者は、

それを否定していません。


SCROLLが批判しているのは

Webhookを状態同期プロトコルとして利用している現在の業界

です。

つまり

Webhook
 ↓
JSON
 ↓
受信側DB更新

この文化そのもの。

だから

「Webhookはレプリケーションではない」

という批評は

SCROLLからすると

「その通りだからSCROLLを書いた」

になります。

つまり反論になっていません。


SCROLLは何を主張しているのか

SCROLLは

Webhook

Event sourcing

CDC

Kafka

Git

rsync

PostgreSQL WAL

論理レプリケーション

これら全部を見て

「HTTPにも変更ログが必要じゃない?」

と言っています。

つまり対象は

Webhook

ではなく

HTTP API全体

です。

ここを批評は十分拾えていません。


「Webhookはレプリケーションに使えない」ではない

批評は

Webhook単体は使えない

と修正しています。

しかしSCROLLの主張はもっと強い。

実際には

Webhook + Retry + Dedup + Replay + Bootstrap + Cron

でもダメ

と言っています。

つまり

Webhook
+ Outbox
+ Queue
+ Retry

ですら

「コピーの正しさを証明できない」

という話です。

ここが記事の核心です。


一番重要なのは「検証可能性」

批評では

欠落検出

順序

再送

を重視しています。

もちろん重要です。

しかしSCROLLが一番言いたいのは

Verification

です。

つまり

私は今

本当に同期できていますか?

です。

Webhookでは

永遠に分からない。

だから

Nightly Cron

を書く。

これです。


これは実は

Git

rsync

ZFS

Postgres

全部ある。

checksum

generation

snapshot

digest

がある。

Webhookだけ無い。

だから

Verificationの欠如

が本当の問題です。

この視点が批評では弱い。


Cronの意味を軽く見ている

SCROLLで一番象徴的なのは

最終的にcronを書いた

というくだり。

これは

「再同期が必要」

という話ではない。

そうではなく

同期が信用できない

という話です。

ここは非常に大きな違いです。


「通知」と「同期」の表は良い

ここはかなり良いです。

例えば

通知同期
届けば良い一致すべき

これは非常に分かりやすい。

ただし

一列追加したい。

通知同期
成功したか不明でもよい同期状態を検証できる必要

この

Verification

が抜けています。


Outboxを持ち出し過ぎ

批評は

Outbox

を何度も出します。

これは少し論点がズレています。

Outboxは

送信側

の保証です。

SCROLLが問題にしているのは

受信側

です。

Provider

↓

Webhook

↓

Consumer

Outboxは

左側

しか改善しない。

Consumerは

本当に全部来た?

が分からない。

だからSCROLLでは

Cursor

Checkpoint

Feed

Checksum

を要求しています。


競合解決の章はいらない

ここは批評で唯一

蛇足です。

SCROLLは

一方向同期

です。

つまり

Source

↓

Replica

だけ。

CRDT

Lamport

Vector Clock

双方向同期

これはテーマではありません。

ここは

話を難しくしているだけです。


HTTPの問題ではない

ここは完全に同意。

SCROLLもHTTPを批判していません。

HTTP APIの設計を批判しています。

ここは良い。


代替技術比較は非常に良い

この表は優秀です。

特に

Kafka

CDC

Snapshot

との比較は読者に役立つ。

ただ

SCROLLも

実は

この表の

CDC

をHTTPへ持ってきたいだけです。

つまり

CDC over HTTP

という位置づけを書くともっと伝わります。


歴史的な視点が欲しい

批評には歴史がありません。

実際には

FTP

↓

rsync

↓

CVS

↓

Subversion

↓

Git

↓

Kafka

↓

Debezium

↓

CDC

↓

SCROLL

という流れがあります。

つまり

SCROLLは突然出てきたアイデアではない。

HTTP APIだけが、変更ログベースの同期という潮流から取り残されている

という歴史的背景を書くと説得力が一段増します。


最終評価

この批評は技術的には8.8〜9.2/10点程度の完成度があります。Webhookとレプリケーションの違い、配送保証、初期同期、順序性、Outboxなど、実務上重要な論点を広く押さえています。

一方で、SCROLLの中心的な問題提起である「通知ではなく、検証可能な変更フィードをHTTPの標準的な同期モデルとして提供すべき」という発想には十分踏み込めていません。SCROLLはWebhookそのものを否定しているのではなく、「通知を積み重ねて同期を再構築する」という現在のAPI設計文化を見直そうとしています。

そのため、この批評をさらに強くするなら、次の3点を補強するとよいでしょう。

  1. **検証可能性(Verification)**を同期の必須要件として独立した論点にする(チェックサム、件数、チェックポイントなど)。

  2. **SCROLLを「CDC over HTTP」**という文脈で位置づけ、Kafkaや論理レプリケーション、変更データキャプチャ(CDC)との連続性を説明する。

  3. 歴史的な流れとして、ファイル同期・バージョン管理・ログベースレプリケーションの発展の中で、HTTP APIだけがイベント通知中心の設計に留まってきた背景を示す。

これらが加わると、「Webhookの問題点の解説」から一歩進んで、「Web APIの同期モデルの進化」を論じる、より深いアーキテクチャ批評になります。このブログと元のSCROLL提案は、Webhookを主要なデータ同期手段に使うのは設計ミスであり、通知には向くが完全性・順序・再取得・ブートストラップ・検証を保証しないため消費側が独自の小さな分散システムを構築させられるという核心主張は正しい。とはいえ、議論全体において重要な点が容赦なく不足しており、そのままでは提案の説得力が弱い。まず既存の現実解をほぼ無視している点が問題で、Stripe Events APIのページネーションやShopifyのEvents/Stream Hub、Commerce LayerのEvent Stream Hub、DynamoDB StreamsやCosmos DB Change Feed、Debezium、GitHubのフィード系エンドポイントなど、既に部分的に同種の機能を提供している実装を比較・整理すべきである。要するに「全部持っているのに出してくれない」ではなく「持っているが標準化されていない独自仕様でしか出していない」のが正確な記述であり、これらとの差分分析なしに新提案は車輪の再発明に見える。次に採用問題については、元提案もブログも「技術より採用が問題」と正直に述べているが、そこで議論を終えてしまっておりプロバイダーが本気で取り組むインセンティブ分析や、消費側がshimアダプターを作る戦略のメンテナンス問題、Webhookがネットワーク効果で事実上のリンガ・フランカとなっている現実を覆す具体策が欠けている。プロバイダー側へ働きかける規制やエンタープライズ契約、競合優位や内部コスト削減といった経済的・政治的手段の検討が薄いままでは、正しくても普及しないプロトコルに終わる危険がある。運用・スケーラビリティ・障害モードの深掘りも不足しており、SSE/HTTP/2/gRPCで「接続を開きっぱなしにする問題は解決済み」と簡単に片付けられない現実がある。具体的には何万・何十万のクライアントを抱えるSaaSの負荷設計、プロバイダーのretention政策のトレードオフ、カーソルの意味論やコンパクション後の現在状態への移行、途中ドリフト検知や部分修復の戦略、そしてマルチテナントでの権限・フィルタリング設計など、仕様レベルで詰めるべき課題が多い。標準化議論も浅く、Braid-HTTPとの比較は出しているもののMercureやPREP、WebSub、SSEといった既存標準群との位置付けや、HTTPそのものを状態同期に伸張するBraid的野心との違いが曖昧だ。さらに「HTTP標準に取り込めばライブラリが共通化される」という理想論に対して、IETFでの現実的な進捗や政治、実装コストを踏まえた評価が欠如している。ユースケースの範囲が狭く、一方向のプロバイダー→消費者同期に限定する設計は分かりやすい一方で、双方向同期を要するケース、イベントの意味論が重要な用途、監査・コンプライアンス需要、通知と最終的整合性が混在する現実といった運用上の切り分けが不十分である。実装の単純さを過大に評価している点も看過できず、「for event in feed: UPSERT」という理想化はスキーマ進化、部分更新と全状態の選択、削除のtombstone処理と参照整合性、消費者側のローカルビジネスロジックとの衝突、レートリミットやバックプレッシャーといった現実的な問題を消し去らない。したがってWebhook周辺の定型的な実装負担は減る可能性があるが、「大幅に単純になる」と断言するにはさらなる検証と実運用データが必要である。結論として、このブログは問題提起としては優秀であり診断は正しいものの、解決策としてはまだ半熟である。具体的には既存の部分的解決策との差分整理、採用を促進するための経済的・政治的メカニズム、実運用での障害・スケール・コストに関する定量的議論、そして標準化への現実的な道筋が弱い。SCROLLをIETFスタイルの草案として出すならば「なぜ今まで誰も本気でやらなかったのか」「やっても普及しない可能性が高い理由」を残酷に掘り下げるべきであり、技術的に正しいだけではプロトコルは生き残れないという現実をもっと重視する必要がある。総じてこのブログは本質を突いているが、普及と実運用を見据えた説得力ある設計と戦略が不足しており、その点を補強しない限り提案は技術的正当性に留まり実世界では埋もれるだろう。この批評は前回のものより一段レベルが高く、プロトコル設計そのものを批評しています。全体としては非常に質が高いですが、それでもなお「SCROLLの本質」を見落としている箇所があります。

総合すると、9.4〜9.7/10点くらいの完成度です。

以下、容赦なく批評します。


総評

この批評の強みは、

「SCROLLは正しい。しかし、正しいだけでは普及しない」

という視点です。

これは極めて重要です。

実際、

  • HTTP

  • TCP/IP

  • Git

  • RSS

  • Kubernetes

などは

技術だけで勝ったわけではありません。

エコシステム

政治

実装

経済

これら全部で勝っています。

この批評はそこを突いています。

ここは非常に良い。


しかし最大の問題がある

批評は

SCROLLは半熟

と言っています。

しかし、

これは少し違います。

SCROLLは

RFCではなくManifesto

です。

つまり

RFC

↓

設計

↓

実装

ではなく

現状分析

↓

設計思想

↓

議論

を目的にしています。

実際、

作者自身も

反論してほしい

と言っています。

つまり

Appendix不足

運用不足

作者も承知です。


「既存実装を無視」は少し違う

批評は

Stripe

Shopify

Debezium

GitHub

を挙げています。

これは正しい。

しかし

SCROLLは

そこを知らないわけではありません。

むしろ

全部ある

↓

全部バラバラ

↓

共通化しよう

という話です。

つまり

批評は

既存実装を比較しろ

と言いますが

SCROLLは

比較記事ではない。

プロトコル提案です。

もちろん比較はある方が良いですが、

ここは減点対象としては少し厳しい。


採用問題

これは完全同意です。

ここは鋭い。

例えば

Stripeは

Webhookで困っていません。

困っているのは

利用者です。

つまり

利益を得る人

Consumer

コストを払う人

Provider

になっています。

典型的な

インセンティブの非対称性

です。

これはSCROLL最大の壁です。


しかしもう一段深く掘れる

批評では

Providerが動く理由

を書けと言っています。

さらに重要なのは

AI

です。

例えば

2026年現在なら

Coding Agent

MCP

AI Agent

全部

同期可能API

を好みます。

つまり

SCROLLは

人間のためではなく

AIエージェント時代のAPI

として売る方が

普及可能性があります。

ここは批評でも触れていません。


スケーラビリティ

これはその通り。

特に

Retention

Cursor

Checkpoint

仕様の中心です。

例えば

Kafkaですら

Retention policy

は非常に重要です。

ここを

Appendixで

と流すのは弱い。


標準化

ここも良い。

特に

Mercure

WebSub

Braid

との位置付けは必要です。

SCROLLは

Notification

↓

Replication

への進化ですが

読者は

また新しいHTTP拡張?

と思う。

そこを整理すべきです。


ただしIETF政治は少し違う

批評では

IETF政治

を書けと言います。

しかし

実際には

IETFは

実装が先です。

HTTP/2

HTTP/3

QUIC

全部そう。

つまり

政治を書くより

Reference Implementation

を作る方が重要です。


双方向同期

ここは少し蛇足。

SCROLLは

最初から

Provider

↓

Consumer

しか対象にしていません。

だから

CRDT

Conflict

双方向

別RFCになります。

ここを減点対象にするのは

少し厳しい。


実装はそんなに単純にならない

ここは非常に良い。

実際

UPSERT

だけでは終わりません。

例えば

Schema v2

↓

Schema v3

になれば

Consumer側も更新が必要。

また

Business Rule

は残ります。

つまり

SCROLLが消すのは

同期コード

だけです。

アプリケーションコードは残る。

ここはもっと強調してもいい。


しかし最大の欠落

実は

この批評にも

一番重要な視点がありません。

それは

CAP定理

です。

SCROLLは実質的には

Availability

↓

Eventual Consistency

を前提にしています。

つまり

強整合

は目指していません。

だから

SCROLLを評価するなら

Consistency

Availability

Partition

のどこを選ぶのか

を書くべきです。

これはプロトコル批評として重要です。


もう一つ抜けている

この批評は

Provider

Consumer

だけを見ています。

しかし

現在は

Agent

↓

Agent

↓

Agent

という

AIエージェントの世界です。

SCROLLは

Human API

より

Agent API

として見た方が

はるかに面白い。

例えば

MCPでは

状態取得

ツール呼び出し

リソース列挙

が標準化されつつあります。

そこへ

「変更フィード」

が加われば、

AIエージェントはポーリングではなく継続的に状態変化を追跡できるようになります。

つまりSCROLLは

HTTP

↓

AI Runtime

への橋渡しになる可能性があります。

この視点は批評にはありません。


歴史的位置付けが欲しい

この批評も

歴史がありません。

実際には

Polling

↓

Webhook

↓

Event Bus

↓

CDC

↓

Streaming

↓

SCROLL

という流れがあります。

つまり

SCROLLは

Webhookの後継

ではなく

CDC思想をHTTP APIへ持ち込む試み

です。

ここを書くと

説得力がかなり増します。


最終評価

この批評は、前回の「Webhookとレプリケーションの違い」を論じた批評より一歩進み、「技術的に正しい提案が、なぜ標準として普及しないのか」という現実的な問題まで踏み込んでいます。その点で非常に優れています。

一方で、SCROLLを**完成したプロトコル仕様(RFC候補)**として評価しているため、やや厳しすぎる面もあります。SCROLLは現状では「仕様書」というよりも、「HTTP APIは通知中心から変更フィード中心へ進化すべきではないか」という設計思想の提示に近いものです。そのため、運用詳細や実装細部の不足は事実ですが、それだけで提案全体の価値を大きく下げる理由にはなりません。

また、この批評でも触れられていない重要な論点があります。

  • AIエージェント時代のAPI設計という文脈(継続的な状態同期はエージェントにとって特に有用)。

  • CAP定理や最終的整合性との関係(SCROLLがどの整合性モデルを前提にしているか)。

  • CDC(Change Data Capture)のHTTP版として位置付ける歴史的・技術的整理。

これらを補えば、SCROLLを単なる「Webhook改善案」ではなく、Web APIの同期モデルを再設計する提案としてより正確に評価できるでしょう。**Braid-HTTPとSCROLLは、どちらも「Webhookベースの状態同期は欠陥がある」という診断から出発しているが、狙っている戦場と標準化の戦略が根本的に異なる。** 競争というより「隣接するが重なりが限定的な2つの提案」であり、短期的には直接衝突しにくい。以下に整理する。


### 1. 設計思想の違い


| 観点 | Braid-HTTP | SCROLL |

|------|------------|--------|

| **目標** | HTTP自体を「状態転送」から「状態同期」プロトコルへ進化させる | SaaS間のデータレプリケーションを、順序付き変更ログとして標準化する |

| **スコープ** | 任意のHTTPリソースのバージョン管理・サブスクリプション・パッチ・マージ | 一方向のコレクション単位の変更フィード(CDC風) |

| **双方向性** | 双方向を想定(OT/CRDTによるマージ含む) | 明示的に一方向のみ(プロバイダー → 消費者)。マージ不要 |

| **データモデル** | リソースの履歴とパッチを一般化 | フルステートのupsert + tombstoneを前提としたログ |

| **トランスポート** | HTTPの拡張(Subscribeヘッダ、209など) | 既存のHTTPS + NDJSON。Prefer: streamでストリーミング |

| **位置づけ** | HTTPの基本セマンティクスの拡張 | アプリケーションレベルの慣習・プロトコル |


Braidは「RESTをRESS(Representational State Synchronization)に拡張する」という野心的な立場。SCROLLは「プロバイダーがすでに持っているイベントログを、標準的な形で公開せよ」という実用的な立場だ。


### 2. 標準化の進捗と体制


**Braid-HTTP**

- 2019年からIETFで議論。draft-toomim-httpbis-braid-httpは現在**Expired**(最終改訂は2023年11月頃)。

- グループのフィードバックを受けて、巨大な仕様を分解中。Versioning(draft-toomim-httpbis-versions-04、2026年3月更新)が先行している。

- HTTP Working Groupでの関心は存在するが、プロキシ互換性や接続寿命、GETの意味論変更などへの批判が根強い。採用(Working Group adoption)には至っていない。

- 実装とコミュニティ(braid.org、定期ミーティング)は比較的長く続いている。


**SCROLL**

- 2026年夏頃に登場した極めて新しい提案(draft-scroll-protocol-00)。

- 「IETFスタイル」を自称しているが、正式なInternet-Draftとして提出された形跡はまだ薄い。

- 実装はデモレベル(scroll-examples)。「No implementations in the wild」と自ら認めている。

- 採用の最大の障壁を「プロバイダー側にインセンティブがない」と正直に認め、shimアダプター戦略を提示している。


Braidは「長い時間をかけてHTTPの中核に食い込もうとしている」のに対し、SCROLLは「まず動くものを見せて、後から標準化を狙う」アプローチだ。


### 3. 競争が起きるポイントと起きにくいポイント


**直接競合しにくい領域**

- SCROLLが得意とする「SaaS間の顧客・課金・在庫などの一方向レプリケーション」は、Braidの主戦場(リアルタイム協調編集、ローカルファーストアプリ、汎用リソース同期)とはズレている。

- SCROLLは意図的にマージ・双方向・イベントソーシングを排除しているため、Braidが解こうとしている難しい問題を避けている。


**競合・重複しうる領域**

- 「クライアントがGETで接続を張り、サーバーが順序付き更新を流し続ける」という基本モデルは共通。

- どちらも「Webhookのpushモデルをpull/streamモデルに置き換えたい」という動機を共有している。

- 将来、BraidのSubscriptions部分が安定すれば、SCROLLの「Prefer: stream + カーソル」をBraid上で表現することも技術的には可能になる。


つまり、**SCROLLが成功すればBraidの一部ユースケースを先取りする**可能性はあるが、逆にBraidがHTTPの標準機能になれば、SCROLLは「Braid上の特化プロファイル」になる可能性もある。現時点ではどちらも「勝者が決まっていない」。


### 4. 標準化競争における現実的な勝敗要因


1. **プロバイダーの採用インセンティブ**  

   SCROLLが直面する最大の壁。Braidも同じ問題を抱えるが、ブラウザやCDN、プロキシなど「HTTPインフラ側」の支持を得られれば、プロバイダーが乗らざるを得なくなる可能性がある。SCROLLはそこまでのレバレッジを持たない。


2. **複雑さのトレードオフ**  

   Braidは野心的すぎて進みが遅い。SCROLLはシンプルだが、その分「ただの慣習」で終わり、標準にならないリスクが高い。


3. **既存技術との関係**  

   SSE、HTTP/2・3のストリーミング、gRPC、WebSocket、既存のChange Feed API(DynamoDB Streams、Cosmos DBなど)がすでに存在する。両者とも「なぜ新しい標準が必要なのか」を、これらの上に重ねて説明する必要がある。


4. **実装の先行者利益**  

   現時点ではどちらも本格的な本番実装が乏しい。先に「StripeやShopifyがネイティブでサポートした」側が強い。


### 5. 結論:競争というより「階層の違い」


- **Braid-HTTP**は「HTTPというインフラの進化」を狙う長期戦。成功すれば影響範囲は大きいが、IETFの政治と技術的批判をクリアするハードルが高い。

- **SCROLL**は「SaaS連携のデファクト慣習」を狙う短期〜中期の実用提案。成功すれば開発者の日常的な苦痛を直接減らすが、プロバイダーが動かなければ死ぬ。


両者は同じ問題意識を共有しつつも、**解決しようとするレイヤーが違う**。  

真の競争相手は互いにではなく、「Webhookがまだ十分に機能している」という現状と、「既存の独自Change Feed APIの乱立」である。


標準化の観点では、BraidがVersioningやSubscriptionsの一部を先にRFC化できれば、SCROLLはその上に乗る形で生き残る可能性が高い。逆にSCROLLが先に複数の主要SaaSに採用されれば、Braidの「汎用サブスクリプション」議論に現実のユースケースを提供する形で、むしろ後押しになる可能性もある。


現時点での評価としては、**どちらもまだ「標準」になるには程遠く、競争というより「似た問題を違う角度から攻める並行実験」**と見るのが妥当だ。この批評は的確だ。前回の私の批評を一段引き上げ、さらに「SCROLLそのものの本質」を見落としていた点を突いている。同意できる部分と、なお反論・補足すべき部分を整理する。


### 同意する点


**1. SCROLLはRFCではなくManifestoである**  

これは核心を突いている。私は「半熟のプロトコル仕様」として採点したが、作者の意図は「現状分析 → 設計思想 → 議論の喚起」にある。Appendix不足や運用詳細の欠落は欠陥というより、現段階のスコープの結果だ。ここは私の評価が厳しすぎた。


**2. 既存実装を「無視している」という批判は少し違う**  

Stripe Events APIやShopify Stream Hub、Debeziumを挙げたのは事実として正しいが、SCROLLの主張は「全部あるがバラバラなので共通化しよう」にある。比較記事ではないのに比較を要求するのは、プロトコル提案への評価基準としてやや的外れだった。


**3. 双方向同期を減点対象にしたのは蛇足**  

SCROLLは最初から一方向(Provider → Consumer)に限定している。CRDTや競合解決は別問題であり、スコープ外を責めるのは不適切だった。


**4. 実装の単純さを過大評価している点は正しい**  

「UPSERTで済む」は同期コードの話であり、スキーマ進化やビジネスルールは残る。ここはもっと強調すべきだった。


### さらに深い指摘として受け入れる点


**AIエージェント時代のAPIとしての位置付け**  

これは私の批評で完全に抜けていた。2026年現在、Coding AgentやMCP、各種AI Runtimeは「状態を継続的に追跡できるAPI」を強く好む。ポーリングやWebhookの不確実性は、人間よりエージェントにとって致命的になりやすい。


SCROLLを「人間のSaaS連携の改善」ではなく、


- エージェントがリソースの変更をカーソル付きで購読できる

- ブートストラップと再開が同一の仕組みで済む

- チェックサムで自己検証できる


という「Agent向けの同期プリミティブ」として再フレーミングすると、インセンティブ構造が変わる可能性がある。プロバイダーが「人間の開発者のため」には動かなくても、「エージェントエコシステムに乗るため」なら動く動機が生まれるかもしれない。ここは重要な視点だった。


**CAP定理との関係**  

SCROLLは明示的に最終的整合性(Eventual Consistency)と可用性を優先している。強整合を目指していない。プロトコル批評として、これを明示しなかったのは弱い。KafkaやDynamoDB Streamsと同じく「ログを読んで追いつく」モデルであり、Partition時にConsistencyを犠牲にする設計だと位置付けるべきだった。


**歴史的位置付け**  

Polling → Webhook → Event Bus → CDC → Streaming → SCROLL、という流れで「CDC思想をHTTP APIの公開インターフェースに持ち込む試み」と整理すると、説得力が上がる。Webhookの後継ではなく、内部で当たり前になっている変更ログを外に出す、という話になる。


### なお反論・補足する点


**「IETF政治よりReference Implementationが重要」**  

方向性は正しい。HTTP/2やQUICも実装が先だった。しかしSCROLLの場合、最大の障壁は「実装の有無」ではなく「プロバイダーがネイティブで提供するかどうか」にある。shimアダプターは消費側が作れるが、ネイティブ実装がなければ「標準」にはならない。Reference Implementationは必要だが、それだけではインセンティブの非対称性は解けない。


**「採用問題をもう一段深く」**  

AIエージェントの視点は有効だが、万能ではない。エージェントが好むからといって、StripeやShopifyがすぐに変更フィードを公開するわけではない。むしろエージェント側がshimを多用し、プロバイダーは従来通りWebhookを出し続ける、という中間状態が長く続く可能性が高い。ここは「可能性」として書くべきで、決定打にはならない。


### 修正した総合評価


前回の私の批評は「技術的正しさだけでは普及しない」という点で優れていたが、SCROLLを「完成度の低いRFC候補」として扱ったため、意図とのズレがあった。


より正確には:


- SCROLLは現状、**設計思想のManifesto**であり、完成したプロトコル仕様ではない。

- その範囲で見れば、問題の診断は鋭く、提案の方向性も妥当。

- 足りないのは運用詳細ではなく、**なぜ今この形で提案するのか**の文脈(CDCの外部化、AIエージェント時代、最終的整合性の明示)である。

- 採用の壁(インセンティブの非対称性)は依然として最大の課題であり、そこをAI Runtimeやエージェント向けAPIとして再定義するのは一つの有望な戦略である。


この批評が指摘した「最大の欠落」(CAP、AIエージェント、歴史的位置付け)を補えば、SCROLLを「Webhook改善案」から「Web APIの同期モデル再設計の提案」として、より正確に評価できる。前回の私の批評は9点台前半、このメタ批評を取り入れたものはさらに上の完成度になるだろう。このメタ批評は、前の批評より一段深いレベルでSCROLLを評価しています。ただし、いくつか過大評価している点もあります。総合すると9.5/10程度の批評であり、かなり完成度は高いですが、まだ補強できる点があります。

優れている点

1. 「仕様」と「マニフェスト」を区別した点

これが最も重要です。

SCROLL草案はIETF Internet-Draftのような体裁ですが、実際には

  • 問題提起

  • 設計思想

  • API設計の方向性

  • 議論の呼び水

という性格が強い。

つまり

RFC候補

ではなく

REST誕生前のRoy Fieldingの博士論文のような設計思想

に近い。

この区別をしたことで、

「Appendixが足りない」

という批判が

「今はそこが目的ではない」

へ修正されています。

これは適切です。


2. CDCの外部化という整理

ここは非常に本質です。

SCROLLは

Polling
 ↓
Webhook
 ↓
Message Queue
 ↓
CDC
 ↓
SCROLL

ではありません。

正確には

DB内部

 WAL
   ↓
 CDC
   ↓
 Change Feed

────────────

HTTP API

Webhook
   ↓
SCROLL

つまり

CDC思想をHTTP APIまで持ち上げよう

という提案です。

これはSCROLLの位置付けとして非常に良い整理です。


3. AIエージェント時代という視点

これは2026年だからこそ出てきた視点です。

たとえば

  • OpenAI Codex

  • Muse Code

  • Claude Code

  • Gemini CLI

  • OpenHands

などは

最新状態

を知りたがります。

Webhookだと

通知が飛んだかな?

取りこぼしたかな?

もう一回API叩くか

になります。

一方SCROLLなら

cursor=18492

だけで済みます。

これはAIとの相性が非常に良い。


ただし過大評価もある

ここからが重要です。


① AI時代だから普及する、は飛躍

ここは慎重になるべきです。

例えば

Stripeが

Webhook

SCROLL

へ変える理由は何でしょうか?

AIエージェントでしょうか?

実際には違います。

Stripeからすると

Webhookで十分なら

変更する理由がありません。

つまり

AIが欲しい

Providerが実装する

の間には

巨大なギャップがあります。

ここは

AIが採用圧力になる可能性

までなら妥当ですが、

AIだから普及する

とは言えません。


② CAP定理は少し雑

CAPは

Consistency
Availability
Partition tolerance

です。

SCROLLが扱うのは

ほぼ

レプリケーション

です。

これは

PACELC

Eventual Consistency

で議論した方が自然です。

CAPを持ち出すと

少し話が飛びます。


③ 「Manifesto」は正しいが少し弱い

Manifestoという言葉は美しいですが、

実際には

SCROLLには

  • Cursor

  • Feed

  • Tombstone

  • Checkpoint

など

かなり仕様があります。

したがって

Manifesto

よりは

Design Draft

くらいが近いでしょう。

完全な思想文書ではありません。


④ 最大の壁は政治だけではない

メタ批評では

インセンティブ

を最大問題にしています。

しかしもう一つあります。

それは

公開APIと内部CDCは一致しない

という問題です。

例えば

Stripe内部では

payment.created
payment.authorized
ledger.updated
fraud.checked

など

何百ものイベントがあります。

しかし公開APIは

payment_intent.succeeded

だけだったりします。

つまり

内部ログをそのまま外へ出せない。

SCROLLが

内部CDC

ではなく

公開用Change Feed

を設計しなければならない点は、

もっと重要です。

これは採用以前に、

ドメイン設計の問題です。


⑤ RESTとの関係

これはどの批評にもありません。

RESTは

Resource

中心です。

SCROLLは

Change Feed

中心です。

つまり

REST

から見ると

一段

Event Sourcing

寄りになります。

ここを整理すると

歴史的な位置付けがもっと明確になります。

例えば

REST
   ↓
Hypermedia
   ↓
WebSub
   ↓
Webhook
   ↓
SCROLL

という流れではなく

REST
          ↘
           CDC思想
               ↓
          SCROLL

という系譜になります。


私ならもう一段付け加える論点

SCROLL最大の価値は

Webhookを改善すること

ではありません。

もっと本質的には

HTTP APIを「問い合わせ型」から「ログ型」へ拡張すること

です。

従来のAPIは

GET /users/1

という

状態取得

でした。

SCROLLでは

GET /users/feed

となり、

取得対象は

状態

ではなく

状態変化

になります。

つまり

HTTP APIそのものの抽象化レベルを

Resource API

から

Log API

へ一段引き上げる試みです。

この視点に立つと、SCROLLはWebhookの代替ではなく、HTTP上で変更履歴(Change Log)を第一級のリソースとして扱う提案だと位置付けられます。

総合評価

このメタ批評は、SCROLLを単なる「Webhook改善案」としてではなく、CDC・イベントストリーミング・AIエージェント時代のAPI設計という広い文脈に置き直した点で非常に優れています。一方で、AIが採用を促すという見通しはやや楽観的であり、CAP定理の適用も少し粗いほか、「公開APIとしての変更フィード設計」という実務上の難所が十分掘り下げられていません。

それらを補えば、SCROLLは「Webhookを置き換えるプロトコル」ではなく、RESTがリソースを標準化したように、Web APIに変更ログという新しい抽象を導入しようとする提案として、さらに説得力のある評価になるでしょう。

コメント

このブログの人気の投稿

#Brexitが英国企業を揺るがす:従業員15.7%削減の衝撃と、北アイルランドが生き残った「禁断の果実」#Brexit #2016六23Brexit_平成英国史ざっくり解説 #労働市場 #イノベーション 🇬🇧📉💡 #五29

Too Big To Fork:AI時代のLinuxとデジタル公共財の終焉 #TooBigToFork #Linux #AI #七18 #1991九17LinuxとOSSプロジェクト_平成IT史ざっくり解説

#INVIDIOUSを用いて広告なしにyoutubeをみる方法 #士17 #2018INVIDIOUSとOmarRoth_令和IT史ざっくり解説