書き出しHTMLをCDN非依存の完全自己完結型にする - #7
Draft
yoggydev wants to merge 1 commit into
Draft
Conversation
書き出しHTMLは tailwind.config とCSS変数を注入していたが、実CSSの生成は cdn.tailwindcss.com(Play CDN)に依存したままだった。「1枚のHTMLで完結」と 謳って売る商品が、開くたびに外部CDNを取りに行く状態で、オフライン・社内 ネットワーク・CDN障害で色が消える。Tailwind自身がPlay CDNを本番非推奨と している点も、販売物としては見過ごせない。 - 静的HTML880件: 生成後に各HTMLを content としてTailwindをコンパイルし、 実CSSを <style> で埋め込む。CDN script とトークン注入は削除。 postcss+tailwindcss を JS API で同一プロセス内から880回まわす(87秒 / 1件あたり99ms)。PostCSSのraws潰しで圧縮(14.4KB→8.5KB、新規依存なし) - スタジオのバニラ書き出し: ブラウザではコンパイルできないため、生成済みの /html/<id>.html を取得して返す方式に変更。スタジオでコピーしたHTMLとZIPの 中身が同一の成果物になり、経路による食い違いが原理的に消える。取得失敗時の エラー表示と再試行を用意 - 検査を「注入文字列の有無」から「色が本当に出るか」の実測に変更。 offline:true + http(s)全abort の遮断下で実ブラウザを開き、computed style で bg-card が透明でない・text-muted-foreground が真っ黒でないことを確認する 実測: - 880件すべてで外部参照ゼロ(script/link/img/url()/@import。Google Fontsも無し) - 遮断下6件で bg-card=rgb(255,255,255) / text-muted-foreground=rgb(113,113,122)、 外部要求0件 - HTML 1件あたり 10,266B→15,300B(+49%)、配布ZIP 9.6MB→14.4MB - 動的版(esm.sh+BabelでReactを動かす別機能)は本質的にCDNが要るため対象外。 そちらのトークン注入は維持 テスト2666件グリーン Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXb6DP2sELzRyZkqpe15p4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
前PRで書き出しHTMLに
tailwind.configとCSS変数を注入して色は出るようにしましたが、実CSSの生成はcdn.tailwindcss.com(Play CDN)に依存したままでした。「1枚のHTMLで完結」と謳って売る商品が、開くたびに外部CDNを取りに行く状態です。オフライン・社内ネットワーク・CDN障害で色が消えます。Tailwind自身がPlay CDNを本番非推奨としている点も、販売物としては見過ごせません。
CDN参照そのものを削除し、コンパイル済みの実CSSを埋め込む方式に切り替えました。
変更
contentとしてTailwindをコンパイルし、実CSSを<style>で埋め込む。CDN script とトークン注入は削除/html/<id>.htmlを取得して返す方式に。スタジオでコピーしたHTMLとZIPの中身が同一の成果物になり、経路による食い違いが原理的に消えるコンパイルは
postcss + tailwindcssを JS API で同一プロセス内から880回まわしています(毎回プロセス起動しない)。圧縮はPostCSSのraws潰しで実施(14.4KB→8.5KB、新規依存なし)。検査を実測に変えた(今回の肝)
前回の欠陥は「検査していない経路があった」ことが原因でした。そこで検査自体を変えています。
offline: trueのコンテキストで http/https を全て abort した遮断下で実ブラウザを開き、getComputedStyleで確認します。この検査は実際に1件を落としました。
aww-hero-horizontal-scroll-galleryが最初NGになり、調べると仕様どおりの挙動(その部品はbg-cardを使っていないので、1件ぶんコンパイルしたCSSにその定義が入らないのが正しい)でした。検査側を「そのページが実際にそのクラスを使っている時だけ判定する」よう修正しています。動く検査であることの裏付けになりました。実測
外部参照の全件スキャン(880件)
<script src=/<link href=/'<img src=' / 'url(http…)' / '@import' → **すべて0件**(Google Fonts含めゼロ。フォントはシステムスタック)·- 残る 'http://' 文字列はSVGの名前空間(2,926件)と本文テキスト(2件)のみで、リソース取得ではないサイズ・時間
public/html/合計npm run html全体事前見積もり(14MB / 2〜3分)とほぼ一致しました。
スタジオの書き出しを実操作で確認
public/html/marketing-pricing-table.htmlと1バイトも違わない(24,222 / 24,222文字)/html/*.htmlを404に差し替えるとエラー表示が出て、解除して「再試行」で復帰逸脱点
studio/htmlをZIPに含めるよう変更(従来は除外)。スタジオの書き出しが/html/<id>.htmlを取りに行くようになったため、除外すると買った人のスタジオでバニラタブが壊れる。ZIP +3.4MBgenerateDynamicVanillaHtml)は対象外。esm.sh + Babel で実際に動くReactを埋め込む別機能で、CDN依存は本質的。そちらのトークン注入は維持.darkブロックは出力CSSに入らない(書き出しHTMLは常にライト。class="dark"を含む部品では自動的に復活する)検証
build-release.mjs→verify-release.mjs --samples 6すべてOK🤖 Generated with Claude Code
https://claude.ai/code/session_01YXb6DP2sELzRyZkqpe15p4
Generated by Claude Code