Skip to content

コアロジック徹底比較 ― StarterWebScrapingKit vs Puppeteer / Playwright

Puppeteer と Playwright は、Google と Microsoft がそれぞれ何年もかけて磨き上げてきたブラウザ自動化の標準ツールです。一方このキットは、Excel VBA という「ブラウザ自動化には普通誰も選ばない言語」だけで CDP を喋ります。

では、その心臓部(コアロジック)はどれくらい違うのか

このコーナーは、その疑問に「印象」ではなく実際のソースコードの突き合わせで答えるための検証レポートです。

何を比較したのか

「コア」の範囲を、CDP メッセージがブラウザから届いてユーザーコードに渡るまでの一連の経路と定義しました。

この5つの層それぞれについて、3者の実装を並べています。加えて「クラス構成をどの軸で切ったか」と「コア以外にまだ残っている差」も扱います。

検証の前提

検証方法

Puppeteer / Playwright については、npm パッケージのドキュメントではなく GitHub の実ソースツリーpackages/puppeteer-core/srcpackages/playwright-core/src)を直接読み、該当箇所のファイル名と行番号を添えています。StarterWebScrapingKit 側も同様に VBAProject/Class/*.cls の実コードを参照しています。

いずれも 2026年8月時点のソースに基づきます。3者とも活発に更新されるため、行番号は将来ずれる可能性があります。

比較対象は次の3つに絞りました。VBA 製の他ライブラリとの比較はここでは扱いません。

言語 / ランタイム位置づけ
StarterWebScrapingKitExcel VBA(外部 exe なし)個人・少人数によるスターターキット
PuppeteerTypeScript / Node.jsGoogle 発の CDP 自動化ライブラリ
PlaywrightTypeScript / Node.jsMicrosoft 発のマルチエンジン自動化フレームワーク

結論サマリ

先に結論から言うと、「CDP を正しく捌く」というアルゴリズムの部分は肩を並べており、差が出るのはその外側でした。

観点評価詳細
Pipe の NUL 区切りバッファ管理✅ 同等Transport 層とバッファ管理
WebSocket のフレーム解析⚠️ 土俵が違うNode 側は ws ライブラリに丸投げ、こちらは自前実装
method / id / sessionId の振り分け✅ 同等ディスパッチとイベント配信
イベントの pub / sub 設計✅ 概念的に同等EventEmitterRaiseEvent / WithEvents
非同期実行❌ 言語仕様の壁非同期実行とイベントループ
Browser / Page / Element の三層モデル✅ 完全に一致クラス構成の考え方
クラス分割の粒度・抽象層❌ VBA の制約により粗い同上
テストによる品質保証⚠️ 網羅性と自動化に差残る差分と、埋まらない差
エラー分類・自動リカバリ❌ 体系化されていない同上
マルチブラウザエンジン対応❌ Chromium 限定同上

このコーナーの要旨

コアのアルゴリズムは、3者とも独立に同じ答えへたどり着いています。CDP というプロトコルを正しく捌く方法は結局1つしかないからです。

残っている差は「設計センス」ではなく、言語が用意してくれる下駄(Promise、wsJSON.parse)を履けるかどうかと、何人年分のエンジニアリング投資が注がれたかという、別の軸の話でした。

各ページの内容

ページ扱う内容
Transport 層とバッファ管理Pipe / WebSocket の選択、NUL 区切りフレーミング、O(n²) 回避策の比較
ディスパッチとイベント配信method / id / sessionId の3分岐、セッション多重化、pub / sub
非同期実行とイベントループPromise と ExecuteCDPAsync、イベントループ不在という根源的制約
クラス構成の考え方Browser → Page → Element という共通モデルと、分割粒度・抽象層の差
残る差分と、埋まらない差テスト量、エラー階層、型安全性、エコシステムの厚み

関連

Excel VBA × CDP / WebDriver BiDi