このページは、@gurezo/web-serial-rxjs のサイズと tree-shaking をどう測るか、および library-only のスナップショット結果をまとめます。採用判断のための文書です。数値は再現可能なスナップショットであり、CI のサイズ上限や、あらゆるアプリ bundler が同じバイト数になることの保証ではありません。
Parent: #555 · Issue: #563 · Related: Bundler / framework 互換性 · バージョンサポート
| 用語 | 意味 |
|---|---|
| Library-only | rxjs を external にした本パッケージ本体のサイズ。RxJS peer dependency は一次指標に含めない |
| npm pack tarball / unpacked | 公開パッケージ全体のフットプリント(runtime、型、README、LICENSE、icon など) |
| 公開成果物 | 配布される dist/index.mjs(minify されていない ESM。ビルド時点で rxjs は external) |
| Consumer fixture | named export を import する小さなエントリを esbuild で束ねた測定用アプリ |
| Tree-shaking | 未使用の named export が consumer bundle から除外されること |
| 指標 | 目的 |
|---|---|
| npm pack tarball + unpacked | 公開パッケージの取得・展開コスト |
dist/index.mjs の raw / minified / gzip / brotli |
アプリコードを含まない runtime 成果物 |
最小 import(isWebSerialSupported のみ) |
API の大部分を使わない場合の下限 |
Session import(createSerialSession + isWebSerialSupported) |
セッション利用時の代表的な面 |
| Tree-shake プローブ | 未使用 export(例: createTerminalBuffer)が最小 minified bundle に含まれないこと |
rxjs は別途インストール。詳細は Bundler / framework 互換性正規のスクリプト: tools/bundle-size/(README)。
リポジトリルートで:
pnpm --filter @gurezo/web-serial-rxjs build
node tools/bundle-size/measure.mjs
スクリプトが固定する条件:
| 条件 | 値 |
|---|---|
| Bundler | ワークスペースの esbuild(レポートに版を出力) |
| Consumer 解決 | tools/bundle-size/.out/node_modules/@gurezo/web-serial-rxjs → パッケージルートの symlink(exports と sideEffects が適用される) |
| Peer の扱い | rxjs は常に external |
| Minify | minified と書いた行は esbuild minify: true |
| gzip | Node zlib level 9 |
| brotli | Node brotli quality 11 |
| 出力 | stdout の要約 + tools/bundle-size/.out/report.json |
ビルド後に node tools/bundle-size/measure.mjs を実行して記録したものです。
| 項目 | 値 |
|---|---|
| Package | @gurezo/web-serial-rxjs@4.0.3 |
| 測定時刻 (UTC) | 2026-08-08T06:06:08.377Z |
| Node | v24.16.0 |
| esbuild | 0.28.1 |
package.json の sideEffects |
false |
| 指標 | Bytes |
|---|---|
| Tarball | 212,301 |
| Unpacked | 442,307 |
| Files | 65 |
型・README・LICENSE・icon・dist/ を含みます。runtime のみのサイズの代替ではありません。
dist/index.mjs、library-only)| 形態 | raw | gzip | brotli |
|---|---|---|---|
| 公開どおり(unminified) | 45,138 | 10,200 | 8,862 |
| Minified(esbuild、測定用) | 16,497 | 5,527 | 5,005 |
npm 成果物自体は minify されていません。minified 行は転送サイズ比較用です。
rxjs external)| Fixture | 形態 | raw | gzip | brotli |
|---|---|---|---|---|
isWebSerialSupported のみ |
raw | 13,416 | 3,836 | 3,180 |
isWebSerialSupported のみ |
minified | 3,501 | 1,244 | 1,090 |
createSerialSession + isWebSerialSupported |
raw | 43,688 | 9,876 | 8,579 |
createSerialSession + isWebSerialSupported |
minified | 16,206 | 5,448 | 4,942 |
sideEffects"sideEffects": false を設定し、フィールドを尊重する bundler が import 時 side effect なしとして扱えるようにしています。createTerminalBuffer、DEFAULT_TERMINAL_BUFFER_OPTIONS、SerialErrorCode などの未使用 export 名が含まれないことを確認します。API やビルドが変わったらスクリプトを再実行し、ベースライン更新時に本ページを更新してください。
tools/bundle-size/package.json(exports、sideEffects、peerDependencies)