Skip to content

CDN依存(Mermaid / marked / DOMPurify)のアセット同梱を検討する #1159

Description

@irof

背景

#1142 の「あわせて検討」に挙がっていた項目を切り出したもの。#1142 本体(securityLevel の loose 解消)とは独立して判断できる。

生成HTMLは jig-core/src/main/resources/templates/partials/cdn-scripts.html で、3つのライブラリを jsDelivr からバージョン固定で読み込んでいる。

ライブラリ バージョン サイズ(min)
DOMPurify 3.4.12 28 KB
marked 15.0.7 38 KB
Mermaid 11.12.0 2,684 KB

動機

  • オフライン環境で図とMarkdownが描画されない。JIGドキュメントは file:// で直接開くことを主要なユースケースとしている(docs/adr/browser_storage_policy.md)が、その経路でもネットワーク接続が必要になっている。
  • 供給網リスク。CDN側の停止や配信内容の差し替えが、生成物の閲覧に直接影響する。
  • 通常のCIをネットワークに依存させずにブラウザ検証を行いたい、というテスト側の要求もある(docs/test-architecture.md のWeb資産の節)。

検討事項

  • 配布サイズ。3つ合計で約 2.75 MB。現在の jig-cli.jar は約 17 MB なので 16% 程度の増加になる。増加分のほぼ全てが Mermaid。
  • Mermaidだけ CDN のままにする折衷案もありうる。DOMPurify と marked(合計 66 KB)はサニタイズとMarkdown描画という基本機能で、欠けるとページの内容自体が出ない。Mermaid は図が出ないだけで一覧やリンクは機能する。
  • ライセンス表記。同梱するライブラリのライセンスを配布物へ含める必要がある。
  • 更新手順。現在は cdn-scripts.html のバージョンと package.json の devDependencies を揃える運用(DOMPurifyのずれは 514efac で解消済み)。同梱する場合は取得と配置をビルドタスクに載せるか、リポジトリへコミットするかを決める必要がある。jig-core/build.gradlebundleJs タスクが既に assets/*.js を結合しているので、その周辺との整合も要る。
  • ADRの更新docs/adr/browser_support_policy.md に「CDNから読み込む外部ライブラリはバージョンを固定し、実CDNとの結線確認はリリース候補の検証に分離する」と記述している。同梱する決定をした場合はこの節を書き換える。

決めること

  1. 同梱するか、CDNのままにするか
  2. 同梱する場合の対象(3つ全部 / Mermaid以外)
  3. 同梱方法(ビルド時取得 / リポジトリへコミット)

🤖 この issue は Claude Code による #1142 対応の際に、本体と分離できる検討事項として切り出したものです。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions