{"version":"https://jsonfeed.org/version/1.1","title":"Riebeckite","home_page_url":"https://riebeckite.dev/","feed_url":"https://riebeckite.dev/feed.json","description":"An open-source framework for building extensible websites from Markdown and Obsidian notes.","language":"ja","items":[{"id":"https://riebeckite.dev/en/","url":"https://riebeckite.dev/en/","title":"Riebeckite","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"riebeckite\">Riebeckite</h1>\n<p>Riebeckite publishes Markdown and Obsidian-style notes as a static site. Write in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content/</span></span></code></span>, add plugins for search, diagrams, and localization, choose a theme, and build a static site you can deploy anywhere.</p>\n<p>New here? Start with <strong><a href=\"/en/docs/getting-started/\">Getting Started</a></strong>. For every section in one place, see the <a href=\"/en/docs/\">Documentation index</a>.</p>\n<p>Getting a first site running goes: <strong>Quick Start → Installation → First Content → Presets → Deployment</strong>.</p>\n<h2 id=\"what-do-you-want-to-do\">What do you want to do?</h2>\n<table>\n  <thead>\n    <tr>\n      <th>I want to…</th>\n      <th>Go to</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Use Riebeckite for the first time</td>\n      <td><a href=\"/docs/getting-started/quick-start\">Quick Start</a></td>\n    </tr>\n    <tr>\n      <td>Create a site and deploy it today</td>\n      <td><a href=\"/docs/getting-started/quick-start\">Quick Start</a> → <a href=\"/docs/getting-started/deployment\">Deployment</a></td>\n    </tr>\n    <tr>\n      <td>Choose which <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>create-riebeckite</span></span></code></span> preset to use</td>\n      <td><a href=\"/docs/getting-started/presets\">Presets</a></td>\n    </tr>\n    <tr>\n      <td>Write and organize articles</td>\n      <td><a href=\"/docs/guides/writing-content\">Guides / Writing content</a></td>\n    </tr>\n    <tr>\n      <td>Publish an Obsidian vault</td>\n      <td><a href=\"/docs/guides/obsidian\">Guides / Obsidian</a></td>\n    </tr>\n    <tr>\n      <td>Keep content and site in separate repositories</td>\n      <td><a href=\"/docs/guides/content-repositories\">Guides / Content repositories</a></td>\n    </tr>\n    <tr>\n      <td>Build a multilingual site</td>\n      <td><a href=\"/docs/guides/localization\">Guides / Localization</a></td>\n    </tr>\n    <tr>\n      <td>Deploy to Cloudflare Workers / GitHub Actions</td>\n      <td><a href=\"/docs/guides/deployment/\">Guides / Deployment</a></td>\n    </tr>\n    <tr>\n      <td>Upgrade Riebeckite or read migration notes</td>\n      <td><a href=\"/docs/guides/upgrading\">Guides / Upgrading</a></td>\n    </tr>\n    <tr>\n      <td>Find and install a Plugin</td>\n      <td><a href=\"/docs/plugins/\">Plugins</a></td>\n    </tr>\n    <tr>\n      <td>See Plugins in action</td>\n      <td><a href=\"/docs/plugins/showcase\">Plugin Showcase</a></td>\n    </tr>\n    <tr>\n      <td>Change the look of my site</td>\n      <td><a href=\"/docs/themes/\">Themes</a></td>\n    </tr>\n    <tr>\n      <td>Keep the site usable for more people</td>\n      <td><a href=\"/docs/accessibility\">Accessibility</a></td>\n    </tr>\n    <tr>\n      <td>Understand the trust model</td>\n      <td><a href=\"/docs/security\">Security model</a></td>\n    </tr>\n    <tr>\n      <td>Look up configuration, CLI, or an API</td>\n      <td><a href=\"/docs/reference/\">Reference</a></td>\n    </tr>\n    <tr>\n      <td>Understand how Riebeckite works inside</td>\n      <td><a href=\"/docs/framework/\">Framework</a></td>\n    </tr>\n    <tr>\n      <td>Contribute to Riebeckite itself</td>\n      <td><a href=\"/docs/framework/development\">Framework / Development</a></td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"where-to-go-next\">Where to go next</h2>\n<ul>\n  <li><strong>Getting Started</strong> — install, presets, first content, deployment. Nothing about the framework internals.</li>\n  <li><strong>Guides</strong> — task-oriented: writing content, Obsidian, content repositories, localization, deployment, analytics, upgrading.</li>\n  <li><strong>Plugins</strong> — the catalog, the showcase, and how to write your own.</li>\n  <li><strong>Themes</strong> — the catalog and how to write your own.</li>\n  <li><strong>Accessibility</strong> — what Riebeckite handles by default and what Themes, Plugins, and content authors must keep accessible.</li>\n  <li><strong>Security model</strong> — trusted content, Plugin-generated HTML, endpoints, and external-provider boundaries.</li>\n  <li><strong>Reference</strong> — configuration fields, the CLI, the Plugin API, and the Theme API.</li>\n  <li><strong>Framework</strong> — architecture, the content system, the plugin and theme systems, the build system, the HonoX integration, diagnostics, testing, and repository development.</li>\n</ul>\n<h2 id=\"the-shape-of-a-first-site\">The shape of a first site</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>my-site/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>├─ content/              Markdown pages and assets</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>├─ app/                  Site UI generated by the preset</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>├─ riebeckite.config.ts  Site title, URL, theme, and plugins</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>└─ package.json          Local commands</span></span></code></pre>\n  </div>\n</figure>\n<p>A site author mainly edits <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content/</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite.config.ts</span></span></code></span>. Internal architecture is documented in <a href=\"/docs/framework/\">Framework</a>.</p>\n<p>For coding agents and automation, use the concise, rule-oriented <a href=\"./agents/README.md\">Agent documentation</a>.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Riebeckite is an open-source framework for publishing Markdown and Obsidian notes as a website.","tags":[]},{"id":"https://riebeckite.dev/README","url":"https://riebeckite.dev/README","title":"README","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"riebeckite-ドキュメント\">Riebeckite ドキュメント</h1>\n<div class=\"wikilink-image-embed\"><a class=\"rr-lightbox-trigger\" href=\"/assets/riebeckite-logo-horizontal.png\" data-lightbox-src=\"/assets/riebeckite-logo-horizontal.png\" data-lightbox-alt=\"riebeckite-logo-horizontal.png\" aria-label=\"Expand image: riebeckite-logo-horizontal.png\"><img src=\"/assets/riebeckite-logo-horizontal.png\" alt=\"riebeckite-logo-horizontal.png\" class=\"rr-lightbox-image\" loading=\"lazy\" decoding=\"async\" sizes=\"100vw\" data-responsive-image=\"\"></a></div>\n<p>Riebeckite は、<strong>Markdown や Obsidian のノートから公開サイトを作るためのフレームワーク</strong>です。</p>\n<p>Markdown を <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content/</span></span></code></span> に置くだけのシンプルなサイトから、プラグイン、テーマ、多言語化、外部の Obsidian Vault を使うサイトまで構築できます。</p>\n<p>初めて使う場合は、Riebeckite のリポジトリをクローンする必要はありません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>create-riebeckite</span></span></code></span> から新しいサイトを作成します。</p>\n<h2 id=\"はじめる\">はじめる</h2>\n<p>基本的な流れは次のとおりです。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-wzrlnp\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 865.8125px;\" viewBox=\"0 0 865.8125 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-wzrlnp{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-wzrlnp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-wzrlnp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-wzrlnp .error-icon{fill:#552222;}#rr-mermaid-wzrlnp .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-wzrlnp .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-wzrlnp .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-wzrlnp .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-wzrlnp .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-wzrlnp .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-wzrlnp .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-wzrlnp .marker{fill:#333333;stroke:#333333;}#rr-mermaid-wzrlnp .marker.cross{stroke:#333333;}#rr-mermaid-wzrlnp svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-wzrlnp p{margin:0;}#rr-mermaid-wzrlnp .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-wzrlnp .cluster-label text{fill:#333;}#rr-mermaid-wzrlnp .cluster-label span{color:#333;}#rr-mermaid-wzrlnp .cluster-label span p{background-color:transparent;}#rr-mermaid-wzrlnp .label text,#rr-mermaid-wzrlnp span{fill:#333;color:#333;}#rr-mermaid-wzrlnp .node rect,#rr-mermaid-wzrlnp .node circle,#rr-mermaid-wzrlnp .node ellipse,#rr-mermaid-wzrlnp .node polygon,#rr-mermaid-wzrlnp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wzrlnp .rough-node .label text,#rr-mermaid-wzrlnp .node .label text,#rr-mermaid-wzrlnp .image-shape .label,#rr-mermaid-wzrlnp .icon-shape .label{text-anchor:middle;}#rr-mermaid-wzrlnp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-wzrlnp .rough-node .label,#rr-mermaid-wzrlnp .node .label,#rr-mermaid-wzrlnp .image-shape .label,#rr-mermaid-wzrlnp .icon-shape .label{text-align:center;}#rr-mermaid-wzrlnp .node.clickable{cursor:pointer;}#rr-mermaid-wzrlnp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-wzrlnp .arrowheadPath{fill:#333333;}#rr-mermaid-wzrlnp .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-wzrlnp .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-wzrlnp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wzrlnp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-wzrlnp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wzrlnp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-wzrlnp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-wzrlnp .cluster text{fill:#333;}#rr-mermaid-wzrlnp .cluster span{color:#333;}#rr-mermaid-wzrlnp .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-wzrlnp .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-wzrlnp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-wzrlnp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-wzrlnp rect.text{fill:none;stroke-width:0;}#rr-mermaid-wzrlnp .icon-shape,#rr-mermaid-wzrlnp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wzrlnp .icon-shape p,#rr-mermaid-wzrlnp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-wzrlnp .icon-shape .label rect,#rr-mermaid-wzrlnp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wzrlnp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-wzrlnp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-wzrlnp .node .neo-node{stroke:#9370DB;}#rr-mermaid-wzrlnp [data-look=\"neo\"].node rect,#rr-mermaid-wzrlnp [data-look=\"neo\"].cluster rect,#rr-mermaid-wzrlnp [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wzrlnp [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-wzrlnp [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wzrlnp [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wzrlnp [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-wzrlnp [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wzrlnp [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-wzrlnp [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wzrlnp [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wzrlnp :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-wzrlnp_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M140,35L144.167,35C148.333,35,156.667,35,164.333,35C172,35,179,35,182.5,35L186,35\" id=\"rr-mermaid-wzrlnp-L_Create_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Create_Content_0\" data-points=\"W3sieCI6MTQwLCJ5IjozNX0seyJ4IjoxNjUsInkiOjM1fSx7IngiOjE5MCwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wzrlnp_flowchart-v2-pointEnd)\"></path><path d=\"M359.813,35L363.979,35C368.146,35,376.479,35,384.146,35C391.813,35,398.813,35,402.313,35L405.813,35\" id=\"rr-mermaid-wzrlnp-L_Content_Dev_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Content_Dev_0\" data-points=\"W3sieCI6MzU5LjgxMjUsInkiOjM1fSx7IngiOjM4NC44MTI1LCJ5IjozNX0seyJ4Ijo0MDkuODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wzrlnp_flowchart-v2-pointEnd)\"></path><path d=\"M553.813,35L557.979,35C562.146,35,570.479,35,578.146,35C585.813,35,592.813,35,596.313,35L599.813,35\" id=\"rr-mermaid-wzrlnp-L_Dev_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Dev_Build_0\" data-points=\"W3sieCI6NTUzLjgxMjUsInkiOjM1fSx7IngiOjU3OC44MTI1LCJ5IjozNX0seyJ4Ijo2MDMuODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wzrlnp_flowchart-v2-pointEnd)\"></path><path d=\"M699.813,35L703.979,35C708.146,35,716.479,35,724.146,35C731.813,35,738.813,35,742.313,35L745.813,35\" id=\"rr-mermaid-wzrlnp-L_Build_Deploy_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Build_Deploy_0\" data-points=\"W3sieCI6Njk5LjgxMjUsInkiOjM1fSx7IngiOjcyNC44MTI1LCJ5IjozNX0seyJ4Ijo3NDkuODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wzrlnp_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Create_Content_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Content_Dev_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Dev_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Build_Deploy_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-wzrlnp-flowchart-Create-0\" data-look=\"classic\" transform=\"translate(74, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-27\" width=\"132\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>サイトを作る</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wzrlnp-flowchart-Content-1\" data-look=\"classic\" transform=\"translate(274.90625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.90625\" y=\"-27\" width=\"169.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.90625, -12)\"><rect></rect><foreignObject width=\"109.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Markdownを書く</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wzrlnp-flowchart-Dev-2\" data-look=\"classic\" transform=\"translate(481.8125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-72\" y=\"-27\" width=\"144\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42, -12)\"><rect></rect><foreignObject width=\"84\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ブラウザで確認</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wzrlnp-flowchart-Build-3\" data-look=\"classic\" transform=\"translate(651.8125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-48\" y=\"-27\" width=\"96\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-18, -12)\"><rect></rect><foreignObject width=\"36\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ビルド</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wzrlnp-flowchart-Deploy-4\" data-look=\"classic\" transform=\"translate(803.8125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-54\" y=\"-27\" width=\"108\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24, -12)\"><rect></rect><foreignObject width=\"48\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>デプロイ</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-wzrlnp-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-wzrlnp-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Create[\"サイトを作る\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Content[\"Markdownを書く\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Dev[\"ブラウザで確認\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Build[\"ビルド\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Deploy[\"デプロイ\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Create --> Content</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Content --> Dev</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Dev --> Build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Build --> Deploy</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>まず <a href=\"/docs/getting-started/quick-start\">クイックスタート</a> から始めてください。</p>\n<p>順番に進めたい場合は、</p>\n<ol>\n  <li><a href=\"/docs/getting-started/quick-start\">クイックスタート</a></li>\n  <li><a href=\"/docs/getting-started/installation\">インストール</a></li>\n  <li><a href=\"/docs/getting-started/first-content\">最初の記事</a></li>\n  <li><a href=\"/docs/getting-started/presets\">プリセット</a></li>\n  <li><a href=\"/docs/getting-started/deployment\">デプロイ</a></li>\n</ol>\n<p>の順で読めます。</p>\n<p>全章の一覧は <a href=\"/docs/\">ドキュメント索引</a> にあります。</p>\n<h2 id=\"基本的な使い方\">基本的な使い方</h2>\n<p>サイトを作成したら、基本的には次の流れで使います。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>create-riebeckite</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>content/ に Markdown を書く</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>riebeckite dev</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>ブラウザで確認</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>riebeckite build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>deploy</span></span></code></pre>\n  </div>\n</figure>\n<p>普段サイトを作るだけなら、Riebeckite 本体の内部構造を理解する必要はありません。</p>\n<h2 id=\"何をしたいですか\">何をしたいですか？</h2>\n<p>目的に近いページから読めます。</p>\n<table>\n  <thead>\n    <tr>\n      <th>目的</th>\n      <th>読むページ</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>初めて Riebeckite を使う</td>\n      <td><a href=\"/docs/getting-started/quick-start\">クイックスタート</a></td>\n    </tr>\n    <tr>\n      <td>インストール方法を確認する</td>\n      <td><a href=\"/docs/getting-started/installation\">インストール</a></td>\n    </tr>\n    <tr>\n      <td>最初の記事を書く</td>\n      <td><a href=\"/docs/getting-started/first-content\">最初の記事</a></td>\n    </tr>\n    <tr>\n      <td>サイトの構成を選ぶ</td>\n      <td><a href=\"/docs/getting-started/presets\">プリセット</a></td>\n    </tr>\n    <tr>\n      <td>デプロイする</td>\n      <td><a href=\"/docs/getting-started/deployment\">デプロイ</a></td>\n    </tr>\n    <tr>\n      <td>デプロイ先ごとの手順を確認する</td>\n      <td><a href=\"/docs/guides/deployment/\">デプロイガイド</a></td>\n    </tr>\n    <tr>\n      <td>Markdown と frontmatter の書き方を知る</td>\n      <td><a href=\"/docs/guides/writing-content\">コンテンツの書き方</a></td>\n    </tr>\n    <tr>\n      <td>Obsidian Vault を公開する</td>\n      <td><a href=\"/docs/guides/obsidian\">Obsidian</a></td>\n    </tr>\n    <tr>\n      <td>コンテンツとサイトを別リポジトリにする</td>\n      <td><a href=\"/docs/guides/content-repositories\">コンテンツリポジトリ</a></td>\n    </tr>\n    <tr>\n      <td>多言語サイトを作る</td>\n      <td><a href=\"/docs/guides/localization\">多言語化</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite を更新する</td>\n      <td><a href=\"/docs/guides/upgrading\">Upgrading</a></td>\n    </tr>\n    <tr>\n      <td>プラグインを探す</td>\n      <td><a href=\"/docs/plugins/\">プラグイン</a></td>\n    </tr>\n    <tr>\n      <td>テーマを選ぶ</td>\n      <td><a href=\"/docs/themes/\">テーマ</a></td>\n    </tr>\n    <tr>\n      <td>アクセシビリティの責任範囲を確認する</td>\n      <td><a href=\"/docs/accessibility\">アクセシビリティ</a></td>\n    </tr>\n    <tr>\n      <td>セキュリティと信頼モデルを確認する</td>\n      <td><a href=\"/docs/security\">セキュリティモデル</a></td>\n    </tr>\n    <tr>\n      <td>設定や CLI、Public API を調べる</td>\n      <td><a href=\"/docs/reference/\">リファレンス</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite の内部構造を理解する</td>\n      <td><a href=\"/docs/framework/\">フレームワーク</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite 本体を開発する</td>\n      <td><a href=\"/docs/framework/development\">フレームワーク開発</a></td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"ドキュメントの構成\">ドキュメントの構成</h2>\n<p>Riebeckite のドキュメントは、目的ごとに分かれています。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-v7qfsy\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1147.4609375px;\" viewBox=\"0 0 1147.4609375 326\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-v7qfsy{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-v7qfsy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-v7qfsy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-v7qfsy .error-icon{fill:#552222;}#rr-mermaid-v7qfsy .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-v7qfsy .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-v7qfsy .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-v7qfsy .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-v7qfsy .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-v7qfsy .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-v7qfsy .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-v7qfsy .marker{fill:#333333;stroke:#333333;}#rr-mermaid-v7qfsy .marker.cross{stroke:#333333;}#rr-mermaid-v7qfsy svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-v7qfsy p{margin:0;}#rr-mermaid-v7qfsy .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-v7qfsy .cluster-label text{fill:#333;}#rr-mermaid-v7qfsy .cluster-label span{color:#333;}#rr-mermaid-v7qfsy .cluster-label span p{background-color:transparent;}#rr-mermaid-v7qfsy .label text,#rr-mermaid-v7qfsy span{fill:#333;color:#333;}#rr-mermaid-v7qfsy .node rect,#rr-mermaid-v7qfsy .node circle,#rr-mermaid-v7qfsy .node ellipse,#rr-mermaid-v7qfsy .node polygon,#rr-mermaid-v7qfsy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-v7qfsy .rough-node .label text,#rr-mermaid-v7qfsy .node .label text,#rr-mermaid-v7qfsy .image-shape .label,#rr-mermaid-v7qfsy .icon-shape .label{text-anchor:middle;}#rr-mermaid-v7qfsy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-v7qfsy .rough-node .label,#rr-mermaid-v7qfsy .node .label,#rr-mermaid-v7qfsy .image-shape .label,#rr-mermaid-v7qfsy .icon-shape .label{text-align:center;}#rr-mermaid-v7qfsy .node.clickable{cursor:pointer;}#rr-mermaid-v7qfsy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-v7qfsy .arrowheadPath{fill:#333333;}#rr-mermaid-v7qfsy .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-v7qfsy .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-v7qfsy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-v7qfsy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-v7qfsy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-v7qfsy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-v7qfsy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-v7qfsy .cluster text{fill:#333;}#rr-mermaid-v7qfsy .cluster span{color:#333;}#rr-mermaid-v7qfsy .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-v7qfsy .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-v7qfsy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-v7qfsy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-v7qfsy rect.text{fill:none;stroke-width:0;}#rr-mermaid-v7qfsy .icon-shape,#rr-mermaid-v7qfsy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-v7qfsy .icon-shape p,#rr-mermaid-v7qfsy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-v7qfsy .icon-shape .label rect,#rr-mermaid-v7qfsy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-v7qfsy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-v7qfsy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-v7qfsy .node .neo-node{stroke:#9370DB;}#rr-mermaid-v7qfsy [data-look=\"neo\"].node rect,#rr-mermaid-v7qfsy [data-look=\"neo\"].cluster rect,#rr-mermaid-v7qfsy [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-v7qfsy [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-v7qfsy [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-v7qfsy [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-v7qfsy [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-v7qfsy [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-v7qfsy [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-v7qfsy [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-v7qfsy [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-v7qfsy :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-v7qfsy_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M485.82,44.476L420.152,51.564C354.484,58.651,223.148,72.825,157.48,83.413C91.813,94,91.813,101,91.813,104.5L91.813,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Getting_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Getting_0\" data-points=\"W3sieCI6NDg1LjgyMDMxMjUsInkiOjQ0LjQ3NjM5MTIzMTAyODY3fSx7IngiOjkxLjgxMjUsInkiOjg3fSx7IngiOjkxLjgxMjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M485.82,51.191L453.454,57.159C421.089,63.127,356.357,75.064,323.991,84.532C291.625,94,291.625,101,291.625,104.5L291.625,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Guides_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Guides_0\" data-points=\"W3sieCI6NDg1LjgyMDMxMjUsInkiOjUxLjE5MDkzNTI4MzY4Nzk0fSx7IngiOjI5MS42MjUsInkiOjg3fSx7IngiOjI5MS42MjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M524.817,62L517.285,66.167C509.753,70.333,494.689,78.667,487.157,86.333C479.625,94,479.625,101,479.625,104.5L479.625,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Plugins_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Plugins_0\" data-points=\"W3sieCI6NTI0LjgxNzMwNzY5MjMwNzcsInkiOjYyfSx7IngiOjQ3OS42MjUsInkiOjg3fSx7IngiOjQ3OS42MjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M622.433,62L629.965,66.167C637.497,70.333,652.561,78.667,660.093,86.333C667.625,94,667.625,101,667.625,104.5L667.625,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Themes_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Themes_0\" data-points=\"W3sieCI6NjIyLjQzMjY5MjMwNzY5MjMsInkiOjYyfSx7IngiOjY2Ny42MjUsInkiOjg3fSx7IngiOjY2Ny42MjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M661.43,50.78L695.02,56.817C728.609,62.853,795.789,74.927,829.379,84.463C862.969,94,862.969,101,862.969,104.5L862.969,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Reference_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Reference_0\" data-points=\"W3sieCI6NjYxLjQyOTY4NzUsInkiOjUwLjc3OTk5NzgzOTkzOTUyfSx7IngiOjg2Mi45Njg3NSwieSI6ODd9LHsieCI6ODYyLjk2ODc1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M661.43,44.343L728.245,51.452C795.06,58.562,928.69,72.781,995.505,83.39C1062.32,94,1062.32,101,1062.32,104.5L1062.32,108\" id=\"rr-mermaid-v7qfsy-L_Docs_Framework_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_Framework_0\" data-points=\"W3sieCI6NjYxLjQyOTY4NzUsInkiOjQ0LjM0MjkyNTE5OTQzMDg4fSx7IngiOjEwNjIuMzIwMzEyNSwieSI6ODd9LHsieCI6MTA2Mi4zMjAzMTI1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path><path d=\"M1062.32,190L1062.32,194.167C1062.32,198.333,1062.32,206.667,1062.32,214.333C1062.32,222,1062.32,229,1062.32,232.5L1062.32,236\" id=\"rr-mermaid-v7qfsy-L_Framework_Development_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Framework_Development_0\" data-points=\"W3sieCI6MTA2Mi4zMjAzMTI1LCJ5IjoxOTB9LHsieCI6MTA2Mi4zMjAzMTI1LCJ5IjoyMTV9LHsieCI6MTA2Mi4zMjAzMTI1LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-v7qfsy_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Getting_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Guides_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Plugins_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Themes_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Reference_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_Framework_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Framework_Development_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Docs-0\" data-look=\"classic\" transform=\"translate(573.625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.8046875\" y=\"-27\" width=\"175.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.8046875, -12)\"><rect></rect><foreignObject width=\"115.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Docs</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Getting-2\" data-look=\"classic\" transform=\"translate(91.8125, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-39\" width=\"167.625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -24)\"><rect></rect><foreignObject width=\"107.625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started<br>使い始める</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Guides-4\" data-look=\"classic\" transform=\"translate(291.625, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-39\" width=\"132\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -24)\"><rect></rect><foreignObject width=\"72\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Guides<br>具体的な作業</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Plugins-6\" data-look=\"classic\" transform=\"translate(479.625, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-72\" y=\"-39\" width=\"144\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42, -24)\"><rect></rect><foreignObject width=\"84\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugins<br>機能を追加する</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Themes-8\" data-look=\"classic\" transform=\"translate(667.625, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-39\" width=\"132\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -24)\"><rect></rect><foreignObject width=\"72\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Themes<br>見た目を選ぶ</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Reference-10\" data-look=\"classic\" transform=\"translate(862.96875, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.34375\" y=\"-39\" width=\"158.6875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.34375, -24)\"><rect></rect><foreignObject width=\"98.6875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Reference<br>設定・CLI・API</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Framework-12\" data-look=\"classic\" transform=\"translate(1062.3203125, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.0078125\" y=\"-39\" width=\"140.015625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.0078125, -24)\"><rect></rect><foreignObject width=\"80.015625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework<br>内部構造</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-v7qfsy-flowchart-Development-14\" data-look=\"classic\" transform=\"translate(1062.3203125, 279)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.140625\" y=\"-39\" width=\"154.28125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.140625, -24)\"><rect></rect><foreignObject width=\"94.28125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Development<br>本体開発</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-v7qfsy-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-v7qfsy-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Docs[\"Riebeckite Docs\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Docs --> Getting[\"Getting Started&#x3C;br/>使い始める\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Docs --> Guides[\"Guides&#x3C;br/>具体的な作業\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Docs --> Plugins[\"Plugins&#x3C;br/>機能を追加する\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Docs --> Themes[\"Themes&#x3C;br/>見た目を選ぶ\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Docs --> Reference[\"Reference&#x3C;br/>設定・CLI・API\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Docs --> Framework[\"Framework&#x3C;br/>内部構造\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Framework --> Development[\"Development&#x3C;br/>本体開発\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h3 id=\"getting-started\">Getting Started</h3>\n<p>初めて Riebeckite を使う人向けのページです。</p>\n<p>サイトの作成から最初の記事、プリセット、デプロイまでを扱います。</p>\n<h3 id=\"guides\">Guides</h3>\n<p>具体的な目的を達成するための手順です。</p>\n<p>たとえば、</p>\n<ul>\n  <li>Obsidian Vault を使う</li>\n  <li>コンテンツリポジトリを分離する</li>\n  <li>多言語化する</li>\n  <li>Riebeckite をアップグレードする</li>\n  <li>特定の環境へデプロイする</li>\n</ul>\n<p>といった作業を扱います。</p>\n<h3 id=\"プラグイン\">プラグイン</h3>\n<p>Riebeckite に機能を追加するプラグインを探すためのページです。</p>\n<p>記事表示、検索、グラフ、Mermaid、Excalidraw など、必要な機能に応じてプラグインを追加できます。</p>\n<h3 id=\"テーマ\">テーマ</h3>\n<p>サイトの見た目を変更するテーマを探すためのページです。</p>\n<p>テーマを変更しても、コンテンツやプラグインの機能そのものは変わりません。</p>\n<h3 id=\"リファレンス\">リファレンス</h3>\n<p>設定値、CLI コマンド、Public API を調べるための資料です。</p>\n<p>「この設定は何を意味するのか」「この API は何を提供するのか」を確認したいときに利用します。</p>\n<h3 id=\"フレームワーク\">フレームワーク</h3>\n<p>Riebeckite の内部構造を理解したい人向けです。</p>\n<p>コンテンツシステム、プラグインシステム、テーマシステム、ビルドシステム、HonoX 連携などを説明します。</p>\n<p>通常のサイト利用では読む必要はありません。</p>\n<h2 id=\"サイトを作る人と本体を開発する人\">サイトを作る人と、本体を開発する人</h2>\n<p>Riebeckite には大きく2つの使い方があります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-112q3t\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 479.0078125px;\" viewBox=\"0 0 479.0078125 374\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-112q3t{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-112q3t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-112q3t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-112q3t .error-icon{fill:#552222;}#rr-mermaid-112q3t .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-112q3t .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-112q3t .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-112q3t .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-112q3t .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-112q3t .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-112q3t .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-112q3t .marker{fill:#333333;stroke:#333333;}#rr-mermaid-112q3t .marker.cross{stroke:#333333;}#rr-mermaid-112q3t svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-112q3t p{margin:0;}#rr-mermaid-112q3t .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-112q3t .cluster-label text{fill:#333;}#rr-mermaid-112q3t .cluster-label span{color:#333;}#rr-mermaid-112q3t .cluster-label span p{background-color:transparent;}#rr-mermaid-112q3t .label text,#rr-mermaid-112q3t span{fill:#333;color:#333;}#rr-mermaid-112q3t .node rect,#rr-mermaid-112q3t .node circle,#rr-mermaid-112q3t .node ellipse,#rr-mermaid-112q3t .node polygon,#rr-mermaid-112q3t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-112q3t .rough-node .label text,#rr-mermaid-112q3t .node .label text,#rr-mermaid-112q3t .image-shape .label,#rr-mermaid-112q3t .icon-shape .label{text-anchor:middle;}#rr-mermaid-112q3t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-112q3t .rough-node .label,#rr-mermaid-112q3t .node .label,#rr-mermaid-112q3t .image-shape .label,#rr-mermaid-112q3t .icon-shape .label{text-align:center;}#rr-mermaid-112q3t .node.clickable{cursor:pointer;}#rr-mermaid-112q3t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-112q3t .arrowheadPath{fill:#333333;}#rr-mermaid-112q3t .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-112q3t .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-112q3t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-112q3t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-112q3t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-112q3t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-112q3t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-112q3t .cluster text{fill:#333;}#rr-mermaid-112q3t .cluster span{color:#333;}#rr-mermaid-112q3t .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-112q3t .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-112q3t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-112q3t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-112q3t rect.text{fill:none;stroke-width:0;}#rr-mermaid-112q3t .icon-shape,#rr-mermaid-112q3t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-112q3t .icon-shape p,#rr-mermaid-112q3t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-112q3t .icon-shape .label rect,#rr-mermaid-112q3t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-112q3t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-112q3t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-112q3t .node .neo-node{stroke:#9370DB;}#rr-mermaid-112q3t [data-look=\"neo\"].node rect,#rr-mermaid-112q3t [data-look=\"neo\"].cluster rect,#rr-mermaid-112q3t [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-112q3t [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-112q3t [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-112q3t [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-112q3t [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-112q3t [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-112q3t [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-112q3t [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-112q3t [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-112q3t :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-112q3t_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-112q3t_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M213.753,99.011L198.765,111.009C183.778,123.007,153.803,147.004,138.816,164.502C123.828,182,123.828,193,123.828,198.5L123.828,204\" id=\"rr-mermaid-112q3t-L_User_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_User_Site_0\" data-points=\"W3sieCI6MjEzLjc1Mjg4NjAzMDY4ODgsInkiOjk5LjAxMDY5ODUzMDY4ODh9LHsieCI6MTIzLjgyODEyNSwieSI6MTcxfSx7IngiOjEyMy44MjgxMjUsInkiOjIwOH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-112q3t_flowchart-v2-pointEnd)\"></path><path d=\"M283.731,99.011L298.719,111.009C313.706,123.007,343.681,147.004,358.669,164.502C373.656,182,373.656,193,373.656,198.5L373.656,204\" id=\"rr-mermaid-112q3t-L_User_Framework_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_User_Framework_0\" data-points=\"W3sieCI6MjgzLjczMTQ4ODk2OTMxMTIsInkiOjk5LjAxMDY5ODUzMDY4ODh9LHsieCI6MzczLjY1NjI1LCJ5IjoxNzF9LHsieCI6MzczLjY1NjI1LCJ5IjoyMDh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-112q3t_flowchart-v2-pointEnd)\"></path><path d=\"M123.828,262L123.828,266.167C123.828,270.333,123.828,278.667,123.828,286.333C123.828,294,123.828,301,123.828,304.5L123.828,308\" id=\"rr-mermaid-112q3t-L_Site_Getting_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Site_Getting_0\" data-points=\"W3sieCI6MTIzLjgyODEyNSwieSI6MjYyfSx7IngiOjEyMy44MjgxMjUsInkiOjI4N30seyJ4IjoxMjMuODI4MTI1LCJ5IjozMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-112q3t_flowchart-v2-pointEnd)\"></path><path d=\"M373.656,262L373.656,266.167C373.656,270.333,373.656,278.667,373.656,286.333C373.656,294,373.656,301,373.656,304.5L373.656,308\" id=\"rr-mermaid-112q3t-L_Framework_Dev_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Framework_Dev_0\" data-points=\"W3sieCI6MzczLjY1NjI1LCJ5IjoyNjJ9LHsieCI6MzczLjY1NjI1LCJ5IjoyODd9LHsieCI6MzczLjY1NjI1LCJ5IjozMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-112q3t_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(123.828125, 171)\"><g class=\"label\" data-id=\"L_User_Site_0\" transform=\"translate(-79.3515625, -12)\"><foreignObject width=\"158.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Riebeckiteでサイトを作る</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(373.65625, 171)\"><g class=\"label\" data-id=\"L_User_Framework_0\" transform=\"translate(-79.3515625, -12)\"><foreignObject width=\"158.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Riebeckite自体を開発する</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Site_Getting_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Framework_Dev_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-112q3t-flowchart-User-0\" data-look=\"classic\" transform=\"translate(248.7421875, 71)\"><polygon points=\"63,0 126,-63 63,-126 0,-63\" class=\"label-container\" transform=\"translate(-62.5, 63)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>あなたの目的</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-112q3t-flowchart-Site-2\" data-look=\"classic\" transform=\"translate(123.828125, 235)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.140625\" y=\"-27\" width=\"178.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.140625, -12)\"><rect></rect><foreignObject width=\"118.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>create-riebeckite</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-112q3t-flowchart-Framework-4\" data-look=\"classic\" transform=\"translate(373.65625, 235)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.3515625\" y=\"-27\" width=\"194.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.3515625, -12)\"><rect></rect><foreignObject width=\"134.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckiteリポジトリ</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-112q3t-flowchart-Getting-6\" data-look=\"classic\" transform=\"translate(123.828125, 339)\"><rect class=\"basic label-container\" style=\"\" x=\"-115.828125\" y=\"-27\" width=\"231.65625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-85.828125, -12)\"><rect></rect><foreignObject width=\"171.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started / Guides</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-112q3t-flowchart-Dev-8\" data-look=\"classic\" transform=\"translate(373.65625, 339)\"><rect class=\"basic label-container\" style=\"\" x=\"-84\" y=\"-27\" width=\"168\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54, -12)\"><rect></rect><foreignObject width=\"108\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>フレームワーク開発</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-112q3t-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-112q3t-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    User{\"あなたの目的\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    User -->|\"Riebeckiteでサイトを作る\"| Site[\"create-riebeckite\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    User -->|\"Riebeckite自体を開発する\"| Framework[\"Riebeckiteリポジトリ\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Site --> Getting[\"Getting Started / Guides\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Framework --> Dev[\"フレームワーク開発\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h3 id=\"サイトを作る場合\">サイトを作る場合</h3>\n<p>Riebeckite のリポジトリはクローンしません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>create-riebeckite</span></span></code></span> から始めます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>create-riebeckite</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>生成されたサイト</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>content/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>dev / build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>      ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>deploy</span></span></code></pre>\n  </div>\n</figure>\n<p>普段利用するのは、生成されたサイト側です。</p>\n<h3 id=\"riebeckite-本体を開発する場合\">Riebeckite 本体を開発する場合</h3>\n<p>Riebeckite 自体へ変更を加える場合だけ、リポジトリをクローンします。</p>\n<p>この場合は、</p>\n<ul>\n  <li>モノレポ</li>\n  <li>ルートの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm</span></span></code></span> コマンド</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/*</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></li>\n  <li>フレームワークテスト</li>\n  <li>外部サイト E2E</li>\n</ul>\n<p>などを扱います。</p>\n<p>詳しくは <a href=\"/docs/framework/development\">フレームワーク開発</a> を参照してください。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> は Riebeckite のドキュメント兼参照アプリです。一般ユーザーがサイトを作るためのテンプレートではありません。</p>\n<h2 id=\"迷ったら\">迷ったら</h2>\n<p>どこを読めばよいか分からない場合は、次の基準で選べます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-7yfkrt\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 740.9296875px;\" viewBox=\"0 0 740.9296875 1204.6875\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-7yfkrt{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-7yfkrt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-7yfkrt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-7yfkrt .error-icon{fill:#552222;}#rr-mermaid-7yfkrt .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-7yfkrt .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-7yfkrt .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-7yfkrt .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-7yfkrt .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-7yfkrt .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-7yfkrt .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-7yfkrt .marker{fill:#333333;stroke:#333333;}#rr-mermaid-7yfkrt .marker.cross{stroke:#333333;}#rr-mermaid-7yfkrt svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-7yfkrt p{margin:0;}#rr-mermaid-7yfkrt .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-7yfkrt .cluster-label text{fill:#333;}#rr-mermaid-7yfkrt .cluster-label span{color:#333;}#rr-mermaid-7yfkrt .cluster-label span p{background-color:transparent;}#rr-mermaid-7yfkrt .label text,#rr-mermaid-7yfkrt span{fill:#333;color:#333;}#rr-mermaid-7yfkrt .node rect,#rr-mermaid-7yfkrt .node circle,#rr-mermaid-7yfkrt .node ellipse,#rr-mermaid-7yfkrt .node polygon,#rr-mermaid-7yfkrt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-7yfkrt .rough-node .label text,#rr-mermaid-7yfkrt .node .label text,#rr-mermaid-7yfkrt .image-shape .label,#rr-mermaid-7yfkrt .icon-shape .label{text-anchor:middle;}#rr-mermaid-7yfkrt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-7yfkrt .rough-node .label,#rr-mermaid-7yfkrt .node .label,#rr-mermaid-7yfkrt .image-shape .label,#rr-mermaid-7yfkrt .icon-shape .label{text-align:center;}#rr-mermaid-7yfkrt .node.clickable{cursor:pointer;}#rr-mermaid-7yfkrt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-7yfkrt .arrowheadPath{fill:#333333;}#rr-mermaid-7yfkrt .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-7yfkrt .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-7yfkrt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-7yfkrt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-7yfkrt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-7yfkrt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-7yfkrt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-7yfkrt .cluster text{fill:#333;}#rr-mermaid-7yfkrt .cluster span{color:#333;}#rr-mermaid-7yfkrt .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-7yfkrt .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-7yfkrt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-7yfkrt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-7yfkrt rect.text{fill:none;stroke-width:0;}#rr-mermaid-7yfkrt .icon-shape,#rr-mermaid-7yfkrt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-7yfkrt .icon-shape p,#rr-mermaid-7yfkrt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-7yfkrt .icon-shape .label rect,#rr-mermaid-7yfkrt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-7yfkrt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-7yfkrt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-7yfkrt .node .neo-node{stroke:#9370DB;}#rr-mermaid-7yfkrt [data-look=\"neo\"].node rect,#rr-mermaid-7yfkrt [data-look=\"neo\"].cluster rect,#rr-mermaid-7yfkrt [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7yfkrt [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-7yfkrt [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-7yfkrt [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7yfkrt [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-7yfkrt [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7yfkrt [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-7yfkrt [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7yfkrt [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7yfkrt :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-7yfkrt_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M205.219,62L205.219,66.167C205.219,70.333,205.219,78.667,205.219,86.333C205.219,94,205.219,101,205.219,104.5L205.219,108\" id=\"rr-mermaid-7yfkrt-L_Start_First_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Start_First_0\" data-points=\"W3sieCI6MjA1LjIxODc1LCJ5Ijo2Mn0seyJ4IjoyMDUuMjE4NzUsInkiOjg3fSx7IngiOjIwNS4yMTg3NSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M171.74,204.521L158.419,216.268C145.097,228.014,118.455,251.507,105.134,279.754C91.813,308,91.813,341,91.813,357.5L91.813,374\" id=\"rr-mermaid-7yfkrt-L_First_Getting_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_First_Getting_0\" data-points=\"W3sieCI6MTcxLjczOTkwOTc1OTg0NzcsInkiOjIwNC41MjExNTk3NTk4NDc3fSx7IngiOjkxLjgxMjUsInkiOjI3NX0seyJ4Ijo5MS44MTI1LCJ5IjozNzh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M238.698,204.521L252.019,216.268C265.34,228.014,291.983,251.507,305.304,268.754C318.625,286,318.625,297,318.625,302.5L318.625,308\" id=\"rr-mermaid-7yfkrt-L_First_Task_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_First_Task_0\" data-points=\"W3sieCI6MjM4LjY5NzU5MDI0MDE1MjMsInkiOjIwNC41MjExNTk3NTk4NDc3fSx7IngiOjMxOC42MjUsInkiOjI3NX0seyJ4IjozMTguNjI1LCJ5IjozMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M276.243,455.618L265.165,468.848C254.088,482.079,231.933,508.539,220.855,541.494C209.777,574.448,209.777,613.896,209.777,633.62L209.777,653.344\" id=\"rr-mermaid-7yfkrt-L_Task_Guides_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Task_Guides_0\" data-points=\"W3sieCI6Mjc2LjI0MzAzOTA4NzQxNTIsInkiOjQ1NS42MTgwMzkwODc0MTUyfSx7IngiOjIwOS43NzczNDM3NSwieSI6NTM1fSx7IngiOjIwOS43NzczNDM3NSwieSI6NjU3LjM0Mzc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M361.007,455.618L372.085,468.848C383.162,482.079,405.317,508.539,416.395,527.27C427.473,546,427.473,557,427.473,562.5L427.473,568\" id=\"rr-mermaid-7yfkrt-L_Task_API_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Task_API_0\" data-points=\"W3sieCI6MzYxLjAwNjk2MDkxMjU4NDgsInkiOjQ1NS42MTgwMzkwODc0MTUyfSx7IngiOjQyNy40NzI2NTYyNSwieSI6NTM1fSx7IngiOjQyNy40NzI2NTYyNSwieSI6NTcyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M380.336,749.551L370.199,763.574C360.063,777.596,339.789,805.642,329.652,837.165C319.516,868.688,319.516,903.688,319.516,921.188L319.516,938.688\" id=\"rr-mermaid-7yfkrt-L_API_Reference_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_API_Reference_0\" data-points=\"W3sieCI6MzgwLjMzNjAwMjkxMTU1NTUsInkiOjc0OS41NTA4NDY2NjE1NTU1fSx7IngiOjMxOS41MTU2MjUsInkiOjgzMy42ODc1fSx7IngiOjMxOS41MTU2MjUsInkiOjk0Mi42ODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M474.609,749.551L484.746,763.574C494.883,777.596,515.156,805.642,525.293,825.165C535.43,844.688,535.43,855.688,535.43,861.188L535.43,866.688\" id=\"rr-mermaid-7yfkrt-L_API_Internal_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_API_Internal_0\" data-points=\"W3sieCI6NDc0LjYwOTMwOTU4ODQ0NDUsInkiOjc0OS41NTA4NDY2NjE1NTU1fSx7IngiOjUzNS40Mjk2ODc1LCJ5Ijo4MzMuNjg3NX0seyJ4Ijo1MzUuNDI5Njg3NSwieSI6ODcwLjY4NzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M492.104,1025.362L481.685,1038.749C471.267,1052.137,450.43,1078.912,440.012,1097.8C429.594,1116.688,429.594,1127.688,429.594,1133.188L429.594,1138.688\" id=\"rr-mermaid-7yfkrt-L_Internal_Framework_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Internal_Framework_0\" data-points=\"W3sieCI6NDkyLjEwMzc5NTA3NTUxMjgzLCJ5IjoxMDI1LjM2MTYwNzU3NTUxMjh9LHsieCI6NDI5LjU5Mzc1LCJ5IjoxMTA1LjY4NzV9LHsieCI6NDI5LjU5Mzc1LCJ5IjoxMTQyLjY4NzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path><path d=\"M578.756,1025.362L589.174,1038.749C599.592,1052.137,620.429,1078.912,630.847,1097.8C641.266,1116.688,641.266,1127.688,641.266,1133.188L641.266,1138.688\" id=\"rr-mermaid-7yfkrt-L_Internal_Plugins_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Internal_Plugins_0\" data-points=\"W3sieCI6NTc4Ljc1NTU3OTkyNDQ4NzIsInkiOjEwMjUuMzYxNjA3NTc1NTEyOH0seyJ4Ijo2NDEuMjY1NjI1LCJ5IjoxMTA1LjY4NzV9LHsieCI6NjQxLjI2NTYyNSwieSI6MTE0Mi42ODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7yfkrt_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Start_First_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(91.8125, 275)\"><g class=\"label\" data-id=\"L_First_Getting_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(318.625, 275)\"><g class=\"label\" data-id=\"L_First_Task_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(209.77734375, 535)\"><g class=\"label\" data-id=\"L_Task_Guides_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(427.47265625, 535)\"><g class=\"label\" data-id=\"L_Task_API_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(319.515625, 833.6875)\"><g class=\"label\" data-id=\"L_API_Reference_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(535.4296875, 833.6875)\"><g class=\"label\" data-id=\"L_API_Internal_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(429.59375, 1105.6875)\"><g class=\"label\" data-id=\"L_Internal_Framework_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(641.265625, 1105.6875)\"><g class=\"label\" data-id=\"L_Internal_Plugins_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Start-0\" data-look=\"classic\" transform=\"translate(205.21875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-27\" width=\"132\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何をしたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-First-2\" data-look=\"classic\" transform=\"translate(205.21875, 175)\"><polygon points=\"63,0 126,-63 63,-126 0,-63\" class=\"label-container\" transform=\"translate(-62.5, 63)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>初めて使う？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Getting-4\" data-look=\"classic\" transform=\"translate(91.8125, 405)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Task-6\" data-look=\"classic\" transform=\"translate(318.625, 405)\"><polygon points=\"93,0 186,-93 93,-186 0,-93\" class=\"label-container\" transform=\"translate(-92.5, 93)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-66, -12)\"><rect></rect><foreignObject width=\"132\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>具体的な作業をしたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Guides-8\" data-look=\"classic\" transform=\"translate(209.77734375, 684.34375)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.3515625\" y=\"-27\" width=\"110.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.3515625, -12)\"><rect></rect><foreignObject width=\"50.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Guides</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-API-10\" data-look=\"classic\" transform=\"translate(427.47265625, 684.34375)\"><polygon points=\"112.34375,0 224.6875,-112.34375 112.34375,-224.6875 0,-112.34375\" class=\"label-container\" transform=\"translate(-111.84375, 112.34375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-85.34375, -12)\"><rect></rect><foreignObject width=\"170.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>設定・CLI・APIを調べたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Reference-12\" data-look=\"classic\" transform=\"translate(319.515625, 969.6875)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.9140625\" y=\"-27\" width=\"133.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.9140625, -12)\"><rect></rect><foreignObject width=\"73.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Reference</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Internal-14\" data-look=\"classic\" transform=\"translate(535.4296875, 969.6875)\"><polygon points=\"99,0 198,-99 99,-198 0,-99\" class=\"label-container\" transform=\"translate(-98.5, 99)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-72, -12)\"><rect></rect><foreignObject width=\"144\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>内部の仕組みを知りたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Framework-16\" data-look=\"classic\" transform=\"translate(429.59375, 1169.6875)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.0078125\" y=\"-27\" width=\"140.015625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.0078125, -12)\"><rect></rect><foreignObject width=\"80.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7yfkrt-flowchart-Plugins-18\" data-look=\"classic\" transform=\"translate(641.265625, 1169.6875)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.6640625\" y=\"-27\" width=\"183.328125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.6640625, -12)\"><rect></rect><foreignObject width=\"123.328125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugins / Themes</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-7yfkrt-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-7yfkrt-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Start[\"何をしたい？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Start --> First{\"初めて使う？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    First -->|Yes| Getting[\"Getting Started\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    First -->|No| Task{\"具体的な作業をしたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Task -->|Yes| Guides[\"Guides\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Task -->|No| API{\"設定・CLI・APIを調べたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    API -->|Yes| Reference[\"Reference\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    API -->|No| Internal{\"内部の仕組みを知りたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Internal -->|Yes| Framework[\"Framework\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span>    Internal -->|No| Plugins[\"Plugins / Themes\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>簡単に分けると、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>初めて使う</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  → Getting Started</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>具体的な作業をする</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>  → Guides</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>機能や見た目を追加する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>  → Plugins / Themes</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>設定・CLI・APIを調べる</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>  → Reference</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>内部構造を理解する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>  → Framework</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>Riebeckite本体を変更する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>  → Framework Development</span></span></code></pre>\n  </div>\n</figure>\n<p>です。</p>\n<p>Coding Agent 向けの短い開発ルールは <a href=\"./agents/README.md\">agents</a> に分けています。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Riebeckite ドキュメント Riebeckite は、 Markdown や Obsidian のノートから公開サイトを作るためのフレームワーク です。 Markdown を content/ に置くだけのシンプルなサイトから、プラグイン、テーマ、多言語化、外部の Obsidian Vault を使うサイトまで","tags":[]},{"id":"https://riebeckite.dev/assets/HW","url":"https://riebeckite.dev/assets/HW","title":"HW","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<p><mark class=\"rb-highlight\">⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠</mark> You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'</p>\n<h1 id=\"excalidraw-data\">Excalidraw Data</h1>\n<h2 id=\"text-elements\">Text Elements</h2>\n<p id=\"7rDwjgQP\" data-block-id=\"7rDwjgQP\">Hello Riebeckite!</p>\n<p id=\"WpA1y2eL\" data-block-id=\"WpA1y2eL\">By Rerurate_514</p>\n<p id=\"RvFaMEZu\" data-block-id=\"RvFaMEZu\">riebeckite.dev</p>\n<h2 id=\"embedded-files\">Embedded Files</h2>\n<p>ac4cfc9875041e60cc32b2ff448c2192786e0f2f: <a href=\"/assets/riebecite-ogp.png\" class=\"wikilink\">riebecite-ogp.png</a></p>\n<p>%%</p>\n<h2 id=\"drawing\">Drawing</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"compressed-json\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">compressed-json</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"compressed-json\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"compressed-json\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebR4ADm0ARho6IIR9BA4oZm4AbXAwUDBSiBJuCAB2UgARCgArZQBFAAU00shYREqoLCgOssxuZwA2ABYq7UmABirRgGYZxYWA</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>TlGAVn4ymBHk0dHtNYT9nhnxjaXxviLIChJ1bmTVpKqq5IST5JmFjeSN0Y3TpSBCEZTSbgLOLPVawuHw2GjbaQazKYLcGbIiDMKCkNgAawQAGE2Pg2KRKgBiZIIGk0waQTS4bD45R4oQcYgkskUiS46zMOC4QI5BkQABmhHw+AAyrB0RJBB4xTi8YSAOoPSTcIFlVUEhBymAK9BKipY9ngjjhPJoZJYthC7BqXZ2maY24QNnCOAASWIttQ+QAulj</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>xeQsv7uBwhNKsYROVhKrgZmL2ZzrcxAzG456wghiE9RskeB8qqsZltPYwWOwuGhxr8sTXWJwAHKcMQ65IlqoJWFVcbx5i1DJ9QtocUEMJYzTCTkAUWCWRygZDWKEcGIuHHT3LPZOm1WkyHnuwgR3Bb3Fb760WlYWWLJLKvk+nCCxfUwAwkAAkgmSqAAEqEAgmgICyagIAAhGmlAACr9JU/7SmwwGgeBkF9LBYacFAMqEEY4i8Aks6hAgABieEEUR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>0axvguE5BRuD6FKrqoFUn79AAgkQyj1ugwTigMzZMFA5gELxYICdAjpinoOS4AmTBRmgOYMZ65JggmBCId+yEAWhIFgRB+JQThnq4EIUBsEB4SEcRuJCB+npENa/5ghCdopFWwL4Lg4H4K0bCsOJnB0bmwKSKEelQAAMgm+LcFO+Azq5iURfgRQAL7bCUZQVBI6pwNxyQwDwCBxWK3TEdASFYsMaDOJcUy9gs4yLDwSyApxnrsc4CxJAs8ztQCMw</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>8Ks7wnFi9zEI8drPCkw2rGsFwLCWvllJIoLgj+qAfNoPyjcNPwTDw4yVliqImh6wL6oS3LklSdK0kgZEst6HJcqST18uQHCCsK2QiZ6krSkaJrYqS5p5riBqanN2poLqAhw4SEO1WahYWsIVo2k8DpOi6Tzulin1+gGBShqDEYIKpqDqfGiaNeguAbGm87EJm2b0Vi+YTqgfzjAkowVhsvXAi2dbcBs4z2tWTCthwHYcF2drjC8CQa4Nw6jsEu5v</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>qlLnAnOX1LpkwNrtTwKbtuBv7fuHz7ICCRnFi54hPbyTlnM/aDnM61PmwL4CylaXAl+e0QAAQjAwFMCIl4APpC3BFCxZUsfx6Qid9CnyTjGK4rUQ5TzjNMPCjPME2AqsyRrDwm2MuRVE5DRxGM6DeHMax+DsU3dXflJ/GVEJIOS2JEn4MPMk2XA8l4Up1qkPTnfAlp/i6UhEhZ3ZOfkHnqdXdZtn2bRaBOcbZRuQgHm7U88QD/5gXBaF0tqbznrR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>cwsUJRwSWG3DtfDKH9pQ5Typ6Qq6BfQcE0AAKVGAAVXoElT88BaqEH0NEN6noWZjCWNMUYWtxofGPO6VYWJ+r1ziAsYssIfgdQWLQ08wJZrzX2oCbQ/tvZixeBsGYCQB7bU8ntQR8Qq6lnGHLcs7xJhXQ4GiYit09Ro2JD9Xk6B+QAyFCKceZQmQfXTN9HkvR/qA10UXKUsp5S1WitgDQgQVSqIRuw+Wd1VEY0qFjDmfhJDcwJppImsASbKMgEY/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span>xoCNJ3QQK+VALw5ZIgVrWcKdpiyiWScrTsxEC51wBIIkWG4tyXgFjwg8zt66Dl1mOWJYcr6QHJv6K2s5ObmxXLkKmT4QEM0/n5YOhJQ7vjDLTVePStoxX6H/ABqBanuwvF7R2h4ur+zDFKOmAsIDMnGNgcU2AXhVH4XLBAowZjYGwFCTQPBxTiikQkbApZVg8D7KMBAMxxSXJVO4YihROhgDcZ0ZItxrZlHPHJSJTNiBJgkLgUYEBwFFHypAKBEA</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>gL0GYgAWQXAALSENVdBvR6q4JGBMBYRxK5LH4f8AunxKEjF+NoDYPAupV2uBdB5giZpam4OWaYPxBGNiqDMHs7wKFfx2l5faA9rpKL5qox6GiIDUlevSd6rIjFytMQKHRwNLHgxsV46G2NYZqgQC4pGvAZXGs8YqA1Pi8ZZgCevIJ7FvihK9OyCmTSaYsTWZlcFkLWYJB8RmfGYK8wxJKRcBlk0Vquqlik1ARD0lKxVmrQWsJvZCyqfrGpgzPSm0</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span>XMuS2vrPS22KdeMpRDvbnVmZ7WJpSnYHEHE2VyfSc1Gy4vpCQpAMKmSgtoCF9A04Zy7T2rCCB+0IEHYxfCpc7QowgEyMIrcZ3n26ZFMoxcmIsTYjLDtUAZ6jwQMJMUNZxLuAPXyOS7tF7KRXgLNeZQN46XwMO9A3aTJjonVOyyJ87KsFXZfTp7kxV7WSI/J8AUgivzUO/NdUSxk/wmV02pcLSgIvKOsowAA1UgAANAA8hQfE0dcU9D5AS4EeCDjl</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span>3LLLYWTaKwvBpU1c68R9kAkGlURIDzBUcsRjLcRawHlLFWOLH4G0sTCPvmgKEKQETycRPIxRGILUGnVRIRVL0xQGNVZzdTmizFatFCs3VxpMY2tUxqTlyNLOGj1da5UONfERP2oTZkxM3SuoaZTNA64vWRnvaMxFzNkxVCDVzENcG+bhqeINS4RCLikSSUrLlSa6wpuIschIgrGyusICOapAtAN5paYW1cxabZFPmXXBtFwpEiuBB7MtdoFn7DWJ</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"23\"><span>sFh19W0DPbZ6SOlQh3b3QEXEuq7EhkSXaNjuQWJTd23X3VLfWeJ8RkmPE9k9z0rd6Fes8N7l4jPXZAJ9HAt6duG8fGyf7Z2oGK35ZSd9xVgf+BBl+IUYPxofZAb+v9kPvhyuAa2Gy4BwDlJebg+VoDbSyKPERgwGCgQoNHZkumvr6YVVcjH4o4fYBELo30fR9BymNWjzTr1se4+BvjzISPDF6fURq7RQNjNFAgDj0geOCcUSsVa00FmWds455kOU</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"24\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"25\"><span>5h8QwA4GwPoRO1P040y9ZV/OKc5Cp4T5xWoADSCB2IQCyI4IQ+hyfs8pwTqXhIsPCisJoKUHn0AKRxNYPRrPFdQGVybuzZn9WOYV4bpXBOgK4z8ZFv5jvvfO4J/hp1ITtjB8F/oZdPcd1oE2tHo3mRl3tyeLqZPPvMixQvYJI9DuBcp5V8Kfd7O2AUG2rgQL66s+h8yAuTk3Fy+V5COs4UeIqBR6L9n/QzfO/wTxV2zmBuY8UVpn7k0D7sQgulLh</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"26\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"27\"><span>rlaxH4bArGcfZLx9hR+YLP/AABNHUjZ4iTQSN1Dq1wqiBxZ0YNgBhwfVgIM5B+ona6jFQ5AHv9f9B+6+i5iARi4dshIHT2RmUTdUAL6HnkTyjwAOIDRTYAhUbwCmCB6yAVAOMV+lQHQ2jlJHWVIGUCZAAAoeFqAHYKESDiCZh6UABKMUOyZQWMYUSoXAggs4IcXgc4Yglg8gqg2FUoXKfndReCR0VoEXQMdDDINpV3CrMocQ4GGnFHTkKQxkIQF8</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"28\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"29\"><span>KALnaURQ7EM9UXDsSXVRDQnEEXGAHQhAOQz6BQyJV/WbHIQQuAYQlkHmWvd/V3cPMKAGKQiUCfbICFbtBRW/YEbIRA2JW7YFIgCAm7HOOpCAE7aHC+CIh0ayG+bgYIyALBUgQkUgNsb1JIuIz0VI9IhAzQJA7I5ySwuwBoCCXIGUE7OAWA+Ak7QottFA5kcSRgQQ0kPwsoGqLxDIbAVw+SIQHEAwQfMjKLFtEOZKXNYEcMAwGUHovowBSI/yHEbi</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"30\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"31\"><span>XowgVo6/fATKSwxwZgQIkkHIfoNFbIHFBYqPS3TkBMZQVoQIcUJgbIVNDAeoooqPfLNFEgOANgBMfCaouAS4gooo2I5yM4tgTAWY4IVYzgWo2qBSKIBMOHBMOAayUcMwB4qyGyHgvgyAMGcIcHbKEAbKIAA=</span></span></code></pre>\n  </div>\n</figure>\n<p>%%</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: 'Decompress current Excalidra","tags":["excalidraw"]},{"id":"https://riebeckite.dev/en/docs/","url":"https://riebeckite.dev/en/docs/","title":"Documentation","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"documentation\">Documentation</h1>\n<p>Start with <a href=\"/en/docs/getting-started/\">Getting Started</a> to create and publish a Riebeckite site. Use the sections below to explore the framework, extend it with plugins, and customize its appearance.</p>\n<ul>\n  <li><a href=\"/en/docs/getting-started/\">Getting Started</a></li>\n  <li><a href=\"/en/docs/guides/\">Guides</a></li>\n  <li><a href=\"/en/docs/framework/\">Framework</a></li>\n  <li><a href=\"/en/docs/plugins/\">Plugins</a></li>\n  <li><a href=\"/en/docs/themes/\">Themes</a></li>\n  <li><a href=\"/en/docs/reference/\">Reference</a></li>\n</ul>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Documentation Start with Getting Started to create and publish a Riebeckite site. Use the sections below to explore the framework, extend it with plugins, and c","tags":[]},{"id":"https://riebeckite.dev/docs/","url":"https://riebeckite.dev/docs/","title":"ドキュメント","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"ドキュメント\">ドキュメント</h1>\n<p>Riebeckite でサイトを作成して公開するまでの流れは、<a href=\"/docs/getting-started/\">Getting Started</a> から確認できます。フレームワークの仕組み、Plugin による拡張、見た目の調整は、以下の各章を参照してください。</p>\n<ul>\n  <li><a href=\"/docs/getting-started/\">Getting Started</a></li>\n  <li><a href=\"/docs/guides/\">ガイド</a></li>\n  <li><a href=\"/docs/framework/\">フレームワーク</a></li>\n  <li><a href=\"/docs/plugins/\">Plugin</a></li>\n  <li><a href=\"/docs/themes/\">Theme</a></li>\n  <li><a href=\"/docs/reference/\">リファレンス</a></li>\n</ul>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"ドキュメント Riebeckite でサイトを作成して公開するまでの流れは、 Getting Started から確認できます。フレームワークの仕組み、Plugin による拡張、見た目の調整は、以下の各章を参照してください。 Getting Started ガイド フレームワーク Plugin Theme リファレンス","tags":[]},{"id":"https://riebeckite.dev/en/docs/accessibility","url":"https://riebeckite.dev/en/docs/accessibility","title":"Accessibility","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"accessibility\">Accessibility</h1>\n<p>Riebeckite aims to follow WCAG 2.2 AA guidance, but it does not make a blanket compliance claim. The accessibility of a published site depends on Riebeckite, the selected Theme, enabled Plugins, author content, and custom code.</p>\n<h2 id=\"framework-contract\">Framework contract</h2>\n<p>Riebeckite uses native HTML first and adds ARIA only when native HTML cannot express the needed behavior or state.</p>\n<ul>\n  <li>The generated HonoX document shell sets <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>lang</span></span></code></span>, viewport metadata, page title, and theme attributes.</li>\n  <li>Presets render normal landmarks such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>header</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>main</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>aside</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>footer</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>nav</span></span></code></span> where those structures exist.</li>\n  <li>Framework-generated links use real <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;a href></span></span></code></span> elements, and actions use real <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;button type=\"button\"></span></span></code></span> elements.</li>\n  <li>Plugin page types are rendered inside the shared document shell so language, title, assets, and theme hooks apply consistently.</li>\n  <li>Riebeckite does not invent image descriptions. Authors and Plugins must provide meaningful <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>alt</span></span></code></span> text or mark decorative images with empty <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>alt</span></span></code></span>.</li>\n</ul>\n<h2 id=\"plugin-author-contract\">Plugin author contract</h2>\n<p>When a Plugin renders UI:</p>\n<ul>\n  <li>Prefer semantic HTML before ARIA.</li>\n  <li>Use links for navigation and buttons for actions. Do not use clickable <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>div</span></span></code></span> or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>span</span></span></code></span> elements.</li>\n  <li>Every interactive control needs visible text or another accessible name.</li>\n  <li>Keyboard users must be able to reach and operate the feature.</li>\n  <li>Dialog-like UI must move focus on open, keep Tab navigation meaningful while open, close on <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Escape</span></span></code></span>, and restore focus to the opener.</li>\n  <li>Keep ARIA states such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>aria-expanded</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>aria-pressed</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>aria-current</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>aria-selected</span></span></code></span> synchronized with the real state.</li>\n  <li>Respect <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>prefers-reduced-motion</span></span></code></span> for motion that could distract or block understanding.</li>\n  <li>Visualizations such as canvas, graphs, charts, maps, and diagrams should provide a useful text alternative, source representation, caption, or summary instead of a huge artificial ARIA tree.</li>\n</ul>\n<h2 id=\"theme-author-contract\">Theme author contract</h2>\n<p>Themes are responsible for visual accessibility:</p>\n<ul>\n  <li>Do not remove focus indicators unless you replace them with an equally visible <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>:focus-visible</span></span></code></span> style.</li>\n  <li>Keep body text, muted text, links, buttons, form controls, code, selected states, and focus rings readable in light and dark modes.</li>\n  <li>Links should be recognizable without depending on color alone.</li>\n  <li>Avoid color-only state. Combine color with text, shape, underline, icons, or semantic state.</li>\n  <li>Let text scale naturally. Avoid fixed heights that clip content at narrow viewports or high zoom.</li>\n  <li>Prefer reduced motion defaults or wrap non-essential animation in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>prefers-reduced-motion</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>prefers-reduced-motion: no-preference</span></span></code></span>.</li>\n</ul>\n<h2 id=\"content-author-checklist\">Content author checklist</h2>\n<ul>\n  <li>Use one clear page title and a sensible heading order.</li>\n  <li>Write link text that explains the destination.</li>\n  <li>Provide <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>alt</span></span></code></span> text for meaningful images and empty <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>alt</span></span></code></span> for decorative images.</li>\n  <li>Add captions or nearby explanations for charts, diagrams, embeds, and media.</li>\n  <li>Check the site with keyboard navigation and at narrow widths before publishing.</li>\n</ul>\n<h2 id=\"audited-surface\">Audited surface</h2>\n<p>The official audit covers Core/HonoX rendering, generated scaffolds and presets, official Themes (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>default</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>minimal</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>gruvbox</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tokyonight</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>sakura</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rerurate</span></span></code></span>), and official UI-generating Plugins including search, color mode, UX helpers, table of contents, lightbox, gallery, local graph, garden explorer, code tabs, code enhance, share, properties, recent/related posts, taxonomy, query/dataview/bases, flashcards, kanban, media, and diagram/visual Plugins.</p>\n","summary":"Accessibility Riebeckite aims to follow WCAG 2.2 AA guidance, but it does not make a blanket compliance claim. The accessibility of a published site depends on ","tags":[]},{"id":"https://riebeckite.dev/docs/accessibility","url":"https://riebeckite.dev/docs/accessibility","title":"アクセシビリティ","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"アクセシビリティ\">アクセシビリティ</h1>\n<p>Riebeckiteでは、キーボード操作やスクリーンリーダー、文字の見やすさなど、さまざまな環境でサイトを利用できることを大切にしています。</p>\n<p>WCAG 2.2 AAを参考にしていますが、最終的なサイトのアクセシビリティは、使用するThemeやPlugin、記事の内容、独自に追加したコードによっても変わります。</p>\n<h2 id=\"riebeckiteが対応していること\">Riebeckiteが対応していること</h2>\n<p>Riebeckiteが生成する基本的なページでは、ブラウザや支援技術がページの構造や操作方法を正しく理解できるようにしています。</p>\n<p>たとえば、</p>\n<ul>\n  <li>ページの言語やタイトルを正しく設定する</li>\n  <li>ヘッダー、本文、ナビゲーションなどを適切に区別する</li>\n  <li>ページ移動にはリンク、操作にはボタンを使う</li>\n  <li>キーボードでも操作できるようにする</li>\n  <li>選択中や開閉状態などを支援技術にも伝える</li>\n  <li>アニメーションを減らす設定をできるだけ尊重する</li>\n</ul>\n<p>といった対応を行っています。</p>\n<p>画像については、Riebeckiteが内容を推測して説明文を自動生成することはありません。意味のある画像には、記事やPlugin側で適切な説明を付けてください。</p>\n<h2 id=\"pluginを作る場合\">Pluginを作る場合</h2>\n<p>ボタンやメニューなどのUIを持つPluginでは、マウス以外でも操作できるようにしてください。</p>\n<p>基本的には、次の点を意識すれば十分です。</p>\n<ul>\n  <li>ページ移動にはリンク、操作にはボタンを使う</li>\n  <li>クリックできる <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>div</span></span></code></span> や <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>span</span></span></code></span> はできるだけ使わない</li>\n  <li>アイコンだけのボタンには、何をするボタンなのか分かる名前を付ける</li>\n  <li>キーボードでも操作できるようにする</li>\n  <li>開閉するUIでは、現在の状態が支援技術にも分かるようにする</li>\n  <li>ダイアログやLightboxは <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Escape</span></span></code></span> でも閉じられるようにする</li>\n  <li>アニメーションを減らす設定を尊重する</li>\n</ul>\n<p>Graph、Chart、Mapなどの視覚的なコンテンツでは、複雑な図そのものを無理に読み上げ可能にするより、必要に応じて説明文やキャプション、元データなどの代替情報を用意してください。</p>\n<h2 id=\"themeを作る場合\">Themeを作る場合</h2>\n<p>Themeでは、特に「見やすさ」と「操作している場所の分かりやすさ」が重要です。</p>\n<p>次の点に注意してください。</p>\n<ul>\n  <li>キーボード操作中の選択位置が見えるようにする</li>\n  <li>文字と背景の色を十分に見分けられるようにする</li>\n  <li>リンクを色だけで区別しない</li>\n  <li>選択中やエラーなどの状態を色だけで表現しない</li>\n  <li>文字を大きくしても内容が切れないようにする</li>\n  <li>Light/Darkの両方で読みやすさを確認する</li>\n  <li>必要のない大きなアニメーションを避ける</li>\n</ul>\n<p>特に <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>outline: none</span></span></code></span> などでキーボード操作時の表示を消す場合は、代わりに現在位置が分かる表示を用意してください。</p>\n<h2 id=\"記事を書くとき\">記事を書くとき</h2>\n<p>記事側でも、少し意識するだけで読みやすさを改善できます。</p>\n<ul>\n  <li>内容が分かるページタイトルを付ける</li>\n  <li>見出しを自然な順番で使う</li>\n  <li>リンク先が分かる文章にする</li>\n  <li>意味のある画像には説明を付ける</li>\n  <li>装飾だけの画像には説明を付けない</li>\n  <li>図や動画などには、必要に応じて近くに説明を書く</li>\n</ul>\n<p>公開前に、マウスを使わず <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Tab</span></span></code></span> キーだけでも主要な操作ができるか確認してみるのもおすすめです。</p>\n<h2 id=\"riebeckiteでの確認\">Riebeckiteでの確認</h2>\n<p>Riebeckiteでは、標準のページ構造だけでなく、公式ThemeやUIを持つ公式Pluginについてもアクセシビリティを確認しています。</p>\n<p>Search、Color Mode、目次、Lightbox、Gallery、Graphなどの操作を伴う機能や、各Themeでの文字・リンク・フォーカス表示などが主な対象です。</p>\n<p>ただし、Riebeckiteを使っているだけで、すべてのサイトが自動的にアクセシブルになるわけではありません。</p>\n<p>使用するThemeやPlugin、記事の内容も含めて、サイト全体で使いやすさを考えることが大切です。</p>\n","summary":"アクセシビリティ Riebeckiteでは、キーボード操作やスクリーンリーダー、文字の見やすさなど、さまざまな環境でサイトを利用できることを大切にしています。 WCAG 2.2 AAを参考にしていますが、最終的なサイトのアクセシビリティは、使用するThemeやPlugin、記事の内容、独自に追加したコードによっても変わ","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/","url":"https://riebeckite.dev/en/docs/framework/","title":"Framework","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"framework\">Framework</h1>\n<p>Framework documentation is for people who want to understand or develop Riebeckite itself. If you only want to build a site, start with <a href=\"/en/docs/getting-started/\">Getting Started</a> and use <a href=\"/en/docs/reference/\">Reference</a> when you need exact fields or commands.</p>\n<h2 id=\"read-by-responsibility\">Read by responsibility</h2>\n<table>\n  <thead>\n    <tr>\n      <th>I want to understand…</th>\n      <th>Page</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Package ownership and dependency direction</td>\n      <td><a href=\"/en/docs/framework/architecture\">Architecture</a></td>\n    </tr>\n    <tr>\n      <td>How Markdown and assets become pages</td>\n      <td><a href=\"/en/docs/framework/content-system\">Content system</a></td>\n    </tr>\n    <tr>\n      <td>How plugins are resolved and run</td>\n      <td><a href=\"/en/docs/framework/plugin-system\">Plugin system</a></td>\n    </tr>\n    <tr>\n      <td>How plugins provide standalone pages</td>\n      <td><a href=\"/en/docs/framework/page-system\">Page system</a></td>\n    </tr>\n    <tr>\n      <td>How themes interact with CSS and plugin output</td>\n      <td><a href=\"/en/docs/framework/theme-system\">Theme system</a></td>\n    </tr>\n    <tr>\n      <td>Incremental builds, build state, and plugin cache</td>\n      <td><a href=\"/en/docs/framework/build-system\">Build system</a></td>\n    </tr>\n    <tr>\n      <td>How plugins declare build dependencies</td>\n      <td><a href=\"/en/docs/framework/build-dependency\">Build dependency contract</a></td>\n    </tr>\n    <tr>\n      <td>The HonoX/Vite adapter boundary</td>\n      <td><a href=\"/en/docs/framework/honox-integration\">HonoX integration</a></td>\n    </tr>\n    <tr>\n      <td>Diagnostics and Doctor</td>\n      <td><a href=\"/en/docs/framework/diagnostics\">Diagnostics</a></td>\n    </tr>\n    <tr>\n      <td>Read-only inspection commands</td>\n      <td><a href=\"/en/docs/framework/inspector\">Inspector</a></td>\n    </tr>\n    <tr>\n      <td>Logger, Tracer, and Profiler</td>\n      <td><a href=\"/en/docs/framework/observability\">Observability</a></td>\n    </tr>\n    <tr>\n      <td>Test layout and golden files</td>\n      <td><a href=\"/en/docs/framework/testing\">Testing</a></td>\n    </tr>\n    <tr>\n      <td>The monorepo development workflow</td>\n      <td><a href=\"/en/docs/framework/development\">Development</a></td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"responsibility-boundaries\">Responsibility boundaries</h2>\n<ul>\n  <li><strong>Core</strong> owns content-processing contracts and orchestration. It does not depend on HonoX, Vite, a specific plugin, or a theme.</li>\n  <li><strong>Plugins</strong> extend Markdown, HTML, metadata, assets, client behavior, endpoints, SEO, diagnostics, and graph behavior.</li>\n  <li><strong>Themes</strong> own appearance: tokens, CSS, stable-hook styling, and safe theme attributes.</li>\n  <li><strong>Integrations</strong> connect Core to a web framework and bundler. The current supported adapter is HonoX/Vite.</li>\n  <li><strong>Applications</strong> hold site-specific routes, components, and islands.</li>\n  <li><strong>CLI</strong> is build-time tooling. Runtime Cloudflare Workers code must not access build state or filesystem caches.</li>\n</ul>\n<h2 id=\"for-repository-development\">For repository development</h2>\n<p>The Riebeckite monorepo clone workflow is intentionally here, not in Getting Started. Use it only when you are changing Riebeckite itself: <a href=\"/en/docs/framework/development\">Development</a>.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Framework Framework documentation is for people who want to understand or develop Riebeckite itself. If you only want to build a site, start with Getting Starte","tags":[]},{"id":"https://riebeckite.dev/docs/framework/","url":"https://riebeckite.dev/docs/framework/","title":"Framework","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"framework\">Framework</h1>\n<p>この章では、<strong>Riebeckite 自体がどのように動いているか</strong>を説明します。</p>\n<p>対象となるのは、</p>\n<ul>\n  <li>Riebeckite の内部構造を理解したい人</li>\n  <li>Plugin や Theme の仕組みを詳しく知りたい人</li>\n  <li>Riebeckite 本体を開発・変更したい人</li>\n</ul>\n<p>です。</p>\n<p>Riebeckite を使って自分のサイトを作りたいだけなら、この章を最初から読む必要はありません。<a href=\"/docs/getting-started/\">Getting Started</a> から始めてください。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-fti9dx\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 967.3125px;\" viewBox=\"0 0 967.3125 226\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-fti9dx{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-fti9dx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-fti9dx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-fti9dx .error-icon{fill:#552222;}#rr-mermaid-fti9dx .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-fti9dx .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-fti9dx .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-fti9dx .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-fti9dx .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-fti9dx .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-fti9dx .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-fti9dx .marker{fill:#333333;stroke:#333333;}#rr-mermaid-fti9dx .marker.cross{stroke:#333333;}#rr-mermaid-fti9dx svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-fti9dx p{margin:0;}#rr-mermaid-fti9dx .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-fti9dx .cluster-label text{fill:#333;}#rr-mermaid-fti9dx .cluster-label span{color:#333;}#rr-mermaid-fti9dx .cluster-label span p{background-color:transparent;}#rr-mermaid-fti9dx .label text,#rr-mermaid-fti9dx span{fill:#333;color:#333;}#rr-mermaid-fti9dx .node rect,#rr-mermaid-fti9dx .node circle,#rr-mermaid-fti9dx .node ellipse,#rr-mermaid-fti9dx .node polygon,#rr-mermaid-fti9dx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-fti9dx .rough-node .label text,#rr-mermaid-fti9dx .node .label text,#rr-mermaid-fti9dx .image-shape .label,#rr-mermaid-fti9dx .icon-shape .label{text-anchor:middle;}#rr-mermaid-fti9dx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-fti9dx .rough-node .label,#rr-mermaid-fti9dx .node .label,#rr-mermaid-fti9dx .image-shape .label,#rr-mermaid-fti9dx .icon-shape .label{text-align:center;}#rr-mermaid-fti9dx .node.clickable{cursor:pointer;}#rr-mermaid-fti9dx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-fti9dx .arrowheadPath{fill:#333333;}#rr-mermaid-fti9dx .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-fti9dx .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-fti9dx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-fti9dx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-fti9dx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-fti9dx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-fti9dx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-fti9dx .cluster text{fill:#333;}#rr-mermaid-fti9dx .cluster span{color:#333;}#rr-mermaid-fti9dx .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-fti9dx .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-fti9dx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-fti9dx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-fti9dx rect.text{fill:none;stroke-width:0;}#rr-mermaid-fti9dx .icon-shape,#rr-mermaid-fti9dx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-fti9dx .icon-shape p,#rr-mermaid-fti9dx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-fti9dx .icon-shape .label rect,#rr-mermaid-fti9dx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-fti9dx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-fti9dx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-fti9dx .node .neo-node{stroke:#9370DB;}#rr-mermaid-fti9dx [data-look=\"neo\"].node rect,#rr-mermaid-fti9dx [data-look=\"neo\"].cluster rect,#rr-mermaid-fti9dx [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fti9dx [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-fti9dx [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-fti9dx [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fti9dx [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-fti9dx [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fti9dx [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-fti9dx [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fti9dx [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fti9dx :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-fti9dx_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-fti9dx_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M202.703,109L206.87,109C211.036,109,219.37,109,227.036,109C234.703,109,241.703,109,245.203,109L248.703,109\" id=\"rr-mermaid-fti9dx-L_Start_Q_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Start_Q_0\" data-points=\"W3sieCI6MjAyLjcwMzEyNSwieSI6MTA5fSx7IngiOjIyNy43MDMxMjUsInkiOjEwOX0seyJ4IjoyNTIuNzAzMTI1LCJ5IjoxMDl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path><path d=\"M359.387,89.684L379.998,80.57C400.609,71.456,441.832,53.228,479.169,44.114C516.505,35,549.956,35,566.681,35L583.406,35\" id=\"rr-mermaid-fti9dx-L_Q_GettingStarted_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_GettingStarted_0\" data-points=\"W3sieCI6MzU5LjM4NjkwNDQ5Njk3MzQ0LCJ5Ijo4OS42ODM3Nzk0OTY5NzM0M30seyJ4Ijo0ODMuMDU0Njg3NSwieSI6MzV9LHsieCI6NTg3LjQwNjI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path><path d=\"M378.703,109L396.095,109C413.487,109,448.271,109,484.697,112.035C521.123,115.069,559.192,121.139,578.226,124.174L597.261,127.208\" id=\"rr-mermaid-fti9dx-L_Q_Framework_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Framework_0\" data-points=\"W3sieCI6Mzc4LjcwMzEyNSwieSI6MTA5fSx7IngiOjQ4My4wNTQ2ODc1LCJ5IjoxMDl9LHsieCI6NjAxLjIxMDkzNzUsInkiOjEyNy44MzgyODEwODc4MTR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path><path d=\"M363.768,123.935L383.649,130.112C403.53,136.29,443.293,148.645,482.204,152.597C521.116,156.55,559.177,152.1,578.207,149.875L597.238,147.65\" id=\"rr-mermaid-fti9dx-L_Q_Framework_2\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Framework_2\" data-points=\"W3sieCI6MzYzLjc2ODE5NjA1NDU5OTg1LCJ5IjoxMjMuOTM0OTI4OTQ1NDAwMTV9LHsieCI6NDgzLjA1NDY4NzUsInkiOjE2MX0seyJ4Ijo2MDEuMjEwOTM3NSwieSI6MTQ3LjE4NTI2MDUzNTYwMzA4fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path><path d=\"M727.718,112L736.436,107.833C745.155,103.667,762.593,95.333,775.554,91.167C788.516,87,797,87,801.242,87L805.484,87\" id=\"rr-mermaid-fti9dx-L_Framework_Architecture_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Framework_Architecture_0\" data-points=\"W3sieCI6NzI3LjcxNzU0ODA3NjkyMzEsInkiOjExMn0seyJ4Ijo3ODAuMDMxMjUsInkiOjg3fSx7IngiOjgwOS40ODQzNzUsInkiOjg3fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path><path d=\"M727.718,166L736.436,170.167C745.155,174.333,762.593,182.667,774.812,186.833C787.031,191,794.031,191,797.531,191L801.031,191\" id=\"rr-mermaid-fti9dx-L_Framework_Development_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Framework_Development_0\" data-points=\"W3sieCI6NzI3LjcxNzU0ODA3NjkyMzEsInkiOjE2Nn0seyJ4Ijo3ODAuMDMxMjUsInkiOjE5MX0seyJ4Ijo4MDUuMDMxMjUsInkiOjE5MX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fti9dx_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Start_Q_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(483.0546875, 35)\"><g class=\"label\" data-id=\"L_Q_GettingStarted_0\" transform=\"translate(-36, -12)\"><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>サイトを作る</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(483.0546875, 109)\"><g class=\"label\" data-id=\"L_Q_Framework_0\" transform=\"translate(-48, -12)\"><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>仕組みを理解する</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(480.2131, 160.11705)\"><g class=\"label\" data-id=\"L_Q_Framework_2\" transform=\"translate(-79.3515625, -12)\"><foreignObject width=\"158.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Riebeckite本体を開発する</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Framework_Architecture_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Framework_Development_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-Start-0\" data-look=\"classic\" transform=\"translate(105.3515625, 109)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.3515625\" y=\"-27\" width=\"194.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.3515625, -12)\"><rect></rect><foreignObject width=\"134.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckiteを使いたい</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-Q-2\" data-look=\"classic\" transform=\"translate(315.703125, 109)\"><polygon points=\"63,0 126,-63 63,-126 0,-63\" class=\"label-container\" transform=\"translate(-62.5, 63)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何をしたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-GettingStarted-4\" data-look=\"classic\" transform=\"translate(671.21875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-Framework-6\" data-look=\"classic\" transform=\"translate(671.21875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.0078125\" y=\"-27\" width=\"140.015625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.0078125, -12)\"><rect></rect><foreignObject width=\"80.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-Architecture-10\" data-look=\"classic\" transform=\"translate(882.171875, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.6875\" y=\"-27\" width=\"145.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.6875, -12)\"><rect></rect><foreignObject width=\"85.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Architecture</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fti9dx-flowchart-Development-12\" data-look=\"classic\" transform=\"translate(882.171875, 191)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.140625\" y=\"-27\" width=\"154.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.140625, -12)\"><rect></rect><foreignObject width=\"94.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Development</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-fti9dx-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-fti9dx-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Start[\"Riebeckiteを使いたい\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Start --> Q{\"何をしたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Q -->|\"サイトを作る\"| GettingStarted[\"Getting Started\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Q -->|\"仕組みを理解する\"| Framework[\"Framework\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Q -->|\"Riebeckite本体を開発する\"| Framework</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Framework --> Architecture[\"Architecture\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Framework --> Development[\"Development\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"どこから読む\">どこから読む？</h2>\n<p>目的に合わせて、必要なページだけ読めます。</p>\n<table>\n  <thead>\n    <tr>\n      <th>知りたいこと</th>\n      <th>ページ</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Riebeckite 全体の構造</td>\n      <td><a href=\"/docs/framework/architecture\">Architecture</a></td>\n    </tr>\n    <tr>\n      <td>Markdown や Content がどう処理されるか</td>\n      <td><a href=\"/docs/framework/content-system\">Content System</a></td>\n    </tr>\n    <tr>\n      <td>Plugin がどう動くか</td>\n      <td><a href=\"/docs/framework/plugin-system\">Plugin System</a></td>\n    </tr>\n    <tr>\n      <td>Plugin が独立したページを提供する仕組み</td>\n      <td><a href=\"/docs/framework/page-system\">Page System</a></td>\n    </tr>\n    <tr>\n      <td>Theme が見た目を変更する仕組み</td>\n      <td><a href=\"/docs/framework/theme-system\">Theme System</a></td>\n    </tr>\n    <tr>\n      <td>Build と Incremental Build の仕組み</td>\n      <td><a href=\"/docs/framework/build-system\">Build System</a></td>\n    </tr>\n    <tr>\n      <td>Plugin が build dependency を宣言する仕組み</td>\n      <td><a href=\"/docs/framework/build-dependency\">Build Dependency Contract</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite と HonoX / Vite の接続</td>\n      <td><a href=\"/docs/framework/honox-integration\">HonoX Integration</a></td>\n    </tr>\n    <tr>\n      <td>設定や Content の問題を調べる</td>\n      <td><a href=\"/docs/framework/diagnostics\">Diagnostics</a></td>\n    </tr>\n    <tr>\n      <td>解決済みの設定や状態を確認する</td>\n      <td><a href=\"/docs/framework/inspector\">Inspector</a></td>\n    </tr>\n    <tr>\n      <td>Log / Trace / Performance を調べる</td>\n      <td><a href=\"/docs/framework/observability\">Observability</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite のテストを書く・実行する</td>\n      <td><a href=\"/docs/framework/testing\">Testing</a></td>\n    </tr>\n    <tr>\n      <td>Riebeckite 本体を開発する</td>\n      <td><a href=\"/docs/framework/development\">Development</a></td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"最初に内部構造を理解したい場合\">最初に内部構造を理解したい場合</h2>\n<p>まず <a href=\"/docs/framework/architecture\">Architecture</a> を読むのがおすすめです。</p>\n<p>Riebeckite は大きく、</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-eimd3l\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 467.2265625px;\" viewBox=\"0 0 467.2265625 278\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-eimd3l{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-eimd3l .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-eimd3l .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-eimd3l .error-icon{fill:#552222;}#rr-mermaid-eimd3l .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-eimd3l .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-eimd3l .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-eimd3l .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-eimd3l .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-eimd3l .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-eimd3l .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-eimd3l .marker{fill:#333333;stroke:#333333;}#rr-mermaid-eimd3l .marker.cross{stroke:#333333;}#rr-mermaid-eimd3l svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-eimd3l p{margin:0;}#rr-mermaid-eimd3l .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-eimd3l .cluster-label text{fill:#333;}#rr-mermaid-eimd3l .cluster-label span{color:#333;}#rr-mermaid-eimd3l .cluster-label span p{background-color:transparent;}#rr-mermaid-eimd3l .label text,#rr-mermaid-eimd3l span{fill:#333;color:#333;}#rr-mermaid-eimd3l .node rect,#rr-mermaid-eimd3l .node circle,#rr-mermaid-eimd3l .node ellipse,#rr-mermaid-eimd3l .node polygon,#rr-mermaid-eimd3l .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-eimd3l .rough-node .label text,#rr-mermaid-eimd3l .node .label text,#rr-mermaid-eimd3l .image-shape .label,#rr-mermaid-eimd3l .icon-shape .label{text-anchor:middle;}#rr-mermaid-eimd3l .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-eimd3l .rough-node .label,#rr-mermaid-eimd3l .node .label,#rr-mermaid-eimd3l .image-shape .label,#rr-mermaid-eimd3l .icon-shape .label{text-align:center;}#rr-mermaid-eimd3l .node.clickable{cursor:pointer;}#rr-mermaid-eimd3l .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-eimd3l .arrowheadPath{fill:#333333;}#rr-mermaid-eimd3l .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-eimd3l .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-eimd3l .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-eimd3l .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-eimd3l .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-eimd3l .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-eimd3l .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-eimd3l .cluster text{fill:#333;}#rr-mermaid-eimd3l .cluster span{color:#333;}#rr-mermaid-eimd3l .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-eimd3l .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-eimd3l div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-eimd3l .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-eimd3l rect.text{fill:none;stroke-width:0;}#rr-mermaid-eimd3l .icon-shape,#rr-mermaid-eimd3l .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-eimd3l .icon-shape p,#rr-mermaid-eimd3l .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-eimd3l .icon-shape .label rect,#rr-mermaid-eimd3l .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-eimd3l .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-eimd3l .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-eimd3l .node .neo-node{stroke:#9370DB;}#rr-mermaid-eimd3l [data-look=\"neo\"].node rect,#rr-mermaid-eimd3l [data-look=\"neo\"].cluster rect,#rr-mermaid-eimd3l [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eimd3l [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-eimd3l [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-eimd3l [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eimd3l [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-eimd3l [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eimd3l [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-eimd3l [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eimd3l [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eimd3l :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-eimd3l_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-eimd3l_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M77.141,216L77.141,211.833C77.141,207.667,77.141,199.333,77.141,191.667C77.141,184,77.141,177,77.141,173.5L77.141,170\" id=\"rr-mermaid-eimd3l-L_App_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_App_Integration_0\" data-points=\"W3sieCI6NzcuMTQwNjI1LCJ5IjoyMTZ9LHsieCI6NzcuMTQwNjI1LCJ5IjoxOTF9LHsieCI6NzcuMTQwNjI1LCJ5IjoxNjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eimd3l_flowchart-v2-pointEnd)\"></path><path d=\"M77.141,112L77.141,107.833C77.141,103.667,77.141,95.333,96.954,85.108C116.767,74.882,156.393,62.765,176.206,56.706L196.019,50.647\" id=\"rr-mermaid-eimd3l-L_Integration_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Core_0\" data-points=\"W3sieCI6NzcuMTQwNjI1LCJ5IjoxMTJ9LHsieCI6NzcuMTQwNjI1LCJ5Ijo4N30seyJ4IjoxOTkuODQzNzUsInkiOjQ5LjQ3NzYyNTY1NDY5MDgwNH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eimd3l_flowchart-v2-pointEnd)\"></path><path d=\"M247.188,112L247.188,107.833C247.188,103.667,247.188,95.333,247.188,87.667C247.188,80,247.188,73,247.188,69.5L247.188,66\" id=\"rr-mermaid-eimd3l-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6MjQ3LjE4NzUsInkiOjExMn0seyJ4IjoyNDcuMTg3NSwieSI6ODd9LHsieCI6MjQ3LjE4NzUsInkiOjYyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eimd3l_flowchart-v2-pointEnd)\"></path><path d=\"M404.328,112L404.328,107.833C404.328,103.667,404.328,95.333,386.662,85.321C368.995,75.308,333.662,63.616,315.995,57.769L298.329,51.923\" id=\"rr-mermaid-eimd3l-L_Theme_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Core_0\" data-points=\"W3sieCI6NDA0LjMyODEyNSwieSI6MTEyfSx7IngiOjQwNC4zMjgxMjUsInkiOjg3fSx7IngiOjI5NC41MzEyNSwieSI6NTAuNjY2Njk5ODExMDc2ODZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eimd3l_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_App_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-eimd3l-flowchart-App-0\" data-look=\"classic\" transform=\"translate(77.140625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eimd3l-flowchart-Integration-1\" data-look=\"classic\" transform=\"translate(77.140625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.8046875\" y=\"-27\" width=\"135.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.8046875, -12)\"><rect></rect><foreignObject width=\"75.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eimd3l-flowchart-Plugin-2\" data-look=\"classic\" transform=\"translate(247.1875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eimd3l-flowchart-Theme-3\" data-look=\"classic\" transform=\"translate(404.328125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.8984375\" y=\"-27\" width=\"109.796875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.8984375, -12)\"><rect></rect><foreignObject width=\"49.796875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eimd3l-flowchart-Core-4\" data-look=\"classic\" transform=\"translate(247.1875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.34375\" y=\"-27\" width=\"94.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.34375, -12)\"><rect></rect><foreignObject width=\"34.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-eimd3l-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-eimd3l-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart BT</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    App[\"Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Integration[\"Integration\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Theme[\"Theme\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Core[\"Core\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    App --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Integration --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Theme --> Core</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>という責務に分かれています。</p>\n<p>Architecture を読んだあと、変更したい領域に応じて Content System、Plugin System、Theme System などへ進むと理解しやすくなります。</p>\n<h2 id=\"riebeckite-本体を開発する場合\">Riebeckite 本体を開発する場合</h2>\n<p>Riebeckite repository を clone して Framework 自体を変更する場合は、<a href=\"/docs/framework/development\">Development</a> を参照してください。</p>\n<p>Development では、</p>\n<ul>\n  <li>monorepo の clone</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm install</span></span></code></span></li>\n  <li>root の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm</span></span></code></span> コマンド</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/*</span></span></code></span> の構成</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></li>\n  <li>Package ごとのテスト</li>\n  <li>Scaffold / External Site の検証</li>\n</ul>\n<p>などを扱います。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Riebeckite repository 自体を開発する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    → Framework / Development</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>Riebeckite を使ってサイトを作る</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    → Getting Started</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> は Riebeckite の Documentation / Reference Application です。</p>\n<p>一般ユーザーが Riebeckite を使うために <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> をコピーしたり、Riebeckite monorepo を clone したりする必要はありません。</p>\n<h2 id=\"この章の境界\">この章の境界</h2>\n<p>Framework 章では、Riebeckite の<strong>内部設計と Framework 開発</strong>を扱います。</p>\n<p>一方、</p>\n<ul>\n  <li>Site の作成</li>\n  <li>Content の追加</li>\n  <li>Plugin / Theme の設定</li>\n  <li>Deploy</li>\n</ul>\n<p>といった通常の利用方法は <a href=\"/docs/getting-started/\">Getting Started</a> や Guides で説明します。</p>\n<p>この境界を分けることで、Riebeckite を使うだけの人が Framework 内部の知識を覚えなくてもサイトを作れるようにしています。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Framework この章では、 Riebeckite 自体がどのように動いているか を説明します。 対象となるのは、 Riebeckite の内部構造を理解したい人 Plugin や Theme の仕組みを詳しく知りたい人 Riebeckite 本体を開発・変更したい人 です。 Riebeckite を使って自分のサ","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/architecture","url":"https://riebeckite.dev/en/docs/framework/architecture","title":"architecture.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"architecture\">Architecture</h1>\n<h2 id=\"package-ownership\">Package ownership</h2>\n<p>Riebeckite is a pnpm workspace with intentionally one-way dependencies.</p>\n<table>\n  <thead>\n    <tr>\n      <th>Area</th>\n      <th>Owns</th>\n      <th>Must not own</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/core</span></span></code></span></td>\n      <td>portable contracts, configuration, content orchestration, manifests, graphs, pipelines, plugin runtime, observability, and theme contracts</td>\n      <td>HonoX/Vite APIs, a named plugin, or application UI</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/plugins/*</span></span></code></span></td>\n      <td>reusable Markdown, HTML, metadata, asset, diagnostic, browser, and Page Type capabilities</td>\n      <td>application routes or framework-specific routing</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/integrations/*</span></span></code></span></td>\n      <td>framework, bundler, and platform adapters</td>\n      <td>reusable domain policy already represented by Core</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/themes/*</span></span></code></span></td>\n      <td>presentation configuration and CSS</td>\n      <td>components, routes, plugins, or content loading</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></td>\n      <td>the concrete routes, islands, application components, and Worker deployment</td>\n      <td>reusable framework contracts</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/cli</span></span></code></span></td>\n      <td>Node-oriented commands and build tooling</td>\n      <td>request-time application behavior</td>\n    </tr>\n  </tbody>\n</table>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Application -> Integration -> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>Plugin --------------------> Core contracts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>Theme ---------------------> Core theme contract</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>CLI -----------------------> Core and integration APIs</span></span></code></pre>\n  </div>\n</figure>\n<p>Core must never gain a reverse dependency on HonoX, a theme, a plugin, or the application. Put a concern at the first layer that can own it without importing an outer layer.</p>\n<h2 id=\"content-and-rendering-flow\">Content and rendering flow</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> discovers and reads source material and supplies source metadata. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> interprets that material, resolves each entry's public location, runs the pipeline and plugin hooks, creates the manifest and graph, and coordinates content-related work. Public URLs come from the resolved location (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager.getContentLocations()</span></span></code></span>: the Core default resolver, then <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentLocations</span></span></code></span> plugin hooks); consumers read the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span> and never derive a URL from a slug or filesystem path. A feature that needs files should use the source contract rather than adding a second filesystem scanner.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>ContentSource -> ContentManager -> resolve public locations</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>                                      |-> parse/process pipeline</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>                                      |-> plugin hooks</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>                                      |-> manifest and content graph</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>                                      `-> integration/application rendering</span></span></code></pre>\n  </div>\n</figure>\n<p>Plugins may extend the process through published contracts; they do not become a hidden second application layer. A Page Type contributes a framework-independent body and public paths, while the integration resolves it through a generic route and the application retains the document frame. Themes only style the rendered result through theme configuration, CSS tokens, stable hooks, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-*</span></span></code></span> attributes; they do not branch on Page Type IDs. See <a href=\"/en/docs/framework/page-system\">Page system</a>.</p>\n<h2 id=\"build-time-and-runtime-boundary\">Build-time and runtime boundary</h2>\n<p>The CLI, Inspector, Doctor, profiler traces, incremental state at <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/build/content-state.json</span></span></code></span>, and filesystem plugin caches belong to Node/build time. They are not mutable dependencies of the Cloudflare Workers request runtime. Runtime code consumes generated application output and stable content data, not a writable <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> directory.</p>\n<p>This boundary keeps deployments reproducible: a failed build does not mutate the previous valid state, and a request cannot depend on local files that do not exist in a Worker.</p>\n<h2 id=\"choosing-a-location\">Choosing a location</h2>\n<ul>\n  <li>Add a portable type or lifecycle contract to <strong>Core</strong>.</li>\n  <li>Add reusable content behavior to a <strong>plugin</strong>.</li>\n  <li>Add Vite, HonoX, or platform glue to an <strong>integration</strong>.</li>\n  <li>Add a route, page composition, or island to <strong><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></strong>.</li>\n  <li>Add visual tokens and CSS only to a <strong>theme</strong>.</li>\n</ul>\n<p>See <a href=\"/en/docs/framework/content-system\">Content system</a>, <a href=\"/en/docs/framework/plugin-system\">Plugin system</a>, <a href=\"/en/docs/framework/theme-system\">Theme system</a>, and <a href=\"/en/docs/framework/honox-integration\">HonoX integration</a> before changing a boundary.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Architecture Package ownership Riebeckite is a pnpm workspace with intentionally one-way dependencies. Area Owns Must not own packages/core portable contracts, ","tags":[]},{"id":"https://riebeckite.dev/docs/framework/architecture","url":"https://riebeckite.dev/docs/framework/architecture","title":"architecture","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"architecture\">Architecture</h1>\n<p>Riebeckite は、Core を中心に Plugin、Integration、Theme、Application を分離した pnpm workspace です。</p>\n<p>重要な原則は、<strong>内側の package が外側の実装を知らないこと</strong>です。</p>\n<p>たとえば Core はコンテンツ処理の仕組みを提供しますが、</p>\n<ul>\n  <li>HonoX でどう表示するか</li>\n  <li>Vite でどう build するか</li>\n  <li>どの Plugin がインストールされているか</li>\n  <li>Site がどんな UI を持つか</li>\n</ul>\n<p>といったことは知りません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-p96bo0\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 797.71875px;\" viewBox=\"0 0 797.71875 350\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-p96bo0{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-p96bo0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-p96bo0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-p96bo0 .error-icon{fill:#552222;}#rr-mermaid-p96bo0 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-p96bo0 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-p96bo0 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-p96bo0 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-p96bo0 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-p96bo0 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-p96bo0 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-p96bo0 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-p96bo0 .marker.cross{stroke:#333333;}#rr-mermaid-p96bo0 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-p96bo0 p{margin:0;}#rr-mermaid-p96bo0 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-p96bo0 .cluster-label text{fill:#333;}#rr-mermaid-p96bo0 .cluster-label span{color:#333;}#rr-mermaid-p96bo0 .cluster-label span p{background-color:transparent;}#rr-mermaid-p96bo0 .label text,#rr-mermaid-p96bo0 span{fill:#333;color:#333;}#rr-mermaid-p96bo0 .node rect,#rr-mermaid-p96bo0 .node circle,#rr-mermaid-p96bo0 .node ellipse,#rr-mermaid-p96bo0 .node polygon,#rr-mermaid-p96bo0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-p96bo0 .rough-node .label text,#rr-mermaid-p96bo0 .node .label text,#rr-mermaid-p96bo0 .image-shape .label,#rr-mermaid-p96bo0 .icon-shape .label{text-anchor:middle;}#rr-mermaid-p96bo0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-p96bo0 .rough-node .label,#rr-mermaid-p96bo0 .node .label,#rr-mermaid-p96bo0 .image-shape .label,#rr-mermaid-p96bo0 .icon-shape .label{text-align:center;}#rr-mermaid-p96bo0 .node.clickable{cursor:pointer;}#rr-mermaid-p96bo0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-p96bo0 .arrowheadPath{fill:#333333;}#rr-mermaid-p96bo0 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-p96bo0 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-p96bo0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-p96bo0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-p96bo0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-p96bo0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-p96bo0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-p96bo0 .cluster text{fill:#333;}#rr-mermaid-p96bo0 .cluster span{color:#333;}#rr-mermaid-p96bo0 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-p96bo0 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-p96bo0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-p96bo0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-p96bo0 rect.text{fill:none;stroke-width:0;}#rr-mermaid-p96bo0 .icon-shape,#rr-mermaid-p96bo0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-p96bo0 .icon-shape p,#rr-mermaid-p96bo0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-p96bo0 .icon-shape .label rect,#rr-mermaid-p96bo0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-p96bo0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-p96bo0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-p96bo0 .node .neo-node{stroke:#9370DB;}#rr-mermaid-p96bo0 [data-look=\"neo\"].node rect,#rr-mermaid-p96bo0 [data-look=\"neo\"].cluster rect,#rr-mermaid-p96bo0 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-p96bo0 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-p96bo0 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-p96bo0 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-p96bo0 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-p96bo0 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-p96bo0 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-p96bo0 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-p96bo0 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-p96bo0 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-p96bo0_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-p96bo0_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M111.164,264L111.164,259.833C111.164,255.667,111.164,247.333,111.712,239.659C112.26,231.984,113.357,224.968,113.905,221.46L114.453,217.952\" id=\"rr-mermaid-p96bo0-L_App_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_App_Integration_0\" data-points=\"W3sieCI6MTExLjE2NDA2MjUsInkiOjI2NH0seyJ4IjoxMTEuMTY0MDYyNSwieSI6MjM5fSx7IngiOjExNS4wNzAzMTI1LCJ5IjoyMTR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path><path d=\"M121.164,136L121.164,131.833C121.164,127.667,121.164,119.333,150.052,108.035C178.94,96.737,236.716,82.473,265.604,75.342L294.492,68.21\" id=\"rr-mermaid-p96bo0-L_Integration_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Core_0\" data-points=\"W3sieCI6MTIxLjE2NDA2MjUsInkiOjEzNn0seyJ4IjoxMjEuMTY0MDYyNSwieSI6MTExfSx7IngiOjI5OC4zNzUsInkiOjY3LjI1MTMzMzUxNDE0ODgxfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path><path d=\"M251.567,264L245.93,259.833C240.293,255.667,229.02,247.333,217.651,239.368C206.282,231.403,194.817,223.806,189.085,220.008L183.353,216.21\" id=\"rr-mermaid-p96bo0-L_CLI_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_CLI_Integration_0\" data-points=\"W3sieCI6MjUxLjU2NzE5OTcwNzAzMTI1LCJ5IjoyNjR9LHsieCI6MjE3Ljc0NjA5Mzc1LCJ5IjoyMzl9LHsieCI6MTgwLjAxODczNzc5Mjk2ODc1LCJ5IjoyMTR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path><path d=\"M310.422,264L311.073,259.833C311.724,255.667,313.026,247.333,313.677,232.5C314.328,217.667,314.328,196.333,314.328,175C314.328,153.667,314.328,132.333,318.151,117.964C321.974,103.594,329.62,96.189,333.444,92.486L337.267,88.783\" id=\"rr-mermaid-p96bo0-L_CLI_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_CLI_Core_0\" data-points=\"W3sieCI6MzEwLjQyMTg3NSwieSI6MjY0fSx7IngiOjMxNC4zMjgxMjUsInkiOjIzOX0seyJ4IjozMTQuMzI4MTI1LCJ5IjoxNzV9LHsieCI6MzE0LjMyODEyNSwieSI6MTExfSx7IngiOjM0MC4xMzk4OTI1NzgxMjUsInkiOjg2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path><path d=\"M446.484,136L446.484,131.833C446.484,127.667,446.484,119.333,442.661,111.464C438.838,103.594,431.192,96.189,427.369,92.486L423.546,88.783\" id=\"rr-mermaid-p96bo0-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6NDQ2LjQ4NDM3NSwieSI6MTM2fSx7IngiOjQ0Ni40ODQzNzUsInkiOjExMX0seyJ4Ijo0MjAuNjcyNjA3NDIxODc1LCJ5Ijo4Nn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path><path d=\"M691.68,136L691.68,131.833C691.68,127.667,691.68,119.333,654.126,107.445C616.572,95.557,541.464,80.115,503.91,72.393L466.356,64.672\" id=\"rr-mermaid-p96bo0-L_Theme_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Core_0\" data-points=\"W3sieCI6NjkxLjY3OTY4NzUsInkiOjEzNn0seyJ4Ijo2OTEuNjc5Njg3NSwieSI6MTExfSx7IngiOjQ2Mi40Mzc1LCJ5Ijo2My44NjYxOTk4MzQzNDk4M31d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-p96bo0_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_App_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_CLI_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_CLI_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-App-0\" data-look=\"classic\" transform=\"translate(111.1640625, 303)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-39\" width=\"138.28125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -24)\"><rect></rect><foreignObject width=\"78.28125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application<br>apps/web</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-Integration-1\" data-look=\"classic\" transform=\"translate(121.1640625, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.1640625\" y=\"-39\" width=\"226.328125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.1640625, -24)\"><rect></rect><foreignObject width=\"166.328125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration<br>packages/integrations/*</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-CLI-2\" data-look=\"classic\" transform=\"translate(304.328125, 303)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.0234375\" y=\"-39\" width=\"148.046875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.0234375, -24)\"><rect></rect><foreignObject width=\"88.046875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>CLI<br>packages/cli</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-Plugin-3\" data-look=\"classic\" transform=\"translate(446.484375, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.15625\" y=\"-39\" width=\"194.3125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.15625, -24)\"><rect></rect><foreignObject width=\"134.3125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin<br>packages/plugins/*</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-Theme-4\" data-look=\"classic\" transform=\"translate(691.6796875, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.0390625\" y=\"-39\" width=\"196.078125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.0390625, -24)\"><rect></rect><foreignObject width=\"136.078125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme<br>packages/themes/*</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-p96bo0-flowchart-Core-5\" data-look=\"classic\" transform=\"translate(380.40625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.03125\" y=\"-39\" width=\"164.0625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.03125, -24)\"><rect></rect><foreignObject width=\"104.0625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core<br>packages/core</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-p96bo0-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-p96bo0-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart BT</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    App[\"Application&#x3C;br/>apps/web\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Integration[\"Integration&#x3C;br/>packages/integrations/*\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    CLI[\"CLI&#x3C;br/>packages/cli\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Plugin[\"Plugin&#x3C;br/>packages/plugins/*\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Theme[\"Theme&#x3C;br/>packages/themes/*\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Core[\"Core&#x3C;br/>packages/core\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    App --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Integration --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    CLI --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    CLI --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Theme --> Core</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>矢印は依存方向です。</p>\n<p>Core から Plugin、Integration、Application などへの逆向きの依存は作りません。</p>\n<h1 id=\"package-の責務\">Package の責務</h1>\n<p>Riebeckite のコードは、責務ごとに package を分けています。</p>\n<table>\n  <thead>\n    <tr>\n      <th>場所</th>\n      <th>主な責務</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/core</span></span></code></span></td>\n      <td>Riebeckite の共通基盤</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/plugins/*</span></span></code></span></td>\n      <td>再利用可能な機能拡張</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/integrations/*</span></span></code></span></td>\n      <td>Framework / Bundler / Platform との接続</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/themes/*</span></span></code></span></td>\n      <td>Theme と CSS</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/cli</span></span></code></span></td>\n      <td>CLI と Node 上の Build Tooling</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></td>\n      <td>実際の Site Application</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"core\">Core</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/core</span></span></code></pre>\n  </div>\n</figure>\n<p>Core は、特定の Web framework に依存しない Riebeckite の基盤です。</p>\n<p>主に次の機能を所有します。</p>\n<ul>\n  <li>config</li>\n  <li>content orchestration</li>\n  <li>manifest</li>\n  <li>content graph</li>\n  <li>pipeline</li>\n  <li>Plugin runtime</li>\n  <li>observability</li>\n  <li>Theme contract</li>\n  <li>共通の型や lifecycle contract</li>\n</ul>\n<p>Core は portable であることを重視します。</p>\n<p>そのため、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>HonoX</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>Vite</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>Cloudflare</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>特定の Plugin</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>Site 固有の UI</span></span></code></pre>\n  </div>\n</figure>\n<p>などへ依存させません。</p>\n<h2 id=\"plugin\">Plugin</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/plugins/*</span></span></code></pre>\n  </div>\n</figure>\n<p>Plugin は、複数の Site で再利用できる機能を追加します。</p>\n<p>たとえば、</p>\n<ul>\n  <li>Markdown の変換</li>\n  <li>HTML の変換</li>\n  <li>metadata の追加</li>\n  <li>asset の生成</li>\n  <li>browser-side behavior</li>\n  <li>Page Type の提供</li>\n</ul>\n<p>などです。</p>\n<p>Plugin は Core が公開している contract を利用して機能を拡張します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-t1y8c5\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 606.421875px;\" viewBox=\"0 0 606.421875 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-t1y8c5{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-t1y8c5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-t1y8c5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-t1y8c5 .error-icon{fill:#552222;}#rr-mermaid-t1y8c5 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-t1y8c5 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-t1y8c5 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-t1y8c5 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-t1y8c5 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-t1y8c5 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-t1y8c5 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-t1y8c5 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-t1y8c5 .marker.cross{stroke:#333333;}#rr-mermaid-t1y8c5 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-t1y8c5 p{margin:0;}#rr-mermaid-t1y8c5 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-t1y8c5 .cluster-label text{fill:#333;}#rr-mermaid-t1y8c5 .cluster-label span{color:#333;}#rr-mermaid-t1y8c5 .cluster-label span p{background-color:transparent;}#rr-mermaid-t1y8c5 .label text,#rr-mermaid-t1y8c5 span{fill:#333;color:#333;}#rr-mermaid-t1y8c5 .node rect,#rr-mermaid-t1y8c5 .node circle,#rr-mermaid-t1y8c5 .node ellipse,#rr-mermaid-t1y8c5 .node polygon,#rr-mermaid-t1y8c5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-t1y8c5 .rough-node .label text,#rr-mermaid-t1y8c5 .node .label text,#rr-mermaid-t1y8c5 .image-shape .label,#rr-mermaid-t1y8c5 .icon-shape .label{text-anchor:middle;}#rr-mermaid-t1y8c5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-t1y8c5 .rough-node .label,#rr-mermaid-t1y8c5 .node .label,#rr-mermaid-t1y8c5 .image-shape .label,#rr-mermaid-t1y8c5 .icon-shape .label{text-align:center;}#rr-mermaid-t1y8c5 .node.clickable{cursor:pointer;}#rr-mermaid-t1y8c5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-t1y8c5 .arrowheadPath{fill:#333333;}#rr-mermaid-t1y8c5 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-t1y8c5 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-t1y8c5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-t1y8c5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-t1y8c5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-t1y8c5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-t1y8c5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-t1y8c5 .cluster text{fill:#333;}#rr-mermaid-t1y8c5 .cluster span{color:#333;}#rr-mermaid-t1y8c5 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-t1y8c5 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-t1y8c5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-t1y8c5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-t1y8c5 rect.text{fill:none;stroke-width:0;}#rr-mermaid-t1y8c5 .icon-shape,#rr-mermaid-t1y8c5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-t1y8c5 .icon-shape p,#rr-mermaid-t1y8c5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-t1y8c5 .icon-shape .label rect,#rr-mermaid-t1y8c5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-t1y8c5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-t1y8c5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-t1y8c5 .node .neo-node{stroke:#9370DB;}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node rect,#rr-mermaid-t1y8c5 [data-look=\"neo\"].cluster rect,#rr-mermaid-t1y8c5 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-t1y8c5 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-t1y8c5 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-t1y8c5 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-t1y8c5 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-t1y8c5 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-t1y8c5_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M112.484,35L116.651,35C120.818,35,129.151,35,136.818,35C144.484,35,151.484,35,154.984,35L158.484,35\" id=\"rr-mermaid-t1y8c5-L_Plugin_Contract_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Contract_0\" data-points=\"W3sieCI6MTEyLjQ4NDM3NSwieSI6MzV9LHsieCI6MTM3LjQ4NDM3NSwieSI6MzV9LHsieCI6MTYyLjQ4NDM3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-t1y8c5_flowchart-v2-pointEnd)\"></path><path d=\"M371,35L375.167,35C379.333,35,387.667,35,395.333,35C403,35,410,35,413.5,35L417,35\" id=\"rr-mermaid-t1y8c5-L_Contract_Pipeline_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Contract_Pipeline_0\" data-points=\"W3sieCI6MzcxLCJ5IjozNX0seyJ4IjozOTYsInkiOjM1fSx7IngiOjQyMSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-t1y8c5_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Contract_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Contract_Pipeline_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-t1y8c5-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(60.2421875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-t1y8c5-flowchart-Contract-1\" data-look=\"classic\" transform=\"translate(266.7421875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-104.2578125\" y=\"-27\" width=\"208.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-74.2578125, -12)\"><rect></rect><foreignObject width=\"148.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core Plugin Contract</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-t1y8c5-flowchart-Pipeline-3\" data-look=\"classic\" transform=\"translate(509.7109375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-88.7109375\" y=\"-27\" width=\"177.421875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-58.7109375, -12)\"><rect></rect><foreignObject width=\"117.421875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Pipeline</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-t1y8c5-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-t1y8c5-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin\"] --> Contract[\"Core Plugin Contract\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Contract --> Pipeline[\"Content Pipeline\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin のために Core が特定 Plugin の実装を知るような依存関係にはしません。</p>\n<h2 id=\"integration\">Integration</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/integrations/*</span></span></code></pre>\n  </div>\n</figure>\n<p>Integration は Riebeckite と外部技術を接続します。</p>\n<p>たとえば <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Riebeckite Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>      ↕</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>HonoX / Vite</span></span></code></pre>\n  </div>\n</figure>\n<p>を接続する役割を持ちます。</p>\n<p>Framework、Bundler、Platform 固有の処理は Core ではなく Integration に配置します。</p>\n<p>詳しくは <a href=\"/docs/framework/honox-integration\">HonoX Integration</a> を参照してください。</p>\n<h2 id=\"theme\">Theme</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/themes/*</span></span></code></pre>\n  </div>\n</figure>\n<p>Theme は Site の見た目を変更します。</p>\n<p>主に、</p>\n<ul>\n  <li>CSS</li>\n  <li>semantic token</li>\n  <li>stable CSS hook</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-*</span></span></code></span> attribute</li>\n  <li>CSS cascade</li>\n</ul>\n<p>を利用します。</p>\n<p>Theme は presentation を担当しますが、Site の構造そのものは所有しません。</p>\n<p>そのため Theme が、</p>\n<ul>\n  <li>route</li>\n  <li>Page Type ID</li>\n  <li>application component</li>\n  <li>Site の page composition</li>\n</ul>\n<p>を所有することはありません。</p>\n<h2 id=\"site-application\">Site Application</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>apps/web</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> は実際の Riebeckite Site Application です。</p>\n<p>主に、</p>\n<ul>\n  <li>routes</li>\n  <li>application components</li>\n  <li>islands</li>\n  <li>page composition</li>\n  <li>Site shell</li>\n  <li>Workers との接続</li>\n</ul>\n<p>を所有します。</p>\n<p>Core や Integration が「どう表示するか」まで決めるのではなく、最終的な Site の構造は Application が決定します。</p>\n<h2 id=\"cli\">CLI</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/cli</span></span></code></pre>\n  </div>\n</figure>\n<p>CLI は Node.js 上で実行される command と build tooling を担当します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> doctor</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> profile</span></span></code></pre>\n  </div>\n</figure>\n<p>などの入口を提供します。</p>\n<p>CLI は必要に応じて Core や Integration の機能を呼び出します。</p>\n<h1 id=\"content-の流れ\">Content の流れ</h1>\n<p>コンテンツ処理では、大きく <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> の責務を分離しています。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-xmasjt\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1470.96875px;\" viewBox=\"0 0 1470.96875 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-xmasjt{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-xmasjt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-xmasjt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-xmasjt .error-icon{fill:#552222;}#rr-mermaid-xmasjt .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-xmasjt .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-xmasjt .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-xmasjt .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-xmasjt .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-xmasjt .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-xmasjt .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-xmasjt .marker{fill:#333333;stroke:#333333;}#rr-mermaid-xmasjt .marker.cross{stroke:#333333;}#rr-mermaid-xmasjt svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-xmasjt p{margin:0;}#rr-mermaid-xmasjt .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-xmasjt .cluster-label text{fill:#333;}#rr-mermaid-xmasjt .cluster-label span{color:#333;}#rr-mermaid-xmasjt .cluster-label span p{background-color:transparent;}#rr-mermaid-xmasjt .label text,#rr-mermaid-xmasjt span{fill:#333;color:#333;}#rr-mermaid-xmasjt .node rect,#rr-mermaid-xmasjt .node circle,#rr-mermaid-xmasjt .node ellipse,#rr-mermaid-xmasjt .node polygon,#rr-mermaid-xmasjt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-xmasjt .rough-node .label text,#rr-mermaid-xmasjt .node .label text,#rr-mermaid-xmasjt .image-shape .label,#rr-mermaid-xmasjt .icon-shape .label{text-anchor:middle;}#rr-mermaid-xmasjt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-xmasjt .rough-node .label,#rr-mermaid-xmasjt .node .label,#rr-mermaid-xmasjt .image-shape .label,#rr-mermaid-xmasjt .icon-shape .label{text-align:center;}#rr-mermaid-xmasjt .node.clickable{cursor:pointer;}#rr-mermaid-xmasjt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-xmasjt .arrowheadPath{fill:#333333;}#rr-mermaid-xmasjt .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-xmasjt .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-xmasjt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-xmasjt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-xmasjt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-xmasjt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-xmasjt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-xmasjt .cluster text{fill:#333;}#rr-mermaid-xmasjt .cluster span{color:#333;}#rr-mermaid-xmasjt .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-xmasjt .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-xmasjt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-xmasjt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-xmasjt rect.text{fill:none;stroke-width:0;}#rr-mermaid-xmasjt .icon-shape,#rr-mermaid-xmasjt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-xmasjt .icon-shape p,#rr-mermaid-xmasjt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-xmasjt .icon-shape .label rect,#rr-mermaid-xmasjt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-xmasjt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-xmasjt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-xmasjt .node .neo-node{stroke:#9370DB;}#rr-mermaid-xmasjt [data-look=\"neo\"].node rect,#rr-mermaid-xmasjt [data-look=\"neo\"].cluster rect,#rr-mermaid-xmasjt [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xmasjt [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-xmasjt [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-xmasjt [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xmasjt [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-xmasjt [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xmasjt [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-xmasjt [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xmasjt [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xmasjt :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-xmasjt_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-xmasjt_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M174.734,35L192.168,35C209.602,35,244.469,35,278.669,35C312.87,35,346.404,35,363.171,35L379.938,35\" id=\"rr-mermaid-xmasjt-L_Source_Manager_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Source_Manager_0\" data-points=\"W3sieCI6MTc0LjczNDM3NSwieSI6MzV9LHsieCI6Mjc5LjMzNTkzNzUsInkiOjM1fSx7IngiOjM4My45Mzc1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path><path d=\"M563.125,35L567.292,35C571.458,35,579.792,35,587.458,35C595.125,35,602.125,35,605.625,35L609.125,35\" id=\"rr-mermaid-xmasjt-L_Manager_Location_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Location_0\" data-points=\"W3sieCI6NTYzLjEyNSwieSI6MzV9LHsieCI6NTg4LjEyNSwieSI6MzV9LHsieCI6NjEzLjEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path><path d=\"M781.641,35L789.366,35C797.091,35,812.542,35,827.372,37.791C842.202,40.581,856.411,46.163,863.516,48.954L870.621,51.744\" id=\"rr-mermaid-xmasjt-L_Location_Pipeline_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Location_Pipeline_0\" data-points=\"W3sieCI6NzgxLjY0MDYyNSwieSI6MzV9LHsieCI6ODI3Ljk5MjE4NzUsInkiOjM1fSx7IngiOjg3NC4zNDM3NSwieSI6NTMuMjA2OTA0NjkxNjQ5NDU2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path><path d=\"M1046.406,87L1050.573,87C1054.74,87,1063.073,87,1070.74,87C1078.406,87,1085.406,87,1088.906,87L1092.406,87\" id=\"rr-mermaid-xmasjt-L_Pipeline_Result_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Pipeline_Result_0\" data-points=\"W3sieCI6MTA0Ni40MDYyNSwieSI6ODd9LHsieCI6MTA3MS40MDYyNSwieSI6ODd9LHsieCI6MTA5Ni40MDYyNSwieSI6ODd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path><path d=\"M1274.688,87L1278.854,87C1283.021,87,1291.354,87,1299.021,87C1306.688,87,1313.688,87,1317.188,87L1320.688,87\" id=\"rr-mermaid-xmasjt-L_Result_App_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Result_App_0\" data-points=\"W3sieCI6MTI3NC42ODc1LCJ5Ijo4N30seyJ4IjoxMjk5LjY4NzUsInkiOjg3fSx7IngiOjEzMjQuNjg3NSwieSI6ODd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path><path d=\"M753.625,139L766.02,139C778.414,139,803.203,139,822.702,136.209C842.202,133.419,856.411,127.837,863.516,125.046L870.621,122.256\" id=\"rr-mermaid-xmasjt-L_Plugins_Pipeline_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugins_Pipeline_0\" data-points=\"W3sieCI6NzUzLjYyNSwieSI6MTM5fSx7IngiOjgyNy45OTIxODc1LCJ5IjoxMzl9LHsieCI6ODc0LjM0Mzc1LCJ5IjoxMjAuNzkzMDk1MzA4MzUwNTR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xmasjt_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(279.3359375, 35)\"><g class=\"label\" data-id=\"L_Source_Manager_0\" transform=\"translate(-79.6015625, -12)\"><foreignObject width=\"159.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>scan / read / metadata</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Location_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Location_Pipeline_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Pipeline_Result_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Result_App_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(827.9921875, 139)\"><g class=\"label\" data-id=\"L_Plugins_Pipeline_0\" transform=\"translate(-21.3515625, -12)\"><foreignObject width=\"42.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>hooks</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Source-0\" data-look=\"classic\" transform=\"translate(91.3671875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.3671875\" y=\"-27\" width=\"166.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.3671875, -12)\"><rect></rect><foreignObject width=\"106.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentSource</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Manager-1\" data-look=\"classic\" transform=\"translate(473.53125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.59375\" y=\"-27\" width=\"179.1875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.59375, -12)\"><rect></rect><foreignObject width=\"119.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Location-2\" data-look=\"classic\" transform=\"translate(697.3828125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.2578125\" y=\"-27\" width=\"168.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.2578125, -12)\"><rect></rect><foreignObject width=\"108.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Location</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Pipeline-3\" data-look=\"classic\" transform=\"translate(960.375, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.03125\" y=\"-39\" width=\"172.0625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.03125, -24)\"><rect></rect><foreignObject width=\"112.0625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Parse / Pipeline<br>Plugin Hooks</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Result-4\" data-look=\"classic\" transform=\"translate(1185.546875, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.140625\" y=\"-27\" width=\"178.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.140625, -12)\"><rect></rect><foreignObject width=\"118.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest / Graph</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-App-5\" data-look=\"classic\" transform=\"translate(1393.828125, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xmasjt-flowchart-Plugins-16\" data-look=\"classic\" transform=\"translate(697.3828125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-56.2421875\" y=\"-27\" width=\"112.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.2421875, -12)\"><rect></rect><foreignObject width=\"52.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugins</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-xmasjt-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-xmasjt-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Source[\"ContentSource\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Manager[\"ContentManager\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Location[\"Public Location\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Pipeline[\"Parse / Pipeline&#x3C;br/>Plugin Hooks\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Result[\"Manifest / Graph\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    App[\"Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Source -->|\"scan / read / metadata\"| Manager</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Manager --> Location</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Location --> Pipeline</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Pipeline --> Result</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Result --> App</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span>    Plugins[\"Plugins\"] -->|\"hooks\"| Pipeline</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"contentsource\">ContentSource</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> は「コンテンツをどこから、どう読み込むか」を担当します。</p>\n<p>主に、</p>\n<ul>\n  <li>scan</li>\n  <li>read</li>\n  <li>content identity</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>mtime</span></span></code></span></li>\n  <li>size</li>\n  <li>ETag</li>\n  <li>hash</li>\n</ul>\n<p>など、source に関する情報を提供します。</p>\n<p>たとえば filesystem を使う Content Source ならファイルを読み込みますが、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> 自身が filesystem を直接探索するわけではありません。</p>\n<p>新しい Content Source を追加するときも、この contract を通します。</p>\n<h2 id=\"contentmanager\">ContentManager</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> は読み込まれたコンテンツを処理します。</p>\n<p>主に、</p>\n<ul>\n  <li>public location の解決</li>\n  <li>parse</li>\n  <li>pipeline</li>\n  <li>Plugin hooks</li>\n  <li>manifest</li>\n  <li>content graph</li>\n</ul>\n<p>を担当します。</p>\n<p>つまり、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>ContentSource</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>コンテンツを取得する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>ContentManager</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>コンテンツを解決・処理する</span></span></code></pre>\n  </div>\n</figure>\n<p>という分担です。</p>\n<p>ContentManager に独自の filesystem scan を追加するのではなく、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> の contract を利用してください。</p>\n<h1 id=\"public-url-の解決\">Public URL の解決</h1>\n<p>コンテンツの URL は filesystem path や slug から推測しません。</p>\n<p>Riebeckite が明示的に <strong>Public Location</strong> を解決します。</p>\n<p>基本的な流れは次のようになります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-8hzvf3\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1459.390625px;\" viewBox=\"0 0 1459.390625 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-8hzvf3{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-8hzvf3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-8hzvf3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-8hzvf3 .error-icon{fill:#552222;}#rr-mermaid-8hzvf3 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-8hzvf3 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-8hzvf3 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-8hzvf3 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-8hzvf3 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-8hzvf3 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-8hzvf3 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-8hzvf3 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-8hzvf3 .marker.cross{stroke:#333333;}#rr-mermaid-8hzvf3 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-8hzvf3 p{margin:0;}#rr-mermaid-8hzvf3 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-8hzvf3 .cluster-label text{fill:#333;}#rr-mermaid-8hzvf3 .cluster-label span{color:#333;}#rr-mermaid-8hzvf3 .cluster-label span p{background-color:transparent;}#rr-mermaid-8hzvf3 .label text,#rr-mermaid-8hzvf3 span{fill:#333;color:#333;}#rr-mermaid-8hzvf3 .node rect,#rr-mermaid-8hzvf3 .node circle,#rr-mermaid-8hzvf3 .node ellipse,#rr-mermaid-8hzvf3 .node polygon,#rr-mermaid-8hzvf3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-8hzvf3 .rough-node .label text,#rr-mermaid-8hzvf3 .node .label text,#rr-mermaid-8hzvf3 .image-shape .label,#rr-mermaid-8hzvf3 .icon-shape .label{text-anchor:middle;}#rr-mermaid-8hzvf3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-8hzvf3 .rough-node .label,#rr-mermaid-8hzvf3 .node .label,#rr-mermaid-8hzvf3 .image-shape .label,#rr-mermaid-8hzvf3 .icon-shape .label{text-align:center;}#rr-mermaid-8hzvf3 .node.clickable{cursor:pointer;}#rr-mermaid-8hzvf3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-8hzvf3 .arrowheadPath{fill:#333333;}#rr-mermaid-8hzvf3 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-8hzvf3 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-8hzvf3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-8hzvf3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-8hzvf3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-8hzvf3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-8hzvf3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-8hzvf3 .cluster text{fill:#333;}#rr-mermaid-8hzvf3 .cluster span{color:#333;}#rr-mermaid-8hzvf3 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-8hzvf3 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-8hzvf3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-8hzvf3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-8hzvf3 rect.text{fill:none;stroke-width:0;}#rr-mermaid-8hzvf3 .icon-shape,#rr-mermaid-8hzvf3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-8hzvf3 .icon-shape p,#rr-mermaid-8hzvf3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-8hzvf3 .icon-shape .label rect,#rr-mermaid-8hzvf3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-8hzvf3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-8hzvf3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-8hzvf3 .node .neo-node{stroke:#9370DB;}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node rect,#rr-mermaid-8hzvf3 [data-look=\"neo\"].cluster rect,#rr-mermaid-8hzvf3 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8hzvf3 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8hzvf3 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-8hzvf3 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8hzvf3 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8hzvf3 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-8hzvf3_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M124.047,47L128.214,47C132.38,47,140.714,47,148.38,47C156.047,47,163.047,47,166.547,47L170.047,47\" id=\"rr-mermaid-8hzvf3-L_Content_Default_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Content_Default_0\" data-points=\"W3sieCI6MTI0LjA0Njg3NSwieSI6NDd9LHsieCI6MTQ5LjA0Njg3NSwieSI6NDd9LHsieCI6MTc0LjA0Njg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8hzvf3_flowchart-v2-pointEnd)\"></path><path d=\"M463.516,47L467.682,47C471.849,47,480.182,47,487.849,47C495.516,47,502.516,47,506.016,47L509.516,47\" id=\"rr-mermaid-8hzvf3-L_Default_Hooks_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Default_Hooks_0\" data-points=\"W3sieCI6NDYzLjUxNTYyNSwieSI6NDd9LHsieCI6NDg4LjUxNTYyNSwieSI6NDd9LHsieCI6NTEzLjUxNTYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8hzvf3_flowchart-v2-pointEnd)\"></path><path d=\"M749.625,47L753.792,47C757.958,47,766.292,47,773.958,47C781.625,47,788.625,47,792.125,47L795.625,47\" id=\"rr-mermaid-8hzvf3-L_Hooks_Manager_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Hooks_Manager_0\" data-points=\"W3sieCI6NzQ5LjYyNSwieSI6NDd9LHsieCI6Nzc0LjYyNSwieSI6NDd9LHsieCI6Nzk5LjYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8hzvf3_flowchart-v2-pointEnd)\"></path><path d=\"M1017.063,47L1021.229,47C1025.396,47,1033.729,47,1041.396,47C1049.063,47,1056.063,47,1059.563,47L1063.063,47\" id=\"rr-mermaid-8hzvf3-L_Manager_Permalink_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Permalink_0\" data-points=\"W3sieCI6MTAxNy4wNjI1LCJ5Ijo0N30seyJ4IjoxMDQyLjA2MjUsInkiOjQ3fSx7IngiOjEwNjcuMDYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8hzvf3_flowchart-v2-pointEnd)\"></path><path d=\"M1267.578,47L1271.745,47C1275.911,47,1284.245,47,1291.911,47C1299.578,47,1306.578,47,1310.078,47L1313.578,47\" id=\"rr-mermaid-8hzvf3-L_Permalink_Consumer_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Permalink_Consumer_0\" data-points=\"W3sieCI6MTI2Ny41NzgxMjUsInkiOjQ3fSx7IngiOjEyOTIuNTc4MTI1LCJ5Ijo0N30seyJ4IjoxMzE3LjU3ODEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8hzvf3_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Content_Default_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Default_Hooks_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Hooks_Manager_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Permalink_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Permalink_Consumer_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Content-0\" data-look=\"classic\" transform=\"translate(66.0234375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0234375\" y=\"-27\" width=\"116.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0234375, -12)\"><rect></rect><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Default-1\" data-look=\"classic\" transform=\"translate(318.78125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-144.734375\" y=\"-27\" width=\"289.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-114.734375, -12)\"><rect></rect><foreignObject width=\"229.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>resolveDefaultContentLocation()</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Hooks-2\" data-look=\"classic\" transform=\"translate(631.5703125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-118.0546875\" y=\"-39\" width=\"236.109375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-88.0546875, -24)\"><rect></rect><foreignObject width=\"176.109375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>resolveContentLocations<br>Plugin Hooks</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Manager-3\" data-look=\"classic\" transform=\"translate(908.34375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.71875\" y=\"-39\" width=\"217.4375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.71875, -24)\"><rect></rect><foreignObject width=\"157.4375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager<br>getContentLocations()</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Permalink-4\" data-look=\"classic\" transform=\"translate(1167.3203125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.2578125\" y=\"-27\" width=\"200.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.2578125, -12)\"><rect></rect><foreignObject width=\"140.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Resolved permalink</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8hzvf3-flowchart-Consumer-5\" data-look=\"classic\" transform=\"translate(1384.484375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.90625\" y=\"-27\" width=\"133.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.90625, -12)\"><rect></rect><foreignObject width=\"73.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Consumer</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-8hzvf3-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-8hzvf3-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Content[\"Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Default[\"resolveDefaultContentLocation()\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Hooks[\"resolveContentLocations&#x3C;br/>Plugin Hooks\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Manager[\"ContentManager&#x3C;br/>getContentLocations()\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Permalink[\"Resolved permalink\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Consumer[\"Consumer\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Content --> Default</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Default --> Hooks</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Hooks --> Manager</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Manager --> Permalink</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Permalink --> Consumer</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Consumer は、この処理によって確定した <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span> を使用します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>content/posts/hello.md</span></span></code></pre>\n  </div>\n</figure>\n<p>という filesystem path があっても、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/posts/hello</span></span></code></pre>\n  </div>\n</figure>\n<p>になるとは限りません。</p>\n<p>Plugin や config によって、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/blog/hello/</span></span></code></pre>\n  </div>\n</figure>\n<p>へ解決されているなら、それが正式な公開 URL です。</p>\n<p>そのため Consumer 側で、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>filesystem path → slug → URL</span></span></code></pre>\n  </div>\n</figure>\n<p>のような再計算をしないでください。</p>\n<p><strong>解決済みの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span> が public URL の source of truth です。</strong></p>\n<h1 id=\"page-type\">Page Type</h1>\n<p>Plugin は Page Type を使って、通常の Markdown content とは異なるページを提供できます。</p>\n<p>ただし Page Type は特定の Web framework に依存しません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-hc9j4n\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 780.90625px;\" viewBox=\"0 0 780.90625 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-hc9j4n{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-hc9j4n .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-hc9j4n .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-hc9j4n .error-icon{fill:#552222;}#rr-mermaid-hc9j4n .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-hc9j4n .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-hc9j4n .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-hc9j4n .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-hc9j4n .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-hc9j4n .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-hc9j4n .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-hc9j4n .marker{fill:#333333;stroke:#333333;}#rr-mermaid-hc9j4n .marker.cross{stroke:#333333;}#rr-mermaid-hc9j4n svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-hc9j4n p{margin:0;}#rr-mermaid-hc9j4n .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-hc9j4n .cluster-label text{fill:#333;}#rr-mermaid-hc9j4n .cluster-label span{color:#333;}#rr-mermaid-hc9j4n .cluster-label span p{background-color:transparent;}#rr-mermaid-hc9j4n .label text,#rr-mermaid-hc9j4n span{fill:#333;color:#333;}#rr-mermaid-hc9j4n .node rect,#rr-mermaid-hc9j4n .node circle,#rr-mermaid-hc9j4n .node ellipse,#rr-mermaid-hc9j4n .node polygon,#rr-mermaid-hc9j4n .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-hc9j4n .rough-node .label text,#rr-mermaid-hc9j4n .node .label text,#rr-mermaid-hc9j4n .image-shape .label,#rr-mermaid-hc9j4n .icon-shape .label{text-anchor:middle;}#rr-mermaid-hc9j4n .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-hc9j4n .rough-node .label,#rr-mermaid-hc9j4n .node .label,#rr-mermaid-hc9j4n .image-shape .label,#rr-mermaid-hc9j4n .icon-shape .label{text-align:center;}#rr-mermaid-hc9j4n .node.clickable{cursor:pointer;}#rr-mermaid-hc9j4n .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-hc9j4n .arrowheadPath{fill:#333333;}#rr-mermaid-hc9j4n .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-hc9j4n .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-hc9j4n .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-hc9j4n .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-hc9j4n .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-hc9j4n .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-hc9j4n .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-hc9j4n .cluster text{fill:#333;}#rr-mermaid-hc9j4n .cluster span{color:#333;}#rr-mermaid-hc9j4n .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-hc9j4n .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-hc9j4n div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-hc9j4n .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-hc9j4n rect.text{fill:none;stroke-width:0;}#rr-mermaid-hc9j4n .icon-shape,#rr-mermaid-hc9j4n .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-hc9j4n .icon-shape p,#rr-mermaid-hc9j4n .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-hc9j4n .icon-shape .label rect,#rr-mermaid-hc9j4n .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-hc9j4n .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-hc9j4n .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-hc9j4n .node .neo-node{stroke:#9370DB;}#rr-mermaid-hc9j4n [data-look=\"neo\"].node rect,#rr-mermaid-hc9j4n [data-look=\"neo\"].cluster rect,#rr-mermaid-hc9j4n [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-hc9j4n [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-hc9j4n [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-hc9j4n [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-hc9j4n [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-hc9j4n [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-hc9j4n [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-hc9j4n [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-hc9j4n [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-hc9j4n :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-hc9j4n_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M112.484,47L116.651,47C120.818,47,129.151,47,136.818,47C144.484,47,151.484,47,154.984,47L158.484,47\" id=\"rr-mermaid-hc9j4n-L_Plugin_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Page_0\" data-points=\"W3sieCI6MTEyLjQ4NDM3NSwieSI6NDd9LHsieCI6MTM3LjQ4NDM3NSwieSI6NDd9LHsieCI6MTYyLjQ4NDM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-hc9j4n_flowchart-v2-pointEnd)\"></path><path d=\"M306.563,47L310.729,47C314.896,47,323.229,47,330.896,47C338.563,47,345.563,47,349.063,47L352.563,47\" id=\"rr-mermaid-hc9j4n-L_Page_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_Integration_0\" data-points=\"W3sieCI6MzA2LjU2MjUsInkiOjQ3fSx7IngiOjMzMS41NjI1LCJ5Ijo0N30seyJ4IjozNTYuNTYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-hc9j4n_flowchart-v2-pointEnd)\"></path><path d=\"M539.313,47L543.479,47C547.646,47,555.979,47,563.646,47C571.313,47,578.313,47,581.813,47L585.313,47\" id=\"rr-mermaid-hc9j4n-L_Integration_Frame_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Frame_0\" data-points=\"W3sieCI6NTM5LjMxMjUsInkiOjQ3fSx7IngiOjU2NC4zMTI1LCJ5Ijo0N30seyJ4Ijo1ODkuMzEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-hc9j4n_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Page_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Frame_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-hc9j4n-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(60.2421875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-hc9j4n-flowchart-Page-1\" data-look=\"classic\" transform=\"translate(234.5234375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.0390625\" y=\"-39\" width=\"144.078125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.0390625, -24)\"><rect></rect><foreignObject width=\"84.078125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Type<br>path + body</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-hc9j4n-flowchart-Integration-2\" data-look=\"classic\" transform=\"translate(447.9375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.375\" y=\"-39\" width=\"182.75\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.375, -24)\"><rect></rect><foreignObject width=\"122.75\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration<br>Route Resolution</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-hc9j4n-flowchart-Frame-3\" data-look=\"classic\" transform=\"translate(681.109375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.796875\" y=\"-39\" width=\"183.59375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.796875, -24)\"><rect></rect><foreignObject width=\"123.59375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application<br>Document Frame</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-hc9j4n-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-hc9j4n-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Page[\"Page Type&#x3C;br/>path + body\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Integration[\"Integration&#x3C;br/>Route Resolution\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Frame[\"Application&#x3C;br/>Document Frame\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Plugin --> Page</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Page --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Integration --> Frame</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin が提供するのは、主に public path と page body です。</p>\n<p>それを実際の URL として処理するのは Integration、最終的な HTML document として組み立てるのは Application です。</p>\n<p>Plugin が HonoX route や Site shell を所有する必要はありません。</p>\n<p>詳しくは <a href=\"/docs/framework/page-system\">Page System</a> を参照してください。</p>\n<h1 id=\"build-time-と-runtime\">Build-time と Runtime</h1>\n<p>Riebeckite では、Build 時にだけ必要なものと、公開 Site の Runtime で必要なものを分離します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-d71nyv\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1667.21875px;\" viewBox=\"0 0 1667.21875 145\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-d71nyv{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-d71nyv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-d71nyv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-d71nyv .error-icon{fill:#552222;}#rr-mermaid-d71nyv .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-d71nyv .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-d71nyv .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-d71nyv .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-d71nyv .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-d71nyv .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-d71nyv .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-d71nyv .marker{fill:#333333;stroke:#333333;}#rr-mermaid-d71nyv .marker.cross{stroke:#333333;}#rr-mermaid-d71nyv svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-d71nyv p{margin:0;}#rr-mermaid-d71nyv .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-d71nyv .cluster-label text{fill:#333;}#rr-mermaid-d71nyv .cluster-label span{color:#333;}#rr-mermaid-d71nyv .cluster-label span p{background-color:transparent;}#rr-mermaid-d71nyv .label text,#rr-mermaid-d71nyv span{fill:#333;color:#333;}#rr-mermaid-d71nyv .node rect,#rr-mermaid-d71nyv .node circle,#rr-mermaid-d71nyv .node ellipse,#rr-mermaid-d71nyv .node polygon,#rr-mermaid-d71nyv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-d71nyv .rough-node .label text,#rr-mermaid-d71nyv .node .label text,#rr-mermaid-d71nyv .image-shape .label,#rr-mermaid-d71nyv .icon-shape .label{text-anchor:middle;}#rr-mermaid-d71nyv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-d71nyv .rough-node .label,#rr-mermaid-d71nyv .node .label,#rr-mermaid-d71nyv .image-shape .label,#rr-mermaid-d71nyv .icon-shape .label{text-align:center;}#rr-mermaid-d71nyv .node.clickable{cursor:pointer;}#rr-mermaid-d71nyv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-d71nyv .arrowheadPath{fill:#333333;}#rr-mermaid-d71nyv .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-d71nyv .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-d71nyv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-d71nyv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-d71nyv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-d71nyv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-d71nyv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-d71nyv .cluster text{fill:#333;}#rr-mermaid-d71nyv .cluster span{color:#333;}#rr-mermaid-d71nyv .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-d71nyv .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-d71nyv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-d71nyv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-d71nyv rect.text{fill:none;stroke-width:0;}#rr-mermaid-d71nyv .icon-shape,#rr-mermaid-d71nyv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-d71nyv .icon-shape p,#rr-mermaid-d71nyv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-d71nyv .icon-shape .label rect,#rr-mermaid-d71nyv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-d71nyv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-d71nyv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-d71nyv .node .neo-node{stroke:#9370DB;}#rr-mermaid-d71nyv [data-look=\"neo\"].node rect,#rr-mermaid-d71nyv [data-look=\"neo\"].cluster rect,#rr-mermaid-d71nyv [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d71nyv [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-d71nyv [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-d71nyv [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d71nyv [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-d71nyv [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d71nyv [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-d71nyv [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d71nyv [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d71nyv :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-d71nyv_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-d71nyv_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M1412.578,72.5L1416.745,72.5C1420.911,72.5,1429.245,72.5,1436.911,72.5C1444.578,72.5,1451.578,72.5,1455.078,72.5L1458.578,72.5\" id=\"rr-mermaid-d71nyv-L_Output_Runtime_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Output_Runtime_0\" data-points=\"W3sieCI6MTQxMi41NzgxMjUsInkiOjcyLjV9LHsieCI6MTQzNy41NzgxMjUsInkiOjcyLjV9LHsieCI6MTQ2Mi41NzgxMjUsInkiOjcyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d71nyv_flowchart-v2-pointEnd)\"></path><path d=\"M1145.125,72.5L1149.292,72.5C1153.458,72.5,1161.792,72.5,1169.458,72.5C1177.125,72.5,1184.125,72.5,1187.625,72.5L1191.125,72.5\" id=\"rr-mermaid-d71nyv-L_Build_Output_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Build_Output_0\" data-points=\"W3sieCI6MTE0NS4xMjUsInkiOjcyLjV9LHsieCI6MTE3MC4xMjUsInkiOjcyLjV9LHsieCI6MTE5NS4xMjUsInkiOjcyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d71nyv_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Output_Runtime_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Build_Output_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"root\" transform=\"translate(0, 0)\"><g class=\"clusters\"><g class=\"cluster\" id=\"rr-mermaid-d71nyv-Build\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"1137.125\" height=\"129\"></rect><g class=\"cluster-label\" transform=\"translate(507.203125, 8)\"><foreignObject width=\"138.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel\"><p>Build-time / Node.js</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"></g><g class=\"edgeLabels\"></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-CLI-0\" data-look=\"classic\" transform=\"translate(85.453125, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-42.453125\" y=\"-27\" width=\"84.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12.453125, -12)\"><rect></rect><foreignObject width=\"24.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>CLI</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Doctor-1\" data-look=\"classic\" transform=\"translate(231.46875, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.5625\" y=\"-27\" width=\"107.125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.5625, -12)\"><rect></rect><foreignObject width=\"47.125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Doctor</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Inspector-2\" data-look=\"classic\" transform=\"translate(397.9375, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.90625\" y=\"-27\" width=\"125.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.90625, -12)\"><rect></rect><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Inspector</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-State-3\" data-look=\"classic\" transform=\"translate(603.546875, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.703125\" y=\"-27\" width=\"185.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.703125, -12)\"><rect></rect><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Incremental State</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Cache-4\" data-look=\"classic\" transform=\"translate(823.8359375, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.5859375\" y=\"-27\" width=\"155.171875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.5859375, -12)\"><rect></rect><foreignObject width=\"95.171875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Cache</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Profile-5\" data-look=\"classic\" transform=\"translate(1030.7734375, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.3515625\" y=\"-27\" width=\"158.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.3515625, -12)\"><rect></rect><foreignObject width=\"98.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Profile / Trace</p></span></div></foreignObject></g></g></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Output-7\" data-look=\"classic\" transform=\"translate(1303.8515625, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.7265625\" y=\"-39\" width=\"217.453125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.7265625, -24)\"><rect></rect><foreignObject width=\"157.453125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Generated Application<br>Stable Content Data</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d71nyv-flowchart-Runtime-9\" data-look=\"classic\" transform=\"translate(1560.8984375, 72.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.3203125\" y=\"-39\" width=\"196.640625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.3203125, -24)\"><rect></rect><foreignObject width=\"136.640625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Runtime<br>Cloudflare Workers</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-d71nyv-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-d71nyv-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    subgraph Build[\"Build-time / Node.js\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>        CLI[\"CLI\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>        Doctor[\"Doctor\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>        Inspector[\"Inspector\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>        State[\"Incremental State\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>        Cache[\"Plugin Cache\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>        Profile[\"Profile / Trace\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    end</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Build --> Output[\"Generated Application&#x3C;br/>Stable Content Data\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Output --> Runtime[\"Runtime&#x3C;br/>Cloudflare Workers\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>次のものは Build-time の情報です。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/build/content-state.json</span></span></code></span></li>\n  <li>Plugin Cache</li>\n  <li>CLI</li>\n  <li>Doctor</li>\n  <li>Inspector</li>\n  <li>Profile / Trace</li>\n</ul>\n<p>Cloudflare Workers の request runtime は、これらを読み書きしません。</p>\n<p>Runtime が利用するのは Build によって生成された application と、安定した content data です。</p>\n<p>これにより、Build の最適化用 state と公開 Site の動作を分離しています。</p>\n<p>また Build が失敗した場合、新しい不完全な state で以前の正常な state を置き換えません。</p>\n<h1 id=\"コードをどこに置くか\">コードをどこに置くか</h1>\n<p>新しい機能を追加するときは、まず「どの package がその責務を持つべきか」を考えます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-uzvgxb\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 947.0078125px;\" viewBox=\"0 0 947.0078125 282\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-uzvgxb{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-uzvgxb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-uzvgxb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-uzvgxb .error-icon{fill:#552222;}#rr-mermaid-uzvgxb .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-uzvgxb .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-uzvgxb .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-uzvgxb .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-uzvgxb .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-uzvgxb .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-uzvgxb .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-uzvgxb .marker{fill:#333333;stroke:#333333;}#rr-mermaid-uzvgxb .marker.cross{stroke:#333333;}#rr-mermaid-uzvgxb svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-uzvgxb p{margin:0;}#rr-mermaid-uzvgxb .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-uzvgxb .cluster-label text{fill:#333;}#rr-mermaid-uzvgxb .cluster-label span{color:#333;}#rr-mermaid-uzvgxb .cluster-label span p{background-color:transparent;}#rr-mermaid-uzvgxb .label text,#rr-mermaid-uzvgxb span{fill:#333;color:#333;}#rr-mermaid-uzvgxb .node rect,#rr-mermaid-uzvgxb .node circle,#rr-mermaid-uzvgxb .node ellipse,#rr-mermaid-uzvgxb .node polygon,#rr-mermaid-uzvgxb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-uzvgxb .rough-node .label text,#rr-mermaid-uzvgxb .node .label text,#rr-mermaid-uzvgxb .image-shape .label,#rr-mermaid-uzvgxb .icon-shape .label{text-anchor:middle;}#rr-mermaid-uzvgxb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-uzvgxb .rough-node .label,#rr-mermaid-uzvgxb .node .label,#rr-mermaid-uzvgxb .image-shape .label,#rr-mermaid-uzvgxb .icon-shape .label{text-align:center;}#rr-mermaid-uzvgxb .node.clickable{cursor:pointer;}#rr-mermaid-uzvgxb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-uzvgxb .arrowheadPath{fill:#333333;}#rr-mermaid-uzvgxb .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-uzvgxb .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-uzvgxb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-uzvgxb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-uzvgxb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-uzvgxb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-uzvgxb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-uzvgxb .cluster text{fill:#333;}#rr-mermaid-uzvgxb .cluster span{color:#333;}#rr-mermaid-uzvgxb .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-uzvgxb .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-uzvgxb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-uzvgxb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-uzvgxb rect.text{fill:none;stroke-width:0;}#rr-mermaid-uzvgxb .icon-shape,#rr-mermaid-uzvgxb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-uzvgxb .icon-shape p,#rr-mermaid-uzvgxb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-uzvgxb .icon-shape .label rect,#rr-mermaid-uzvgxb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-uzvgxb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-uzvgxb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-uzvgxb .node .neo-node{stroke:#9370DB;}#rr-mermaid-uzvgxb [data-look=\"neo\"].node rect,#rr-mermaid-uzvgxb [data-look=\"neo\"].cluster rect,#rr-mermaid-uzvgxb [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-uzvgxb [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-uzvgxb [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-uzvgxb [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-uzvgxb [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-uzvgxb [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-uzvgxb [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-uzvgxb [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-uzvgxb [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-uzvgxb :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-uzvgxb_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M425.207,92.106L371.158,107.255C317.11,122.404,209.012,152.702,154.963,173.351C100.914,194,100.914,205,100.914,210.5L100.914,216\" id=\"rr-mermaid-uzvgxb-L_Q_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Core_0\" data-points=\"W3sieCI6NDI1LjIwNzI4MDg0MjU4NDIsInkiOjkyLjEwNTcxODM0MjU4NDIzfSx7IngiOjEwMC45MTQwNjI1LCJ5IjoxODN9LHsieCI6MTAwLjkxNDA2MjUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-uzvgxb_flowchart-v2-pointEnd)\"></path><path d=\"M434.874,101.772L410.703,115.31C386.533,128.848,338.192,155.924,314.022,174.962C289.852,194,289.852,205,289.852,210.5L289.852,216\" id=\"rr-mermaid-uzvgxb-L_Q_Plugin_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Plugin_0\" data-points=\"W3sieCI6NDM0Ljg3Mzc4OTQyNjMzMzYsInkiOjEwMS43NzIyMjY5MjYzMzM2Mn0seyJ4IjoyODkuODUxNTYyNSwieSI6MTgzfSx7IngiOjI4OS44NTE1NjI1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-uzvgxb_flowchart-v2-pointEnd)\"></path><path d=\"M479.102,146L479.102,152.167C479.102,158.333,479.102,170.667,479.102,182.333C479.102,194,479.102,205,479.102,210.5L479.102,216\" id=\"rr-mermaid-uzvgxb-L_Q_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Integration_0\" data-points=\"W3sieCI6NDc5LjEwMTU2MjUsInkiOjE0Nn0seyJ4Ijo0NzkuMTAxNTYyNSwieSI6MTgzfSx7IngiOjQ3OS4xMDE1NjI1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-uzvgxb_flowchart-v2-pointEnd)\"></path><path d=\"M524.394,100.708L550.596,114.423C576.799,128.138,629.204,155.569,655.407,174.785C681.609,194,681.609,205,681.609,210.5L681.609,216\" id=\"rr-mermaid-uzvgxb-L_Q_App_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_App_0\" data-points=\"W3sieCI6NTI0LjM5Mzg5NzA3NDE4NTIsInkiOjEwMC43MDc2NjU0MjU4MTQ3OH0seyJ4Ijo2ODEuNjA5Mzc1LCJ5IjoxODN9LHsieCI6NjgxLjYwOTM3NSwieSI6MjIwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-uzvgxb_flowchart-v2-pointEnd)\"></path><path d=\"M533.418,91.684L589.717,106.903C646.016,122.122,758.613,152.561,814.912,173.281C871.211,194,871.211,205,871.211,210.5L871.211,216\" id=\"rr-mermaid-uzvgxb-L_Q_Theme_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Theme_0\" data-points=\"W3sieCI6NTMzLjQxODA0MDQzMjE4MTEsInkiOjkxLjY4MzUyMjA2NzgxODk0fSx7IngiOjg3MS4yMTA5Mzc1LCJ5IjoxODN9LHsieCI6ODcxLjIxMDkzNzUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-uzvgxb_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(100.9140625, 183)\"><g class=\"label\" data-id=\"L_Q_Core_0\" transform=\"translate(-92.9140625, -12)\"><foreignObject width=\"185.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>共通の型・contract・lifecycle</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(289.8515625, 183)\"><g class=\"label\" data-id=\"L_Q_Plugin_0\" transform=\"translate(-76.0234375, -12)\"><foreignObject width=\"152.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>再利用可能なContent機能</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(479.1015625, 183)\"><g class=\"label\" data-id=\"L_Q_Integration_0\" transform=\"translate(-93.2265625, -12)\"><foreignObject width=\"186.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>HonoX / Vite / Platform接続</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(681.609375, 183)\"><g class=\"label\" data-id=\"L_Q_App_0\" transform=\"translate(-74.71875, -12)\"><foreignObject width=\"149.4375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Route / Page / Island</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(871.2109375, 183)\"><g class=\"label\" data-id=\"L_Q_Theme_0\" transform=\"translate(-67.796875, -12)\"><foreignObject width=\"135.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>見た目・CSS・Token</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(479.1015625, 77)\"><polygon points=\"69,0 138,-69 69,-138 0,-69\" class=\"label-container\" transform=\"translate(-68.5, 69)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-42, -12)\"><rect></rect><foreignObject width=\"84\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何を追加する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-Core-2\" data-look=\"classic\" transform=\"translate(100.9140625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.34375\" y=\"-27\" width=\"94.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.34375, -12)\"><rect></rect><foreignObject width=\"34.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-Plugin-4\" data-look=\"classic\" transform=\"translate(289.8515625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-Integration-6\" data-look=\"classic\" transform=\"translate(479.1015625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.8046875\" y=\"-27\" width=\"135.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.8046875, -12)\"><rect></rect><foreignObject width=\"75.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-App-8\" data-look=\"classic\" transform=\"translate(681.609375, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.703125\" y=\"-27\" width=\"169.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-uzvgxb-flowchart-Theme-10\" data-look=\"classic\" transform=\"translate(871.2109375, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.8984375\" y=\"-27\" width=\"109.796875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.8984375, -12)\"><rect></rect><foreignObject width=\"49.796875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-uzvgxb-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-uzvgxb-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"何を追加する？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"共通の型・contract・lifecycle\"| Core[\"Core\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"再利用可能なContent機能\"| Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Q -->|\"HonoX / Vite / Platform接続\"| Integration[\"Integration\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Q -->|\"Route / Page / Island\"| App[\"Site Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Q -->|\"見た目・CSS・Token\"| Theme[\"Theme\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>判断の目安は次のとおりです。</p>\n<table>\n  <thead>\n    <tr>\n      <th>追加するもの</th>\n      <th>配置先</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>持ち運べる型や lifecycle contract</td>\n      <td><strong>Core</strong></td>\n    </tr>\n    <tr>\n      <td>再利用可能な content の振る舞い</td>\n      <td><strong>Plugin</strong></td>\n    </tr>\n    <tr>\n      <td>Vite / HonoX / Platform との接続</td>\n      <td><strong>Integration</strong></td>\n    </tr>\n    <tr>\n      <td>Route / Page composition / Island</td>\n      <td><strong>Site Application</strong></td>\n    </tr>\n    <tr>\n      <td>Visual token / CSS</td>\n      <td><strong>Theme</strong></td>\n    </tr>\n  </tbody>\n</table>\n<p>迷った場合は、<strong>その機能を成立させるために必要な最も内側の package</strong> に置きます。</p>\n<p>ただし、内側の package から外側へ依存させてはいけません。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>「Plugin Page を HonoX で表示したい」</span></span></code></pre>\n  </div>\n</figure>\n<p>からといって Core に HonoX のコードを追加するのではなく、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  → framework-independent な Page contract</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>Plugin</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>  → Page を提供</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>HonoX Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>  → Page を route と接続</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>  → 最終的な document を描画</span></span></code></pre>\n  </div>\n</figure>\n<p>と責務を分割します。</p>\n<p>この境界を維持することで、Core や Plugin を特定の Site、Framework、Platform に固定せず再利用できます。</p>\n<p>関連する設計については <a href=\"/docs/framework/content-system\">Content System</a>、<a href=\"/docs/framework/plugin-system\">Plugin System</a>、<a href=\"/docs/framework/theme-system\">Theme System</a>、<a href=\"/docs/framework/honox-integration\">HonoX Integration</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Architecture Riebeckite は、Core を中心に Plugin、Integration、Theme、Application を分離した pnpm workspace です。 重要な原則は、 内側の package が外側の実装を知らないこと です。 たとえば Core はコンテンツ処理の仕組みを提","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/build-dependency","url":"https://riebeckite.dev/en/docs/framework/build-dependency","title":"build-dependency.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"build-dependency-contract\">Build Dependency Contract</h1>\n<p>Core owns incremental invalidation. A plugin does not compute which content is affected, and it does not keep its own dependency state. It declares a contract and lets Core decide what to reuse.</p>\n<p>A plugin takes part in two independent contracts:</p>\n<ul>\n  <li><strong>Content dependency</strong> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span>) decides which source content Core processes again.</li>\n  <li><strong>Output dependency</strong> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>outputDependencies</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.output.emit</span></span></code></span>) decides which emitted files Core writes again.</li>\n</ul>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-5xq3i1\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1326.640625px;\" viewBox=\"0 0 1326.640625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-5xq3i1{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-5xq3i1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-5xq3i1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-5xq3i1 .error-icon{fill:#552222;}#rr-mermaid-5xq3i1 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-5xq3i1 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-5xq3i1 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-5xq3i1 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-5xq3i1 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-5xq3i1 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-5xq3i1 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-5xq3i1 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-5xq3i1 .marker.cross{stroke:#333333;}#rr-mermaid-5xq3i1 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-5xq3i1 p{margin:0;}#rr-mermaid-5xq3i1 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-5xq3i1 .cluster-label text{fill:#333;}#rr-mermaid-5xq3i1 .cluster-label span{color:#333;}#rr-mermaid-5xq3i1 .cluster-label span p{background-color:transparent;}#rr-mermaid-5xq3i1 .label text,#rr-mermaid-5xq3i1 span{fill:#333;color:#333;}#rr-mermaid-5xq3i1 .node rect,#rr-mermaid-5xq3i1 .node circle,#rr-mermaid-5xq3i1 .node ellipse,#rr-mermaid-5xq3i1 .node polygon,#rr-mermaid-5xq3i1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-5xq3i1 .rough-node .label text,#rr-mermaid-5xq3i1 .node .label text,#rr-mermaid-5xq3i1 .image-shape .label,#rr-mermaid-5xq3i1 .icon-shape .label{text-anchor:middle;}#rr-mermaid-5xq3i1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-5xq3i1 .rough-node .label,#rr-mermaid-5xq3i1 .node .label,#rr-mermaid-5xq3i1 .image-shape .label,#rr-mermaid-5xq3i1 .icon-shape .label{text-align:center;}#rr-mermaid-5xq3i1 .node.clickable{cursor:pointer;}#rr-mermaid-5xq3i1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-5xq3i1 .arrowheadPath{fill:#333333;}#rr-mermaid-5xq3i1 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-5xq3i1 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-5xq3i1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-5xq3i1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-5xq3i1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-5xq3i1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-5xq3i1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-5xq3i1 .cluster text{fill:#333;}#rr-mermaid-5xq3i1 .cluster span{color:#333;}#rr-mermaid-5xq3i1 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-5xq3i1 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-5xq3i1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-5xq3i1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-5xq3i1 rect.text{fill:none;stroke-width:0;}#rr-mermaid-5xq3i1 .icon-shape,#rr-mermaid-5xq3i1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-5xq3i1 .icon-shape p,#rr-mermaid-5xq3i1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-5xq3i1 .icon-shape .label rect,#rr-mermaid-5xq3i1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-5xq3i1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-5xq3i1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-5xq3i1 .node .neo-node{stroke:#9370DB;}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node rect,#rr-mermaid-5xq3i1 [data-look=\"neo\"].cluster rect,#rr-mermaid-5xq3i1 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5xq3i1 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5xq3i1 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-5xq3i1 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5xq3i1 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5xq3i1 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-5xq3i1_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M224.547,35L228.714,35C232.88,35,241.214,35,248.88,35C256.547,35,263.547,35,267.047,35L270.547,35\" id=\"rr-mermaid-5xq3i1-L_Change_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Change_Content_0\" data-points=\"W3sieCI6MjI0LjU0Njg3NSwieSI6MzV9LHsieCI6MjQ5LjU0Njg3NSwieSI6MzV9LHsieCI6Mjc0LjU0Njg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5xq3i1_flowchart-v2-pointEnd)\"></path><path d=\"M482.219,35L486.385,35C490.552,35,498.885,35,506.552,35C514.219,35,521.219,35,524.719,35L528.219,35\" id=\"rr-mermaid-5xq3i1-L_Content_Reprocess_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Content_Reprocess_0\" data-points=\"W3sieCI6NDgyLjIxODc1LCJ5IjozNX0seyJ4Ijo1MDcuMjE4NzUsInkiOjM1fSx7IngiOjUzMi4yMTg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5xq3i1_flowchart-v2-pointEnd)\"></path><path d=\"M786.719,35L790.885,35C795.052,35,803.385,35,811.052,35C818.719,35,825.719,35,829.219,35L832.719,35\" id=\"rr-mermaid-5xq3i1-L_Reprocess_Output_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Reprocess_Output_0\" data-points=\"W3sieCI6Nzg2LjcxODc1LCJ5IjozNX0seyJ4Ijo4MTEuNzE4NzUsInkiOjM1fSx7IngiOjgzNi43MTg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5xq3i1_flowchart-v2-pointEnd)\"></path><path d=\"M1036.391,35L1040.557,35C1044.724,35,1053.057,35,1060.724,35C1068.391,35,1075.391,35,1078.891,35L1082.391,35\" id=\"rr-mermaid-5xq3i1-L_Output_Rewrite_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Output_Rewrite_0\" data-points=\"W3sieCI6MTAzNi4zOTA2MjUsInkiOjM1fSx7IngiOjEwNjEuMzkwNjI1LCJ5IjozNX0seyJ4IjoxMDg2LjM5MDYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5xq3i1_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Change_Content_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Content_Reprocess_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Reprocess_Output_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Output_Rewrite_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-5xq3i1-flowchart-Change-0\" data-look=\"classic\" transform=\"translate(116.2734375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.2734375\" y=\"-27\" width=\"216.546875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.2734375, -12)\"><rect></rect><foreignObject width=\"156.546875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content or file change</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5xq3i1-flowchart-Content-1\" data-look=\"classic\" transform=\"translate(378.3828125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-103.8359375\" y=\"-27\" width=\"207.671875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-73.8359375, -12)\"><rect></rect><foreignObject width=\"147.671875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content dependency</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5xq3i1-flowchart-Reprocess-3\" data-look=\"classic\" transform=\"translate(659.46875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-127.25\" y=\"-27\" width=\"254.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-97.25, -12)\"><rect></rect><foreignObject width=\"194.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Reprocess affected content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5xq3i1-flowchart-Output-5\" data-look=\"classic\" transform=\"translate(936.5546875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.8359375\" y=\"-27\" width=\"199.671875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.8359375, -12)\"><rect></rect><foreignObject width=\"139.671875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Output dependency</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5xq3i1-flowchart-Rewrite-7\" data-look=\"classic\" transform=\"translate(1202.515625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.125\" y=\"-27\" width=\"232.25\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.125, -12)\"><rect></rect><foreignObject width=\"172.25\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Rewrite affected outputs</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-5xq3i1-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-5xq3i1-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Change[\"Content or file change\"] --> Content[\"Content dependency\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Content --> Reprocess[\"Reprocess affected content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Reprocess --> Output[\"Output dependency\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Output --> Rewrite[\"Rewrite affected outputs\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"content-dependency\">Content dependency</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span> states how Core may reuse a plugin's processed content between builds.</p>\n<table>\n  <thead>\n    <tr>\n      <th><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dependencyMode</span></span></code></span></th>\n      <th>Meaning</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span></td>\n      <td>Processing depends only on the source content, its frontmatter, the plugin options, and the declared version.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span></td>\n      <td>Processing reads other content or files through Core. Core records those reads and reprocesses only the consumers.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span></td>\n      <td>Processing depends on inputs Core cannot observe, such as Git, network, time, or process state. Persistent reuse is disabled.</td>\n    </tr>\n  </tbody>\n</table>\n<p>A content-affecting plugin that declares no contract is treated as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>version</span></span></code></span> names the contract. Core also includes the resolved plugin configuration in the cache key, so a change to the options, hooks, or version invalidates the cached entries.</p>\n<h3 id=\"what-core-records\">What Core records</h3>\n<p>Reads made through Core's content APIs become dependencies with stable identities.</p>\n<table>\n  <thead>\n    <tr>\n      <th>Kind</th>\n      <th>Recorded when</th>\n      <th>Identity</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>readContent</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderContent</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderNoteEmbed</span></span></code></span></td>\n      <td>content slug</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>file</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentSource.read</span></span></code></span> and helpers such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>readContentSourceEntry</span></span></code></span></td>\n      <td>file path</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>link</span></span></code></span></td>\n      <td>A link target is resolved to a permalink</td>\n      <td>link id</td>\n    </tr>\n  </tbody>\n</table>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentSource.scan()</span></span></code></span> lists entries but creates no dependency. Direct filesystem, network, or clock access is invisible to Core, so those inputs belong to <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>.</p>\n<h3 id=\"reuse-and-validation\">Reuse and validation</h3>\n<p>On a later build, Core looks up the cached processed content, then re-reads every recorded content, file, and link dependency and compares fingerprints. If any fingerprint changed, Core discards the entry and processes it again.</p>\n<p>The cache skips only Markdown and HTML processing. The post-processing hooks (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostParsed</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostProcessed</span></span></code></span>) and the manifest hook (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onManifestCreated</span></span></code></span>) always run, so manifest-stage work belongs there.</p>\n<h3 id=\"affected-content\">Affected content</h3>\n<p>Core persists each entry's dependency identities in build state and builds a reverse index from them. When a dependency changes, Core marks the dependent entry and propagates the invalidation to its dependents transitively. When content is added or removed, entries that link to a changed target are invalidated as well. On the first build, or whenever no previous state is available, every note is processed.</p>\n<h2 id=\"output-dependency\">Output dependency</h2>\n<p>Output dependencies are separate from content dependencies. Each type reacts to a different part of the change set.</p>\n<table>\n  <thead>\n    <tr>\n      <th>Type</th>\n      <th>Affected when</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content { slug }</span></span></code></span></td>\n      <td>That content changed.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tag { tag }</span></span></code></span></td>\n      <td>Content carrying that tag changed.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>folder { folder }</span></span></code></span></td>\n      <td>Content in that folder changed.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span></td>\n      <td>Any content changed.</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span></td>\n      <td>Always. Core also requests full output regeneration.</td>\n    </tr>\n  </tbody>\n</table>\n<p>Declare them in the following places.</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes[].outputDependencies</span></span></code></span> for a plugin page.</li>\n  <li>Root <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>outputDependencies</span></span></code></span> for a plugin that updates existing manifest entry HTML in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onManifestCreated</span></span></code></span>. Core adds them to every content output.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.output.emit(..., { dependencies })</span></span></code></span> for a generated output. Without declared dependencies, a generated output is <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span>.</li>\n</ul>\n<p>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tag</span></span></code></span>, or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>folder</span></span></code></span> when the scope is known, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span> for a manifest-wide collection transform. Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span> only when the input cannot be represented.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span> describe processed-content reuse, not output reuse. A plugin can safely use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span> while declaring a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span> output dependency, or use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span> while a generated output has a narrow <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span> dependency. An incorrect output declaration can preserve a stale file, so use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span> whenever the output scope cannot be stated completely. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span> deliberately trades incremental SSG for a full output render.</p>\n<h2 id=\"rules-for-plugin-authors\">Rules for plugin authors</h2>\n<ul>\n  <li>Declare <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span> on every content-affecting plugin.</li>\n  <li>Read other content and files only through Core APIs so the reads are recorded.</li>\n  <li>Do not keep a content map, rescan the vault, or maintain plugin-specific incremental state.</li>\n  <li>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span> when an input cannot be observed. A broad rebuild is acceptable; a stale result is not.</li>\n  <li>Declare output dependencies for manifest-stage mutations and generated outputs.</li>\n</ul>\n<p>See <a href=\"/en/docs/reference/plugin-api\">Plugin API</a> for the exact fields and <a href=\"/en/docs/framework/build-system\">Build System</a> for the build lifecycle.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Build Dependency Contract Core owns incremental invalidation. A plugin does not compute which content is affected, and it does not keep its own dependency state","tags":[]},{"id":"https://riebeckite.dev/docs/framework/build-dependency","url":"https://riebeckite.dev/docs/framework/build-dependency","title":"build-dependency","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"build-dependency-contract\">Build Dependency Contract</h1>\n<p>Incremental Buildの無効化はCoreの責務です。PluginはどのContentが影響を受けるかを計算せず、依存stateも自分では持ちません。契約を宣言すると、何を再利用するかはCoreが決めます。</p>\n<p>Pluginが関わる契約は、Content DependencyとOutput Dependencyの二つです。前者は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span>で、Coreがどのsource Contentを処理し直すかを決めます。後者は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>outputDependencies</span></span></code></span>と<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.output.emit</span></span></code></span>で、Coreがどの出力ファイルを書き直すかを決めます。両者は独立した契約です。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-jz5402\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1277.234375px;\" viewBox=\"0 0 1277.234375 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-jz5402{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-jz5402 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-jz5402 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-jz5402 .error-icon{fill:#552222;}#rr-mermaid-jz5402 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-jz5402 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-jz5402 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-jz5402 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-jz5402 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-jz5402 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-jz5402 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-jz5402 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-jz5402 .marker.cross{stroke:#333333;}#rr-mermaid-jz5402 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-jz5402 p{margin:0;}#rr-mermaid-jz5402 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-jz5402 .cluster-label text{fill:#333;}#rr-mermaid-jz5402 .cluster-label span{color:#333;}#rr-mermaid-jz5402 .cluster-label span p{background-color:transparent;}#rr-mermaid-jz5402 .label text,#rr-mermaid-jz5402 span{fill:#333;color:#333;}#rr-mermaid-jz5402 .node rect,#rr-mermaid-jz5402 .node circle,#rr-mermaid-jz5402 .node ellipse,#rr-mermaid-jz5402 .node polygon,#rr-mermaid-jz5402 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-jz5402 .rough-node .label text,#rr-mermaid-jz5402 .node .label text,#rr-mermaid-jz5402 .image-shape .label,#rr-mermaid-jz5402 .icon-shape .label{text-anchor:middle;}#rr-mermaid-jz5402 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-jz5402 .rough-node .label,#rr-mermaid-jz5402 .node .label,#rr-mermaid-jz5402 .image-shape .label,#rr-mermaid-jz5402 .icon-shape .label{text-align:center;}#rr-mermaid-jz5402 .node.clickable{cursor:pointer;}#rr-mermaid-jz5402 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-jz5402 .arrowheadPath{fill:#333333;}#rr-mermaid-jz5402 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-jz5402 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-jz5402 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-jz5402 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-jz5402 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-jz5402 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-jz5402 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-jz5402 .cluster text{fill:#333;}#rr-mermaid-jz5402 .cluster span{color:#333;}#rr-mermaid-jz5402 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-jz5402 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-jz5402 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-jz5402 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-jz5402 rect.text{fill:none;stroke-width:0;}#rr-mermaid-jz5402 .icon-shape,#rr-mermaid-jz5402 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-jz5402 .icon-shape p,#rr-mermaid-jz5402 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-jz5402 .icon-shape .label rect,#rr-mermaid-jz5402 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-jz5402 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-jz5402 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-jz5402 .node .neo-node{stroke:#9370DB;}#rr-mermaid-jz5402 [data-look=\"neo\"].node rect,#rr-mermaid-jz5402 [data-look=\"neo\"].cluster rect,#rr-mermaid-jz5402 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jz5402 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-jz5402 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-jz5402 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jz5402 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-jz5402 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jz5402 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-jz5402 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jz5402 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jz5402 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-jz5402_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-jz5402_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M216.5,35L220.667,35C224.833,35,233.167,35,240.833,35C248.5,35,255.5,35,259,35L262.5,35\" id=\"rr-mermaid-jz5402-L_Change_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Change_Content_0\" data-points=\"W3sieCI6MjE2LjUsInkiOjM1fSx7IngiOjI0MS41LCJ5IjozNX0seyJ4IjoyNjYuNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jz5402_flowchart-v2-pointEnd)\"></path><path d=\"M476.828,35L480.995,35C485.161,35,493.495,35,501.161,35C508.828,35,515.828,35,519.328,35L522.828,35\" id=\"rr-mermaid-jz5402-L_Content_Reprocess_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Content_Reprocess_0\" data-points=\"W3sieCI6NDc2LjgyODEyNSwieSI6MzV9LHsieCI6NTAxLjgyODEyNSwieSI6MzV9LHsieCI6NTI2LjgyODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jz5402_flowchart-v2-pointEnd)\"></path><path d=\"M738.875,35L743.042,35C747.208,35,755.542,35,763.208,35C770.875,35,777.875,35,781.375,35L784.875,35\" id=\"rr-mermaid-jz5402-L_Reprocess_Output_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Reprocess_Output_0\" data-points=\"W3sieCI6NzM4Ljg3NSwieSI6MzV9LHsieCI6NzYzLjg3NSwieSI6MzV9LHsieCI6Nzg4Ljg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jz5402_flowchart-v2-pointEnd)\"></path><path d=\"M991.203,35L995.37,35C999.536,35,1007.87,35,1015.536,35C1023.203,35,1030.203,35,1033.703,35L1037.203,35\" id=\"rr-mermaid-jz5402-L_Output_Rewrite_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Output_Rewrite_0\" data-points=\"W3sieCI6OTkxLjIwMzEyNSwieSI6MzV9LHsieCI6MTAxNi4yMDMxMjUsInkiOjM1fSx7IngiOjEwNDEuMjAzMTI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jz5402_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Change_Content_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Content_Reprocess_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Reprocess_Output_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Output_Rewrite_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-jz5402-flowchart-Change-0\" data-look=\"classic\" transform=\"translate(112.25, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-104.25\" y=\"-27\" width=\"208.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-74.25, -12)\"><rect></rect><foreignObject width=\"148.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Contentまたはfileの変更</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jz5402-flowchart-Content-1\" data-look=\"classic\" transform=\"translate(371.6640625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.1640625\" y=\"-27\" width=\"210.328125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.1640625, -12)\"><rect></rect><foreignObject width=\"150.328125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Dependency</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jz5402-flowchart-Reprocess-3\" data-look=\"classic\" transform=\"translate(632.8515625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-106.0234375\" y=\"-27\" width=\"212.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-76.0234375, -12)\"><rect></rect><foreignObject width=\"152.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>影響するContentの再処理</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jz5402-flowchart-Output-5\" data-look=\"classic\" transform=\"translate(890.0390625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.1640625\" y=\"-27\" width=\"202.328125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.1640625, -12)\"><rect></rect><foreignObject width=\"142.328125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Output Dependency</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jz5402-flowchart-Rewrite-7\" data-look=\"classic\" transform=\"translate(1155.21875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.015625\" y=\"-27\" width=\"228.03125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.015625, -12)\"><rect></rect><foreignObject width=\"168.03125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>影響するOutputの再書き込み</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-jz5402-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-jz5402-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Change[\"Contentまたはfileの変更\"] --> Content[\"Content Dependency\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Content --> Reprocess[\"影響するContentの再処理\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Reprocess --> Output[\"Output Dependency\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Output --> Rewrite[\"影響するOutputの再書き込み\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"content-dependency\">Content Dependency</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span>は、Pluginの処理済みContentをBuild間でどう再利用してよいかを示す契約です。</p>\n<table>\n  <thead>\n    <tr>\n      <th><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dependencyMode</span></span></code></span></th>\n      <th>意味</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span></td>\n      <td>処理結果がsource Content、frontmatter、Pluginのoptions、宣言したversionだけに依存する。</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span></td>\n      <td>他のContentやfileをCore経由で読む。Coreがその読み取りを記録し、利用側だけを再処理する。</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span></td>\n      <td>Git、network、時刻、process stateなど、Coreが観測できない入力に依存する。永続的な再利用は行わない。</td>\n    </tr>\n  </tbody>\n</table>\n<p>Contentを変化させるPluginが契約を宣言していない場合、そのPluginは<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>として扱われます。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>version</span></span></code></span>は契約の名前です。Coreは解決済みのPlugin設定もcache keyに含めます。そのため、options、hooks、versionのいずれかを変えると、cacheされたentryは無効です。</p>\n<h3 id=\"coreが記録する入力\">Coreが記録する入力</h3>\n<p>CoreのContent API経由の読み取りが、安定したidentityを持つdependencyになります。</p>\n<table>\n  <thead>\n    <tr>\n      <th>種類</th>\n      <th>記録される場面</th>\n      <th>identity</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>readContent</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderContent</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderNoteEmbed</span></span></code></span></td>\n      <td>Contentのslug</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>file</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentSource.read</span></span></code></span>と<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>readContentSourceEntry</span></span></code></span>などのhelper</td>\n      <td>file path</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>link</span></span></code></span></td>\n      <td>link先がpermalinkに解決されたとき</td>\n      <td>link id</td>\n    </tr>\n  </tbody>\n</table>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentSource.scan()</span></span></code></span>はentryを列挙するだけでdependencyを作りません。filesystem、network、時計への直接アクセスはCoreから見えないため、それらの入力は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>です。</p>\n<h3 id=\"再利用と検証\">再利用と検証</h3>\n<p>次のBuildでCoreは、cacheされた処理済みContentを取り出したあと、記録したcontent、file、linkのdependencyをすべて読み直し、fingerprintを比べます。一つでも変わっていれば、そのentryを捨てて処理し直します。</p>\n<p>cacheが省略するのはMarkdownとHTMLの処理だけです。post処理のhooks（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostParsed</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostProcessed</span></span></code></span>）とmanifestのhook（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onManifestCreated</span></span></code></span>）は、cacheの有無にかかわらず常に実行対象です。manifest段階の処理はそこに置いてください。</p>\n<h3 id=\"影響範囲の決定\">影響範囲の決定</h3>\n<p>Coreは各entryのdependency identityをbuild stateに永続化し、そこから逆引きindexを作ります。dependencyが変わると、依存するentryに印を付け、さらにその依存先へと無効化を伝播させます。Contentが追加または削除された場合も、変わったlink先を参照していたentryは無効です。初回Buildや前回のstateが無いときは、すべてのnoteを処理します。</p>\n<h2 id=\"output-dependency\">Output Dependency</h2>\n<p>Output DependencyはContent Dependencyとは別の契約です。種類ごとに、change setの異なる部分に反応します。</p>\n<table>\n  <thead>\n    <tr>\n      <th>種類</th>\n      <th>影響を受ける条件</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content { slug }</span></span></code></span></td>\n      <td>そのContentが変わったとき</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tag { tag }</span></span></code></span></td>\n      <td>そのtagを持つContentが変わったとき</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>folder { folder }</span></span></code></span></td>\n      <td>そのfolderのContentが変わったとき</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span></td>\n      <td>いずれかのContentが変わったとき</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span></td>\n      <td>常に。Coreは全Outputの再生成も要求する。</td>\n    </tr>\n  </tbody>\n</table>\n<p>宣言する場所は三つです。</p>\n<table>\n  <thead>\n    <tr>\n      <th>対象</th>\n      <th>宣言場所</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Plugin page</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes[].outputDependencies</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>manifest entry HTMLを更新するPlugin</td>\n      <td>rootの<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>outputDependencies</span></span></code></span>。CoreがすべてのContent Outputに加算する。</td>\n    </tr>\n    <tr>\n      <td>生成output</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.output.emit(..., { dependencies })</span></span></code></span>。未宣言なら<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span>。</td>\n    </tr>\n  </tbody>\n</table>\n<p>対象が特定できる場合は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tag</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>folder</span></span></code></span>を使ってください。manifest全体に依存する集合変換は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span>です。表現できない入力だけに<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span>を使います。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>は処理済みContentの再利用を示す契約であり、Outputの再利用を示すものではありません。たとえばPluginは<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>none</span></span></code></span>と<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>global</span></span></code></span> output dependencyを安全に組み合わせられます。また、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tracked</span></span></code></span>でも生成outputには狭い<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span> dependencyを指定できます。誤ったoutput宣言では古いfileが残るため、outputの範囲を完全に表現できない場合は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span>を使ってください。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span>ではincremental SSGよりfull output renderを優先します。</p>\n<h2 id=\"plugin作者向けのルール\">Plugin作者向けのルール</h2>\n<ul>\n  <li>Contentを変化させるPluginはすべて<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>processedContentCache</span></span></code></span>を宣言します。</li>\n  <li>他のContentやfileはCoreのAPI経由でのみ読み、dependencyとして記録させます。</li>\n  <li>Content mapを持ったり、vaultを再走査したり、Plugin固有のincremental stateを保存したりしません。</li>\n  <li>観測できない入力がある場合は<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unsafe</span></span></code></span>を使います。広い再処理は許容できますが、古い結果の再利用は許容できません。</li>\n  <li>manifest段階の変更と生成outputにはOutput Dependencyを宣言します。</li>\n</ul>\n<p>正確なfieldは<a href=\"/docs/reference/plugin-api\">Plugin API</a>、Build lifecycleは<a href=\"/docs/framework/build-system\">Build System</a>を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Build Dependency Contract Incremental Buildの無効化はCoreの責務です。PluginはどのContentが影響を受けるかを計算せず、依存stateも自分では持ちません。契約を宣言すると、何を再利用するかはCoreが決めます。 Pluginが関わる契約は、Content Dep","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/build-system","url":"https://riebeckite.dev/en/docs/framework/build-system","title":"build-system.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"build-system\">Build System</h1>\n<h2 id=\"what-a-build-owns\">What a build owns</h2>\n<p>An explicit build resolves configuration and plugins, reads content, runs content and plugin pipelines, creates the manifest and content graph, emits registered assets and client entries, and records successful incremental state. The HonoX integration then builds the application with the generated entries.</p>\n<p>Build state is application-scoped at <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/build/content-state.json</span></span></code></span>. It is an optimization, not a source of truth. A missing, incompatible, or unsafe state causes an initial/full path; <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--full</span></span></code></span> requests that path explicitly. State is saved only after a successful build, so a failure retains the prior valid state.</p>\n<h2 id=\"incremental-inputs\">Incremental inputs</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> metadata may contain mtime, size, ETag, or a hash. Treat mtime as a hint only: timestamp-only comparisons are not sufficient for correctness when metadata can be unreliable. Plugin cache is separate from build state, plugin-scoped, JSON-serializable, regenerable build-time data. Neither may be required at Workers request time.</p>\n<p>State tracks each entry's fingerprint together with its dependencies: the notes it links to (whose resolved permalink it may embed) and the assets it references (whose metadata, such as attachment size, it may render). A changed dependency invalidates the dependent entry and, transitively, its dependents. Added or removed entries change which link targets resolve, so entries that reference an affected target are invalidated as well. On the first build, or when no previous state is available, every note is processed. The <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> state directory is build-time state, not content, and is never scanned.</p>\n<h2 id=\"persistent-per-content-cache\">Persistent per-content cache</h2>\n<p>The processed Markdown result for each note is stored in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/cache/content/v3</span></span></code></span>. A build without an entry is a <strong>cold build</strong>. Restoring compatible entries before a later build makes it a <strong>warm build</strong>: unchanged notes can reuse their processed HTML and frontmatter while the normal build still generates <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span>.</p>\n<p>An entry key includes its Markdown source, parsed frontmatter, the cache schema, and the processing-pipeline fingerprint. The fingerprint includes content-filter configuration, plugin configuration and order, plugin <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>cacheVersion</span></span></code></span> and processed-content cache contracts, and the Core compatibility version. Cached content also records logical content, file, and link dependencies; changed or missing dependencies are misses. Unsafe plugins bypass this cache. Cache data contains logical slugs and normalized source paths rather than workspace paths, so it can be copied to a different runner or workspace on the same operating system.</p>\n<p>This cache is an optimization, never a correctness dependency. Missing entries, incompatible versions, malformed metadata, fingerprint or dependency mismatches, and corrupted JSON are safe misses. Delete <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/cache</span></span></code></span> to force cold processing; a filesystem access failure still fails the build because it requires attention. The build log reports one <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Persistent content cache</span></span></code></span> line with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hits</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>misses</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>bypasses</span></span></code></span>, plus a concise <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Content</span></span></code></span> line (total, processed, and reused counts) and the total <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Build complete</span></span></code></span> duration.</p>\n<p>For GitHub Actions, cache <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/cache</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/build/content-state.json</span></span></code></span>, not <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span>. The output cache (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/ssg-output-cache.json</span></span></code></span>) stays local because its build-time saving does not offset the transfer cost. The generated Cloudflare workflow does this automatically; see <a href=\"/en/docs/guides/deployment/github-actions\">GitHub Actions</a>.</p>\n<h2 id=\"output-level-incremental-ssg\">Output-level incremental SSG</h2>\n<p>Persistent per-content cache reuses Markdown and plugin processing. Output-level incremental SSG separately reuses final routes and generated files. After building the current manifest, Core compares its output descriptors with the previous successful state. HonoX renders only affected content and plugin-page routes, restores unchanged generated output from <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/ssg-output-cache.json</span></span></code></span>, and removes outputs no longer owned by the site. The build log reports an <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>SSG outputs</span></span></code></span> line with the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rendered</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>reused</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>removed</span></span></code></span> counts.</p>\n<p>The state and output cache are optimizations. A missing, incompatible, malformed, or incomplete output state, an application/configuration fingerprint change, or an <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unknown</span></span></code></span> output dependency makes HonoX render every output. Delete <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/build/content-state.json</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/ssg-output-cache.json</span></span></code></span> to force that safe path. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span> is not a cache: Vite may recreate it, and unchanged site outputs are re-emitted from the output cache. This is a build optimization only; it does not change Wrangler's Cloudflare Workers deployment protocol.</p>\n<h2 id=\"commands-and-lifecycle\">Commands and lifecycle</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">                 # configured project build</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\"> # content/application build</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> profile</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span></code></pre>\n  </div>\n</figure>\n<p>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> for validation and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> for health diagnostics; neither substitutes for a build. Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span> to view existing state, never to manufacture it. See <a href=\"/en/docs/reference/cli\">CLI</a>, <a href=\"/en/docs/framework/inspector\">Inspector</a>, and <a href=\"/en/docs/framework/content-system\">Content system</a>.</p>\n<h2 id=\"safe-changes\">Safe changes</h2>\n<p>When adding generated output, make its owner and cleanup behavior explicit. Do not silently write during validation or inspection. Cache keys must include every relevant version/input; raise a full-build fallback rather than reusing uncertain output. Keep failures observable and avoid deleting a previous successful state before replacement is known to be valid.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Build System What a build owns An explicit build resolves configuration and plugins, reads content, runs content and plugin pipelines, creates the manifest and ","tags":[]},{"id":"https://riebeckite.dev/docs/framework/build-system","url":"https://riebeckite.dev/docs/framework/build-system","title":"build-system","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"build-system\">Build System</h1>\n<p>Riebeckite の Build System は、Markdown などのコンテンツと設定を読み込み、最終的な Web サイトを生成する仕組みです。</p>\n<p>通常の build では、大きく次の処理を行います。</p>\n<ol>\n  <li>設定とプラグインを読み込む</li>\n  <li>Markdown などのコンテンツを読み込む</li>\n  <li>プラグインによる変換を行う</li>\n  <li>公開するページやリンクを決定する</li>\n  <li>サイト全体で必要な情報を整理する</li>\n  <li>画像などのアセットやブラウザ用のコードを生成する</li>\n  <li>HonoX を使って Web サイトを build する</li>\n</ol>\n<p>Riebeckite は、前回の build 結果を利用して、変更された部分だけを処理する <strong>incremental build</strong> にも対応しています。</p>\n<h2 id=\"build-の流れ\">Build の流れ</h2>\n<p>build を実行すると、最初に Riebeckite が設定と使用するプラグインを読み込みます。</p>\n<p>次に、Content Source から Markdown などのコンテンツを読み込み、設定されたプラグインによる変換を行います。</p>\n<p>このとき、Markdown を HTML に変換するだけでなく、次のような情報も決定します。</p>\n<ul>\n  <li>どのコンテンツを公開するか</li>\n  <li>各ページをどの URL で公開するか</li>\n  <li>ページ同士がどのようにリンクしているか</li>\n  <li>どの画像やファイルが必要か</li>\n  <li>プラグインが追加するページやファイル</li>\n</ul>\n<p>これらの情報をもとに、サイト全体のページ情報やリンク関係、必要なアセットなどを生成します。</p>\n<p>最後に HonoX が、それまでに生成された情報を使って Web サイト全体を build します。</p>\n<h2 id=\"incremental-build\">Incremental Build</h2>\n<p>毎回すべてのコンテンツを最初から処理すると、サイトが大きくなるほど build に時間がかかります。</p>\n<p>そこで Riebeckite は、前回の build から何が変更されたかを確認し、必要な部分だけを処理します。</p>\n<p>前回の build 情報は、次のファイルに保存されます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/build/content-state.json</span></span></code></pre>\n  </div>\n</figure>\n<p>この情報は build を高速化するためのものであり、サイトを正しく生成するために必須のものではありません。</p>\n<p>たとえば、</p>\n<ul>\n  <li>前回の情報が存在しない</li>\n  <li>現在のバージョンでは利用できない</li>\n  <li>安全に再利用できるか判断できない</li>\n</ul>\n<p>といった場合は、無理に再利用せず、必要な処理を最初から行います。</p>\n<p>つまり、<strong>高速化のための情報がなくても、同じサイトを正しく生成できること</strong>が前提です。</p>\n<h3 id=\"full-build\">Full Build</h3>\n<p>前回の build 情報を使わず、すべてを処理したい場合は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--full</span></span></code></span> を使用します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span></code></pre>\n  </div>\n</figure>\n<p>incremental build の結果に問題がありそうな場合の確認や、build 時間を比較したい場合などに利用できます。</p>\n<h3 id=\"build-に失敗した場合\">Build に失敗した場合</h3>\n<p>前回の build 情報は、<strong>build が正常に完了した場合だけ更新されます</strong>。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-5o42km\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 414px;\" viewBox=\"0 0 414 586.03125\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-5o42km{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-5o42km .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-5o42km .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-5o42km .error-icon{fill:#552222;}#rr-mermaid-5o42km .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-5o42km .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-5o42km .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-5o42km .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-5o42km .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-5o42km .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-5o42km .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-5o42km .marker{fill:#333333;stroke:#333333;}#rr-mermaid-5o42km .marker.cross{stroke:#333333;}#rr-mermaid-5o42km svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-5o42km p{margin:0;}#rr-mermaid-5o42km .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-5o42km .cluster-label text{fill:#333;}#rr-mermaid-5o42km .cluster-label span{color:#333;}#rr-mermaid-5o42km .cluster-label span p{background-color:transparent;}#rr-mermaid-5o42km .label text,#rr-mermaid-5o42km span{fill:#333;color:#333;}#rr-mermaid-5o42km .node rect,#rr-mermaid-5o42km .node circle,#rr-mermaid-5o42km .node ellipse,#rr-mermaid-5o42km .node polygon,#rr-mermaid-5o42km .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-5o42km .rough-node .label text,#rr-mermaid-5o42km .node .label text,#rr-mermaid-5o42km .image-shape .label,#rr-mermaid-5o42km .icon-shape .label{text-anchor:middle;}#rr-mermaid-5o42km .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-5o42km .rough-node .label,#rr-mermaid-5o42km .node .label,#rr-mermaid-5o42km .image-shape .label,#rr-mermaid-5o42km .icon-shape .label{text-align:center;}#rr-mermaid-5o42km .node.clickable{cursor:pointer;}#rr-mermaid-5o42km .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-5o42km .arrowheadPath{fill:#333333;}#rr-mermaid-5o42km .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-5o42km .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-5o42km .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-5o42km .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-5o42km .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-5o42km .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-5o42km .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-5o42km .cluster text{fill:#333;}#rr-mermaid-5o42km .cluster span{color:#333;}#rr-mermaid-5o42km .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-5o42km .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-5o42km div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-5o42km .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-5o42km rect.text{fill:none;stroke-width:0;}#rr-mermaid-5o42km .icon-shape,#rr-mermaid-5o42km .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-5o42km .icon-shape p,#rr-mermaid-5o42km .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-5o42km .icon-shape .label rect,#rr-mermaid-5o42km .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-5o42km .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-5o42km .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-5o42km .node .neo-node{stroke:#9370DB;}#rr-mermaid-5o42km [data-look=\"neo\"].node rect,#rr-mermaid-5o42km [data-look=\"neo\"].cluster rect,#rr-mermaid-5o42km [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5o42km [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-5o42km [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-5o42km [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5o42km [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-5o42km [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5o42km [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-5o42km [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5o42km [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-5o42km :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-5o42km_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-5o42km_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M198,62L198,66.167C198,70.333,198,78.667,198,86.333C198,94,198,101,198,104.5L198,108\" id=\"rr-mermaid-5o42km-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTk4LCJ5Ijo2Mn0seyJ4IjoxOTgsInkiOjg3fSx7IngiOjE5OCwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5o42km_flowchart-v2-pointEnd)\"></path><path d=\"M198,166L198,170.167C198,174.333,198,182.667,198,190.333C198,198,198,205,198,208.5L198,212\" id=\"rr-mermaid-5o42km-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTk4LCJ5IjoxNjZ9LHsieCI6MTk4LCJ5IjoxOTF9LHsieCI6MTk4LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5o42km_flowchart-v2-pointEnd)\"></path><path d=\"M163.976,312.007L150.98,323.844C137.984,335.682,111.992,359.356,98.996,376.694C86,394.031,86,405.031,86,410.531L86,416.031\" id=\"rr-mermaid-5o42km-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTYzLjk3NTYxNTA5ODE5NjcsInkiOjMxMi4wMDY4NjUwOTgxOTY2N30seyJ4Ijo4NiwieSI6MzgzLjAzMTI1fSx7IngiOjg2LCJ5Ijo0MjAuMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5o42km_flowchart-v2-pointEnd)\"></path><path d=\"M232.024,312.007L245.02,323.844C258.016,335.682,284.008,359.356,297.004,376.694C310,394.031,310,405.031,310,410.531L310,416.031\" id=\"rr-mermaid-5o42km-L_C_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6MjMyLjAyNDM4NDkwMTgwMzMsInkiOjMxMi4wMDY4NjUwOTgxOTY2N30seyJ4IjozMTAsInkiOjM4My4wMzEyNX0seyJ4IjozMTAsInkiOjQyMC4wMzEyNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5o42km_flowchart-v2-pointEnd)\"></path><path d=\"M310,474.031L310,478.198C310,482.365,310,490.698,310,498.365C310,506.031,310,513.031,310,516.531L310,520.031\" id=\"rr-mermaid-5o42km-L_E_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MzEwLCJ5Ijo0NzQuMDMxMjV9LHsieCI6MzEwLCJ5Ijo0OTkuMDMxMjV9LHsieCI6MzEwLCJ5Ijo1MjQuMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-5o42km_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(86, 383.03125)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(310, 383.03125)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-A-0\" data-look=\"classic\" transform=\"translate(198, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-78\" y=\"-27\" width=\"156\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48, -12)\"><rect></rect><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>前回成功した状態</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-B-1\" data-look=\"classic\" transform=\"translate(198, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.015625\" y=\"-27\" width=\"124.03125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.015625, -12)\"><rect></rect><foreignObject width=\"64.03125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build 開始</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-C-3\" data-look=\"classic\" transform=\"translate(198, 281.015625)\"><polygon points=\"65.015625,0 130.03125,-65.015625 65.015625,-130.03125 0,-65.015625\" class=\"label-container\" transform=\"translate(-64.515625, 65.015625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-38.015625, -12)\"><rect></rect><foreignObject width=\"76.03125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build 成功？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-D-5\" data-look=\"classic\" transform=\"translate(86, 447.03125)\"><rect class=\"basic label-container\" style=\"\" x=\"-78\" y=\"-27\" width=\"156\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48, -12)\"><rect></rect><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>新しい状態を保存</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-E-7\" data-look=\"classic\" transform=\"translate(310, 447.03125)\"><rect class=\"basic label-container\" style=\"\" x=\"-96\" y=\"-27\" width=\"192\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66, -12)\"><rect></rect><foreignObject width=\"132\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>新しい状態は保存しない</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-5o42km-flowchart-F-9\" data-look=\"classic\" transform=\"translate(310, 551.03125)\"><rect class=\"basic label-container\" style=\"\" x=\"-96\" y=\"-27\" width=\"192\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66, -12)\"><rect></rect><foreignObject width=\"132\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>前回成功した状態を維持</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-5o42km-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-5o42km-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"前回成功した状態\"] --> B[\"Build 開始\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B --> C{\"Build 成功？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    C -->|Yes| D[\"新しい状態を保存\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    C -->|No| E[\"新しい状態は保存しない\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    E --> F[\"前回成功した状態を維持\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>新しい build が途中で失敗しても、前回正常に完了した build の情報は残ります。</p>\n<p>失敗途中の情報で、正常だった状態を上書きすることはありません。</p>\n<h2 id=\"変更をどう検出するか\">変更をどう検出するか</h2>\n<p>Riebeckite は、Content Source が提供するファイル情報を使って、コンテンツが変更されたかを判断します。</p>\n<p>たとえば、次のような情報を利用できます。</p>\n<ul>\n  <li>更新日時</li>\n  <li>ファイルサイズ</li>\n  <li>ETag</li>\n  <li>ファイル内容から計算した hash</li>\n</ul>\n<p>利用できる情報は Content Source によって異なります。</p>\n<p>更新日時だけに頼るのではなく、利用可能な情報を組み合わせて、前回の結果を安全に再利用できるか判断します。</p>\n<h2 id=\"関連するページが変更された場合\">関連するページが変更された場合</h2>\n<p>ファイル自体を編集していなくても、そのファイルが参照しているページなどが変更されると、再生成が必要になることがあります。</p>\n<p>たとえば <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>a.md</span></span></code></span> が <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>b.md</span></span></code></span> にリンクしているとします。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-q7uojb\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1048.828125px;\" viewBox=\"0 0 1048.828125 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-q7uojb{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-q7uojb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-q7uojb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-q7uojb .error-icon{fill:#552222;}#rr-mermaid-q7uojb .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-q7uojb .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-q7uojb .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-q7uojb .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-q7uojb .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-q7uojb .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-q7uojb .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-q7uojb .marker{fill:#333333;stroke:#333333;}#rr-mermaid-q7uojb .marker.cross{stroke:#333333;}#rr-mermaid-q7uojb svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-q7uojb p{margin:0;}#rr-mermaid-q7uojb .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-q7uojb .cluster-label text{fill:#333;}#rr-mermaid-q7uojb .cluster-label span{color:#333;}#rr-mermaid-q7uojb .cluster-label span p{background-color:transparent;}#rr-mermaid-q7uojb .label text,#rr-mermaid-q7uojb span{fill:#333;color:#333;}#rr-mermaid-q7uojb .node rect,#rr-mermaid-q7uojb .node circle,#rr-mermaid-q7uojb .node ellipse,#rr-mermaid-q7uojb .node polygon,#rr-mermaid-q7uojb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-q7uojb .rough-node .label text,#rr-mermaid-q7uojb .node .label text,#rr-mermaid-q7uojb .image-shape .label,#rr-mermaid-q7uojb .icon-shape .label{text-anchor:middle;}#rr-mermaid-q7uojb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-q7uojb .rough-node .label,#rr-mermaid-q7uojb .node .label,#rr-mermaid-q7uojb .image-shape .label,#rr-mermaid-q7uojb .icon-shape .label{text-align:center;}#rr-mermaid-q7uojb .node.clickable{cursor:pointer;}#rr-mermaid-q7uojb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-q7uojb .arrowheadPath{fill:#333333;}#rr-mermaid-q7uojb .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-q7uojb .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-q7uojb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-q7uojb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-q7uojb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-q7uojb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-q7uojb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-q7uojb .cluster text{fill:#333;}#rr-mermaid-q7uojb .cluster span{color:#333;}#rr-mermaid-q7uojb .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-q7uojb .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-q7uojb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-q7uojb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-q7uojb rect.text{fill:none;stroke-width:0;}#rr-mermaid-q7uojb .icon-shape,#rr-mermaid-q7uojb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-q7uojb .icon-shape p,#rr-mermaid-q7uojb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-q7uojb .icon-shape .label rect,#rr-mermaid-q7uojb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-q7uojb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-q7uojb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-q7uojb .node .neo-node{stroke:#9370DB;}#rr-mermaid-q7uojb [data-look=\"neo\"].node rect,#rr-mermaid-q7uojb [data-look=\"neo\"].cluster rect,#rr-mermaid-q7uojb [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-q7uojb [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-q7uojb [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-q7uojb [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-q7uojb [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-q7uojb [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-q7uojb [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-q7uojb [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-q7uojb [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-q7uojb :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-q7uojb_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-q7uojb_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M284.25,35L291.417,35C298.583,35,312.917,35,326.583,35C340.25,35,353.25,35,359.75,35L366.25,35\" id=\"rr-mermaid-q7uojb-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6Mjg0LjI1LCJ5IjozNX0seyJ4IjozMjcuMjUsInkiOjM1fSx7IngiOjM3MC4yNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-q7uojb_flowchart-v2-pointEnd)\"></path><path d=\"M102.672,35L109.839,35C117.005,35,131.339,35,145.005,35C158.672,35,171.672,35,178.172,35L184.672,35\" id=\"rr-mermaid-q7uojb-L_C_A_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_A_0\" data-points=\"W3sieCI6MTAyLjY3MTg3NSwieSI6MzV9LHsieCI6MTQ1LjY3MTg3NSwieSI6MzV9LHsieCI6MTg4LjY3MTg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-q7uojb_flowchart-v2-pointEnd)\"></path><path d=\"M465.828,35L475.983,35C486.138,35,506.448,35,526.091,35C545.734,35,564.711,35,574.199,35L583.688,35\" id=\"rr-mermaid-q7uojb-L_B_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6NDY1LjgyODEyNSwieSI6MzV9LHsieCI6NTI2Ljc1NzgxMjUsInkiOjM1fSx7IngiOjU4Ny42ODc1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-q7uojb_flowchart-v2-pointEnd)\"></path><path d=\"M735.703,35L744.87,35C754.036,35,772.37,35,790.036,35C807.703,35,824.703,35,833.203,35L841.703,35\" id=\"rr-mermaid-q7uojb-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NzM1LjcwMzEyNSwieSI6MzV9LHsieCI6NzkwLjcwMzEyNSwieSI6MzV9LHsieCI6ODQ1LjcwMzEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-q7uojb_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(327.25, 35)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-18, -12)\"><foreignObject width=\"36\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>リンク</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(145.671875, 35)\"><g class=\"label\" data-id=\"L_C_A_0\" transform=\"translate(-18, -12)\"><foreignObject width=\"36\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>リンク</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(526.7578125, 35)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-35.9296875, -12)\"><foreignObject width=\"71.859375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>URL が変更</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(790.703125, 35)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-30, -12)\"><foreignObject width=\"60\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>影響を確認</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-q7uojb-flowchart-A-0\" data-look=\"classic\" transform=\"translate(236.4609375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.7890625\" y=\"-27\" width=\"95.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.7890625, -12)\"><rect></rect><foreignObject width=\"35.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>a.md</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-q7uojb-flowchart-B-1\" data-look=\"classic\" transform=\"translate(418.0390625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.7890625\" y=\"-27\" width=\"95.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.7890625, -12)\"><rect></rect><foreignObject width=\"35.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>b.md</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-q7uojb-flowchart-C-2\" data-look=\"classic\" transform=\"translate(55.3359375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.3359375\" y=\"-27\" width=\"94.671875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.3359375, -12)\"><rect></rect><foreignObject width=\"34.671875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>c.md</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-q7uojb-flowchart-D-5\" data-look=\"classic\" transform=\"translate(661.6953125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.0078125\" y=\"-27\" width=\"148.015625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.0078125, -12)\"><rect></rect><foreignObject width=\"88.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>a.md を再生成</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-q7uojb-flowchart-E-7\" data-look=\"classic\" transform=\"translate(943.265625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.5625\" y=\"-27\" width=\"195.125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.5625, -12)\"><rect></rect><foreignObject width=\"135.125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>c.md も必要なら再生成</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-q7uojb-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-q7uojb-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"a.md\"] -->|\"リンク\"| B[\"b.md\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    C[\"c.md\"] -->|\"リンク\"| A</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    B -->|\"URL が変更\"| D[\"a.md を再生成\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    D -->|\"影響を確認\"| E[\"c.md も必要なら再生成\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>b.md</span></span></code></span> の URL が変更されると、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>a.md</span></span></code></span> 自体を編集していなくても、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>a.md</span></span></code></span> に書かれているリンクを更新する必要があります。</p>\n<p>そのため Riebeckite は、「ファイルが変更されたか」だけでなく、「そのファイルが何を参照しているか」も記録します。</p>\n<p>たとえば、次のような関係を確認します。</p>\n<ul>\n  <li>リンクしているページ</li>\n  <li>使用している画像やファイル</li>\n  <li>ページの生成結果に影響するその他の情報</li>\n</ul>\n<p>参照先が変更された場合は、その影響を受けるページも再生成します。</p>\n<p>さらに、そのページを参照している別のページにも影響がある場合は、必要な範囲まで再生成します。</p>\n<h3 id=\"コンテンツの追加削除\">コンテンツの追加・削除</h3>\n<p>コンテンツの追加や削除は、既存ファイルの編集より広い範囲に影響する場合があります。</p>\n<p>たとえば、存在しないページへの Wikiリンクがある状態で、新しくそのページが追加されたとします。</p>\n<p>追加前はリンク先を見つけられませんが、追加後は正しいページへリンクできるようになります。</p>\n<p>コンテンツの追加や削除によってリンクの解決結果が変わった場合も、影響するページを再生成します。</p>\n<p>初回 build や、前回の build 情報が存在しない場合は、すべてのコンテンツを処理します。</p>\n<h2 id=\"コンテンツ処理のキャッシュ\">コンテンツ処理のキャッシュ</h2>\n<p>Riebeckite は、Markdown を HTML に変換した結果を次の場所に保存します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/cache/content/v3</span></span></code></pre>\n  </div>\n</figure>\n<p>これにより、変更されていない Markdown を毎回最初から処理する必要がなくなります。</p>\n<p>初めて build する場合など、利用できるキャッシュがない build を <strong>cold build</strong>、前回の処理結果を再利用できる build を <strong>warm build</strong> と呼びます。</p>\n<p>warm build では、変更されていないページの HTML や frontmatter を再利用できます。</p>\n<p>ただし、前回の結果を無条件に再利用するわけではありません。</p>\n<p>Riebeckite は、たとえば次のような変更がないか確認します。</p>\n<ul>\n  <li>Markdown の内容</li>\n  <li>frontmatter</li>\n  <li>Riebeckite のバージョン</li>\n  <li>プラグインの設定や実行順序</li>\n  <li>ページが参照しているコンテンツやファイル</li>\n</ul>\n<p>変更があった場合や、安全に再利用できるか判断できない場合は、そのページを通常どおり処理し直します。</p>\n<p>プラグインについても、処理結果を安全に再利用できることが確認できない場合はキャッシュを使用しません。</p>\n<h3 id=\"キャッシュに問題がある場合\">キャッシュに問題がある場合</h3>\n<p>このキャッシュも build を高速化するためのものであり、サイトの正しさを左右するものではありません。</p>\n<p>次のような場合は、キャッシュを使わず通常の処理に戻ります。</p>\n<ul>\n  <li>キャッシュが存在しない</li>\n  <li>バージョンが合わない</li>\n  <li>保存された情報が壊れている</li>\n  <li>現在のコンテンツや設定と一致しない</li>\n</ul>\n<p>キャッシュを完全に作り直したい場合は、次のディレクトリを削除できます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/cache</span></span></code></pre>\n  </div>\n</figure>\n<p>build log の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Persistent content cache</span></span></code></span> では、キャッシュがどの程度利用されたか確認できます。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hits</span></span></code></span>: 再利用できた数</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>misses</span></span></code></span>: 再処理した数</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>bypasses</span></span></code></span>: 安全性のためキャッシュを使用しなかった数</li>\n</ul>\n<p>あわせて、build log には次の概要も表示されます。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Content</span></span></code></span>: コンテンツの総数、実際に処理した数、再利用によって処理を省略した数</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Build complete</span></span></code></span>: Build 全体の所要時間</li>\n</ul>\n<h3 id=\"github-actions-でのキャッシュ\">GitHub Actions でのキャッシュ</h3>\n<p>GitHub Actions では、生成されたサイトそのものではなく、次の build 用データをキャッシュします。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/cache</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>.riebeckite/build/content-state.json</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span> はキャッシュしません。</p>\n<p>また、最終的なページ生成に使用する <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/ssg-output-cache.json</span></span></code></span> は、ファイルを転送する時間に対して得られる効果が小さいため、ローカルでのみ利用します。</p>\n<p>Cloudflare 用の workflow については <a href=\"/docs/guides/deployment/github-actions\">GitHub Actions</a> を参照してください。</p>\n<h2 id=\"最終ページの再利用\">最終ページの再利用</h2>\n<p>Markdown の処理結果とは別に、Riebeckite は最終的に生成されるページやファイルについても、変更されていないものを再利用できます。</p>\n<p>前回の build と比較して変更の影響を受けていないページは、再度生成する代わりに、次のファイルに保存された結果を利用します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/ssg-output-cache.json</span></span></code></pre>\n  </div>\n</figure>\n<p>たとえば Markdown を 1 ファイルだけ変更した場合、サイト内のすべてのページを生成し直すのではなく、その変更によって影響を受けるページだけを生成できます。</p>\n<p>一方、以前は存在していたものの、現在はサイトから削除されたページやファイルは出力から削除されます。</p>\n<p>build log の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>SSG outputs</span></span></code></span> では、この結果を確認できます。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rendered</span></span></code></span>: 今回新しく生成した数</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>reused</span></span></code></span>: 前回の結果を再利用した数</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>removed</span></span></code></span>: サイトから削除された数</li>\n</ul>\n<p>この仕組みについても、安全に再利用できるか判断できない場合はキャッシュを使用せず、すべてのページを生成します。</p>\n<p>たとえば次のような場合です。</p>\n<ul>\n  <li>前回の情報が存在しない</li>\n  <li>バージョンが合わない</li>\n  <li>保存された情報が壊れている</li>\n  <li>アプリケーションや設定が変更された</li>\n  <li>どのページに影響する変更なのか判断できない</li>\n</ul>\n<p>完全に作り直したい場合は、次のファイルを削除できます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>.riebeckite/build/content-state.json</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>.riebeckite/ssg-output-cache.json</span></span></code></pre>\n  </div>\n</figure>\n<p>なお、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span> はキャッシュではありません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dist/</span></span></code></span> は最終的に生成された Web サイトの出力先です。</p>\n<p>この最適化は build の方法を高速化するだけであり、Cloudflare Workers への deploy 方法を変更するものではありません。</p>\n<h2 id=\"plugin-cache\">Plugin Cache</h2>\n<p>Plugin Cache は、プラグイン自身が計算結果を一時的に保存するための仕組みです。</p>\n<p>たとえば、build のたびに同じ計算を行う必要がない場合に、その結果を保存して次回の build で再利用できます。</p>\n<p>Plugin Cache には次の特徴があります。</p>\n<ul>\n  <li>プラグインごとに分けて保存される</li>\n  <li>JSON として保存できるデータを扱う</li>\n  <li>削除されても再生成できる</li>\n  <li>build を高速化する目的で使用する</li>\n</ul>\n<p>Plugin Cache がなくなっても、サイトを正しく build できる必要があります。</p>\n<p>また、Plugin Cache や incremental build の情報は build 時にだけ使用するものであり、公開後の Workers が読み書きするデータとしては使用しません。</p>\n<h2 id=\"riebeckite-ディレクトリ\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> ディレクトリ</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> には、キャッシュや前回の build 情報など、Riebeckite が build のために使用するデータが保存されます。</p>\n<p>これらはユーザーが作成したコンテンツではありません。</p>\n<p>そのため、Riebeckite が Markdown などのコンテンツを探すとき、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> ディレクトリは対象外になります。</p>\n<h2 id=\"build-関連のコマンド\">Build 関連のコマンド</h2>\n<p>通常のプロジェクトを build するコマンドは次のとおりです。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<p>Riebeckite の build は次のコマンドです。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<p>前回の build 情報を使わずに build するには <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--full</span></span></code></span> を付けます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span></code></pre>\n  </div>\n</figure>\n<p>full build の処理時間を詳しく確認するには、次のコマンドを実行します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> profile</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span></code></pre>\n  </div>\n</figure>\n<h3 id=\"build-とその他のコマンドの違い\">Build とその他のコマンドの違い</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span> は、それぞれ build とは異なる役割を持っています。</p>\n<table>\n  <thead>\n    <tr>\n      <th>コマンド</th>\n      <th>主な役割</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build</span></span></code></span></td>\n      <td>Web サイトを生成する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build --full</span></span></code></span></td>\n      <td>前回の build 情報を使わずに Web サイトを生成する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>profile</span></span></code></span></td>\n      <td>build の処理時間を調べる</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span></td>\n      <td>設定やプラグインの構成を確認する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span></td>\n      <td>プロジェクトに問題がないか診断する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span></td>\n      <td>保存されている build 情報などを確認する</td>\n    </tr>\n  </tbody>\n</table>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> や <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> が成功しても、実際の build が必ず成功することを保証するものではありません。</p>\n<p>また、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span> はすでに存在する情報を確認するためのコマンドです。build 情報を新しく作るためのコマンドではありません。</p>\n<p>詳しいコマンドについては <a href=\"/docs/reference/cli\">CLI</a>、build 情報の確認については <a href=\"/docs/framework/inspector\">Inspector</a>、コンテンツの読み込みについては <a href=\"/docs/framework/content-system\">Content system</a> を参照してください。</p>\n<h2 id=\"build-system-を変更するときのルール\">Build System を変更するときのルール</h2>\n<p>Build System やプラグインから新しいファイルを生成する場合は、「どの仕組みがそのファイルを管理するのか」を明確にします。</p>\n<p>特に、次の点に注意してください。</p>\n<ul>\n  <li>どの仕組みが生成したファイルなのか明確にする</li>\n  <li>不要になった古いファイルを適切に削除する</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> や <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span> などの確認用コマンドから、意図せずファイルを書き換えない</li>\n  <li>キャッシュには、結果に影響する設定やバージョンの変更を反映する</li>\n  <li>安全に再利用できると確認できないデータは再利用しない</li>\n  <li>再利用できない場合でも、通常の build で正しい結果を生成できるようにする</li>\n  <li>build が失敗した場合は、そのことが分かるようにする</li>\n  <li>新しい build が成功するまで、前回成功した情報を残しておく</li>\n</ul>\n<p>基本原則は、<strong>build の速さよりも、生成されるサイトの正しさを優先すること</strong>です。</p>\n<p>incremental build や各種キャッシュは build を高速化するための仕組みです。</p>\n<p>それらをすべて削除したとしても、同じ正しい Web サイトを生成できることが Riebeckite の Build System の前提です。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Build System Riebeckite の Build System は、Markdown などのコンテンツと設定を読み込み、最終的な Web サイトを生成する仕組みです。 通常の build では、大きく次の処理を行います。 設定とプラグインを読み込む Markdown などのコンテンツを読み込む プラグイン","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/content-system","url":"https://riebeckite.dev/en/docs/framework/content-system","title":"content-system.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"content-system\">Content System</h1>\n<h2 id=\"two-explicit-responsibilities\">Two explicit responsibilities</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> is the boundary for finding and reading source data. It owns scanning, reading, identity, and source metadata such as mtime, size, ETag, or hashes. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>FileSystemContentSource</span></span></code></span> is the normal local implementation.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> owns the meaning of that data: parsing, Markdown/HTML pipeline execution, post processing, plugin orchestration, manifest creation, and content-graph construction. It should not grow direct filesystem behavior that bypasses <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span>.</p>\n<h2 id=\"processing-model\">Processing model</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>scan/read source</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  -> resolve public locations        (default resolver + plugin hooks)</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>  -> parse post -> process post -> create manifest -> graph</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>                        |</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>                        `--- plugin lifecycle/content hooks ---'</span></span></code></pre>\n  </div>\n</figure>\n<p>Public locations are resolved before any content that needs a URL is processed, so a consumer never has to invent one. Plugin hooks observe or extend defined phases such as configuration resolution, content loaded, parsed/processed posts, manifest creation, and build start/end. Keep source I/O, semantic interpretation, and rendering distinct so a remote source can replace the filesystem source without changing Core policy.</p>\n<h2 id=\"public-location-and-urls\">Public location and URLs</h2>\n<p>A content entry separates three notions of identity:</p>\n<ul>\n  <li><strong>slug</strong> — the internal lookup key used by <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentIndex</span></span></code></span>, the manifest <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>bySlug</span></span></code></span> map, the content graph, and application-level selection keys such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/explore?note=&#x3C;slug></span></span></code></span>.</li>\n  <li><strong>permalink</strong> — the resolved canonical public URL used in article links, feeds, sitemaps, and metadata.</li>\n  <li><strong>content ID</strong> — an optional, source-authored stable identity exposed as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.contentId</span></span></code></span> and indexed by <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifest.byContentId</span></span></code></span>. It is independent of both the slug and all public locations.</li>\n</ul>\n<p>They are distinct. A consumer that needs a public URL reads <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.permalink</span></span></code></span> (also available as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entry.publicLocation</span></span></code></span>); it must not build a URL from a slug or filesystem path. Turning a slug into a URL is the Core default resolver's job alone.</p>\n<p>Resolution is a single, stateless pipeline:</p>\n<ol>\n  <li>Core seeds every entry with the official default resolver, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveDefaultContentLocation(content)</span></span></code></span>, where <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span> is a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentLocationInput</span></span></code></span> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slug</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>path</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>markdown</span></span></code></span>). The default policy is <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>index</span></span></code></span> -> <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span> and every other entry -> <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/{slug}</span></span></code></span>. This is the Core default public-location policy, not a compatibility fallback.</li>\n  <li>Each enabled plugin may replace locations through the optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentLocations</span></span></code></span> hook, which receives the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentLocationInput</span></span></code></span> list and returns <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> values. Plugin-specific URL strategies stay inside the plugin.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager.getContentLocations()</span></span></code></span> returns the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ReadonlyMap&#x3C;string, ContentPublicLocation></span></span></code></span>. A <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> carries the canonical <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span>, optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>redirects</span></span></code></span>, and optional opaque <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>metadata</span></span></code></span> that Core does not interpret.</li>\n</ol>\n<p>The manifest stores the resolved result: <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.permalink</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.publicLocation</span></span></code></span>, plus the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>byPermalink</span></span></code></span> index and the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>redirects</span></span></code></span> map. The content graph and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>readOnlyContentGraph(source, locations)</span></span></code></span> consume those resolved entries rather than deriving URLs. If a public location is not resolved for an entry, Core raises an explicit error instead of falling back to a slug-derived URL.</p>\n<h3 id=\"stable-content-ids\">Stable content IDs</h3>\n<p>\n  Set the standard <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> frontmatter field when content needs an identity that\n  survives a rename, permalink change, alias, or redirect. IDs are optional, so\n  existing content without <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> has no generated substitute and keeps its current\n  behavior. Core never uses a slug, path, permalink, alias, or redirect as a\n  stable ID.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"yaml\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">yaml</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"yaml\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"yaml\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--remove\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">---</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">id</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">note-7f4e9b</span></span>\n<span class=\"rr-code__line rr-code__line--remove\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">---</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Values must be non-empty, trimmed strings, and each explicit ID must be unique\n  within a manifest; invalid or duplicate IDs fail the manifest build rather than\n  silently selecting an identity.\n</p>\n<h2 id=\"manifest-graph-and-runtime\">Manifest, graph, and runtime</h2>\n<p>The manifest is the generated content representation used by the application. The content graph represents relationships and can be extended through the plugin graph contract. Reading a runtime manifest is not an explicit build. Incremental build state belongs only to the explicit build path and is never a mutable Worker runtime dependency.</p>\n<h2 id=\"content-queries\">Content queries</h2>\n<p>Core exposes a portable query layer over resolved manifest entries:</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>queryContentEntries(entries, spec)</span></span></code></span> filters by tags, folder, frontmatter, and date range, applies one or more sort keys, and slices the result with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>limit</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>offset</span></span></code></span>.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>queryContentPage(entries, spec)</span></span></code></span> applies the same selection and returns the page slice together with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>page</span></span></code></span> metadata (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>page</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageCount</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hasPrevious</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hasNext</span></span></code></span>); <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentQueryPagination(total, spec)</span></span></code></span> computes that metadata alone.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>groupContentEntries(entries, groupBy, options)</span></span></code></span> runs the same selection and groups the result by tags, folder, date granularity (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>year</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>month</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>day</span></span></code></span>), or a frontmatter field.</li>\n</ul>\n<p>Both functions operate on <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry</span></span></code></span> values, so links use the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span>; a query never builds a public content URL from a slug. Applications and plugins compose these functions to build listing pages and taxonomy views, while Core keeps ownership of manifest and graph construction rather than routing.</p>\n<h2 id=\"content-collections\">Content collections</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildContentCollections(entries, definitions)</span></span></code></span> turns the same query selection into listing collections. A definition declares a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>kind</span></span></code></span>, a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>groupBy</span></span></code></span> (tags, folder, date, or a frontmatter field), a site-local <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>basePath</span></span></code></span>, optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>filter</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>sort</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span> values, and optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveTitle</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolvePath</span></span></code></span> builders. Every generated <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentCollection</span></span></code></span> carries the group <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>value</span></span></code></span>, the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>path</span></span></code></span>, a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>title</span></span></code></span>, and its <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entries</span></span></code></span> in query order.</p>\n<p>This is the shared mechanism behind taxonomy, folder, and archive listings. A <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tag</span></span></code></span> definition groups by <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tags</span></span></code></span> under <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/tags</span></span></code></span>; an <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>archive</span></span></code></span> definition groups by date under <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/archive</span></span></code></span>; both are produced by the same call. Routing stays in the application, while the collection contract and the query engine stay in Core. Listing entries still link through <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.permalink</span></span></code></span> and never construct a URL from a slug.</p>\n<p>A definition may set <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageSize</span></span></code></span> to split a collection across pages. Each page is emitted as its own <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentCollection</span></span></code></span> whose <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>path</span></span></code></span> is the collection path plus <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/page/&#x3C;n></span></span></code></span> for later pages, and its <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>page</span></span></code></span> metadata carries <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>current</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>count</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>size</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>total</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>previousPath</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>nextPath</span></span></code></span> for building navigation.</p>\n<h2 id=\"correctness-rules\">Correctness rules</h2>\n<ul>\n  <li>Preserve canonical content identity across source, manifest, and graph.</li>\n  <li>Treat slug and permalink as separate concepts: obtain public URLs only from the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span>.</li>\n  <li>Treat source metadata as change evidence, not universally reliable truth.</li>\n  <li>Make publication/exclusion policy visible in configuration.</li>\n  <li>Return diagnostics for recoverable user-facing problems; do not silently omit content.</li>\n  <li>Keep graph extensions deterministic for identical inputs.</li>\n</ul>\n<p>See <a href=\"/en/docs/reference/configuration\">Configuration</a>, <a href=\"/en/docs/framework/build-system\">Build system</a>, and <a href=\"/en/docs/framework/plugin-system\">Plugin system</a>.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Content System Two explicit responsibilities ContentSource is the boundary for finding and reading source data. It owns scanning, reading, identity, and source ","tags":[]},{"id":"https://riebeckite.dev/docs/framework/content-system","url":"https://riebeckite.dev/docs/framework/content-system","title":"content-system","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"content-system\">Content System</h1>\n<p>Content System は、Markdown や画像などのファイルを、Riebeckite がサイトとして扱えるコンテンツへ変換する仕組みです。</p>\n<p>単に Markdown を HTML に変換するだけではありません。</p>\n<p>Riebeckite が、</p>\n<ul>\n  <li>このファイルは何の記事なのか</li>\n  <li>公開してよいのか</li>\n  <li>どの URL で公開するのか</li>\n  <li>他の記事とどうつながっているのか</li>\n  <li>Plugin によって何が追加・変更されたのか</li>\n</ul>\n<p>を解決し、Site 全体から同じ情報を利用できる状態にします。</p>\n<h1 id=\"全体の流れ\">全体の流れ</h1>\n<p>Content System の大まかな流れは次のとおりです。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-r4cql1\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 774.21875px;\" viewBox=\"0 0 774.21875 534\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-r4cql1{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-r4cql1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-r4cql1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-r4cql1 .error-icon{fill:#552222;}#rr-mermaid-r4cql1 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-r4cql1 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-r4cql1 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-r4cql1 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-r4cql1 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-r4cql1 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-r4cql1 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-r4cql1 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-r4cql1 .marker.cross{stroke:#333333;}#rr-mermaid-r4cql1 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-r4cql1 p{margin:0;}#rr-mermaid-r4cql1 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-r4cql1 .cluster-label text{fill:#333;}#rr-mermaid-r4cql1 .cluster-label span{color:#333;}#rr-mermaid-r4cql1 .cluster-label span p{background-color:transparent;}#rr-mermaid-r4cql1 .label text,#rr-mermaid-r4cql1 span{fill:#333;color:#333;}#rr-mermaid-r4cql1 .node rect,#rr-mermaid-r4cql1 .node circle,#rr-mermaid-r4cql1 .node ellipse,#rr-mermaid-r4cql1 .node polygon,#rr-mermaid-r4cql1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-r4cql1 .rough-node .label text,#rr-mermaid-r4cql1 .node .label text,#rr-mermaid-r4cql1 .image-shape .label,#rr-mermaid-r4cql1 .icon-shape .label{text-anchor:middle;}#rr-mermaid-r4cql1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-r4cql1 .rough-node .label,#rr-mermaid-r4cql1 .node .label,#rr-mermaid-r4cql1 .image-shape .label,#rr-mermaid-r4cql1 .icon-shape .label{text-align:center;}#rr-mermaid-r4cql1 .node.clickable{cursor:pointer;}#rr-mermaid-r4cql1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-r4cql1 .arrowheadPath{fill:#333333;}#rr-mermaid-r4cql1 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-r4cql1 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-r4cql1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-r4cql1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-r4cql1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-r4cql1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-r4cql1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-r4cql1 .cluster text{fill:#333;}#rr-mermaid-r4cql1 .cluster span{color:#333;}#rr-mermaid-r4cql1 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-r4cql1 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-r4cql1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-r4cql1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-r4cql1 rect.text{fill:none;stroke-width:0;}#rr-mermaid-r4cql1 .icon-shape,#rr-mermaid-r4cql1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-r4cql1 .icon-shape p,#rr-mermaid-r4cql1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-r4cql1 .icon-shape .label rect,#rr-mermaid-r4cql1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-r4cql1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-r4cql1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-r4cql1 .node .neo-node{stroke:#9370DB;}#rr-mermaid-r4cql1 [data-look=\"neo\"].node rect,#rr-mermaid-r4cql1 [data-look=\"neo\"].cluster rect,#rr-mermaid-r4cql1 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-r4cql1 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-r4cql1 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-r4cql1 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-r4cql1 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-r4cql1 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-r4cql1 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-r4cql1 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-r4cql1 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-r4cql1 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-r4cql1_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-r4cql1_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M368.871,62L368.871,66.167C368.871,70.333,368.871,78.667,368.871,86.333C368.871,94,368.871,101,368.871,104.5L368.871,108\" id=\"rr-mermaid-r4cql1-L_Files_Source_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Files_Source_0\" data-points=\"W3sieCI6MzY4Ljg3MTA5Mzc1LCJ5Ijo2Mn0seyJ4IjozNjguODcxMDkzNzUsInkiOjg3fSx7IngiOjM2OC44NzEwOTM3NSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M368.871,190L368.871,194.167C368.871,198.333,368.871,206.667,368.871,214.333C368.871,222,368.871,229,368.871,232.5L368.871,236\" id=\"rr-mermaid-r4cql1-L_Source_Manager_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Source_Manager_0\" data-points=\"W3sieCI6MzY4Ljg3MTA5Mzc1LCJ5IjoxOTB9LHsieCI6MzY4Ljg3MTA5Mzc1LCJ5IjoyMTV9LHsieCI6MzY4Ljg3MTA5Mzc1LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M256.969,304.241L228.331,310.701C199.693,317.161,142.417,330.08,113.779,340.04C85.141,350,85.141,357,85.141,360.5L85.141,364\" id=\"rr-mermaid-r4cql1-L_Manager_Plugin_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Plugin_0\" data-points=\"W3sieCI6MjYwLjg3MTA5Mzc1LCJ5IjozMDMuMzYxMTQ4MjA2Nzg3MzN9LHsieCI6ODUuMTQwNjI1LCJ5IjozNDN9LHsieCI6ODUuMTQwNjI1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-start=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointStart)\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M310.154,318L303.881,322.167C297.608,326.333,285.062,334.667,278.789,342.333C272.516,350,272.516,357,272.516,360.5L272.516,364\" id=\"rr-mermaid-r4cql1-L_Manager_Manifest_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Manifest_0\" data-points=\"W3sieCI6MzEwLjE1NDQ3OTk4MDQ2ODc1LCJ5IjozMTh9LHsieCI6MjcyLjUxNTYyNSwieSI6MzQzfSx7IngiOjI3Mi41MTU2MjUsInkiOjM2OH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M427.588,318L433.861,322.167C440.134,326.333,452.68,334.667,458.953,342.333C465.227,350,465.227,357,465.227,360.5L465.227,364\" id=\"rr-mermaid-r4cql1-L_Manager_Graph_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Graph_0\" data-points=\"W3sieCI6NDI3LjU4NzcwNzUxOTUzMTI1LCJ5IjozMTh9LHsieCI6NDY1LjIyNjU2MjUsInkiOjM0M30seyJ4Ijo0NjUuMjI2NTYyNSwieSI6MzY4fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M476.871,301.077L511.053,308.064C545.234,315.051,613.598,329.026,647.779,339.513C681.961,350,681.961,357,681.961,360.5L681.961,364\" id=\"rr-mermaid-r4cql1-L_Manager_Location_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Location_0\" data-points=\"W3sieCI6NDc2Ljg3MTA5Mzc1LCJ5IjozMDEuMDc2NzMwMTcxODAwN30seyJ4Ijo2ODEuOTYwOTM3NSwieSI6MzQzfSx7IngiOjY4MS45NjA5Mzc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M272.516,422L272.516,426.167C272.516,430.333,272.516,438.667,287.314,446.826C302.111,454.986,331.707,462.972,346.505,466.965L361.303,470.958\" id=\"rr-mermaid-r4cql1-L_Manifest_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_Site_0\" data-points=\"W3sieCI6MjcyLjUxNTYyNSwieSI6NDIyfSx7IngiOjI3Mi41MTU2MjUsInkiOjQ0N30seyJ4IjozNjUuMTY1MTE0MTgyNjkyMywieSI6NDcyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M465.227,422L465.227,426.167C465.227,430.333,465.227,438.667,465.227,446.333C465.227,454,465.227,461,465.227,464.5L465.227,468\" id=\"rr-mermaid-r4cql1-L_Graph_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Graph_Site_0\" data-points=\"W3sieCI6NDY1LjIyNjU2MjUsInkiOjQyMn0seyJ4Ijo0NjUuMjI2NTYyNSwieSI6NDQ3fSx7IngiOjQ2NS4yMjY1NjI1LCJ5Ijo0NzJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path><path d=\"M681.961,422L681.961,426.167C681.961,430.333,681.961,438.667,665.243,446.844C648.524,455.022,615.088,463.045,598.37,467.056L581.651,471.067\" id=\"rr-mermaid-r4cql1-L_Location_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Location_Site_0\" data-points=\"W3sieCI6NjgxLjk2MDkzNzUsInkiOjQyMn0seyJ4Ijo2ODEuOTYwOTM3NSwieSI6NDQ3fSx7IngiOjU3Ny43NjE3MTg3NSwieSI6NDcyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-r4cql1_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Files_Source_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Source_Manager_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Plugin_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Manifest_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Graph_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Location_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Graph_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Location_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Files-0\" data-look=\"classic\" transform=\"translate(368.87109375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.140625\" y=\"-27\" width=\"194.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.140625, -12)\"><rect></rect><foreignObject width=\"134.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Markdown / Assets</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Source-1\" data-look=\"classic\" transform=\"translate(368.87109375, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-90\" y=\"-39\" width=\"180\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60, -24)\"><rect></rect><foreignObject width=\"120\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentSource<br>コンテンツを読み込む</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Manager-2\" data-look=\"classic\" transform=\"translate(368.87109375, 279)\"><rect class=\"basic label-container\" style=\"\" x=\"-108\" y=\"-39\" width=\"216\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78, -24)\"><rect></rect><foreignObject width=\"156\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager<br>コンテンツを解決・処理する</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Plugin-3\" data-look=\"classic\" transform=\"translate(85.140625, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.140625\" y=\"-27\" width=\"154.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.140625, -12)\"><rect></rect><foreignObject width=\"94.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Hooks</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Manifest-4\" data-look=\"classic\" transform=\"translate(272.515625, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-60.234375\" y=\"-27\" width=\"120.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-30.234375, -12)\"><rect></rect><foreignObject width=\"60.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Graph-5\" data-look=\"classic\" transform=\"translate(465.2265625, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.4765625\" y=\"-27\" width=\"164.953125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.4765625, -12)\"><rect></rect><foreignObject width=\"104.953125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Graph</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Location-6\" data-look=\"classic\" transform=\"translate(681.9609375, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.2578125\" y=\"-27\" width=\"168.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.2578125, -12)\"><rect></rect><foreignObject width=\"108.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Location</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-r4cql1-flowchart-Site-7\" data-look=\"classic\" transform=\"translate(465.2265625, 499)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.9453125\" y=\"-27\" width=\"253.890625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.9453125, -12)\"><rect></rect><foreignObject width=\"193.890625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Generation / Runtime</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-r4cql1-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-r4cql1-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Files[\"Markdown / Assets\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Source[\"ContentSource&#x3C;br/>コンテンツを読み込む\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Manager[\"ContentManager&#x3C;br/>コンテンツを解決・処理する\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Plugin[\"Plugin Hooks\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Manifest[\"Manifest\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Graph[\"Content Graph\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Location[\"Public Location\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Site[\"Page Generation / Runtime\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Files --> Source</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Source --> Manager</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Manager &#x3C;--> Plugin</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>    Manager --> Manifest</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>    Manager --> Graph</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span>    Manager --> Location</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span>    Manifest --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span>    Graph --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span>    Location --> Site</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>中心になるのが <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> です。</p>\n<p>簡単に言えば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>ContentSource</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  = どこからコンテンツを読むか</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>ContentManager</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>  = 読み込んだコンテンツをどう扱うか</span></span></code></pre>\n  </div>\n</figure>\n<p>という役割分担です。</p>\n<h1 id=\"contentsource\">ContentSource</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> は、Markdown やアセットを<strong>どこから、どう読み込むか</strong>を抽象化した API です。</p>\n<p>通常は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>content/</span></span></code></pre>\n  </div>\n</figure>\n<p>のような <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content.directory</span></span></code></span> で指定されたディレクトリから読み込みます。</p>\n<p>しかし Content System 自体は、コンテンツが必ず Site repository 内に存在するとは考えません。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Site Repository</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>└─ content/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>External Repository</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>└─ notes/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>Obsidian Vault</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>└─ notes/</span></span></code></pre>\n  </div>\n</figure>\n<p>のどこから取得した場合でも、最終的には <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> という同じ interface を通して ContentManager に渡します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-oh8cyg\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 661.546875px;\" viewBox=\"0 0 661.546875 278\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-oh8cyg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-oh8cyg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-oh8cyg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-oh8cyg .error-icon{fill:#552222;}#rr-mermaid-oh8cyg .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-oh8cyg .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-oh8cyg .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-oh8cyg .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-oh8cyg .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-oh8cyg .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-oh8cyg .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-oh8cyg .marker{fill:#333333;stroke:#333333;}#rr-mermaid-oh8cyg .marker.cross{stroke:#333333;}#rr-mermaid-oh8cyg svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-oh8cyg p{margin:0;}#rr-mermaid-oh8cyg .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-oh8cyg .cluster-label text{fill:#333;}#rr-mermaid-oh8cyg .cluster-label span{color:#333;}#rr-mermaid-oh8cyg .cluster-label span p{background-color:transparent;}#rr-mermaid-oh8cyg .label text,#rr-mermaid-oh8cyg span{fill:#333;color:#333;}#rr-mermaid-oh8cyg .node rect,#rr-mermaid-oh8cyg .node circle,#rr-mermaid-oh8cyg .node ellipse,#rr-mermaid-oh8cyg .node polygon,#rr-mermaid-oh8cyg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-oh8cyg .rough-node .label text,#rr-mermaid-oh8cyg .node .label text,#rr-mermaid-oh8cyg .image-shape .label,#rr-mermaid-oh8cyg .icon-shape .label{text-anchor:middle;}#rr-mermaid-oh8cyg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-oh8cyg .rough-node .label,#rr-mermaid-oh8cyg .node .label,#rr-mermaid-oh8cyg .image-shape .label,#rr-mermaid-oh8cyg .icon-shape .label{text-align:center;}#rr-mermaid-oh8cyg .node.clickable{cursor:pointer;}#rr-mermaid-oh8cyg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-oh8cyg .arrowheadPath{fill:#333333;}#rr-mermaid-oh8cyg .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-oh8cyg .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-oh8cyg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-oh8cyg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-oh8cyg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-oh8cyg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-oh8cyg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-oh8cyg .cluster text{fill:#333;}#rr-mermaid-oh8cyg .cluster span{color:#333;}#rr-mermaid-oh8cyg .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-oh8cyg .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-oh8cyg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-oh8cyg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-oh8cyg rect.text{fill:none;stroke-width:0;}#rr-mermaid-oh8cyg .icon-shape,#rr-mermaid-oh8cyg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-oh8cyg .icon-shape p,#rr-mermaid-oh8cyg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-oh8cyg .icon-shape .label rect,#rr-mermaid-oh8cyg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-oh8cyg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-oh8cyg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-oh8cyg .node .neo-node{stroke:#9370DB;}#rr-mermaid-oh8cyg [data-look=\"neo\"].node rect,#rr-mermaid-oh8cyg [data-look=\"neo\"].cluster rect,#rr-mermaid-oh8cyg [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-oh8cyg [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-oh8cyg [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-oh8cyg [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-oh8cyg [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-oh8cyg [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-oh8cyg [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-oh8cyg [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-oh8cyg [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-oh8cyg :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-oh8cyg_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M192.063,35L198.823,35C205.583,35,219.104,35,238.756,47.372C258.407,59.743,284.19,84.487,297.081,96.859L309.972,109.23\" id=\"rr-mermaid-oh8cyg-L_Local_Source_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Local_Source_0\" data-points=\"W3sieCI6MTkyLjA2MjUsInkiOjM1fSx7IngiOjIzMi42MjUsInkiOjM1fSx7IngiOjMxMi44NTgzOTg0Mzc1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-oh8cyg_flowchart-v2-pointEnd)\"></path><path d=\"M207.625,139L211.792,139C215.958,139,224.292,139,231.958,139C239.625,139,246.625,139,250.125,139L253.625,139\" id=\"rr-mermaid-oh8cyg-L_External_Source_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_External_Source_0\" data-points=\"W3sieCI6MjA3LjYyNSwieSI6MTM5fSx7IngiOjIzMi42MjUsInkiOjEzOX0seyJ4IjoyNTcuNjI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-oh8cyg_flowchart-v2-pointEnd)\"></path><path d=\"M189.25,243L196.479,243C203.708,243,218.167,243,238.287,230.628C258.407,218.257,284.19,193.513,297.081,181.141L309.972,168.77\" id=\"rr-mermaid-oh8cyg-L_Vault_Source_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Vault_Source_0\" data-points=\"W3sieCI6MTg5LjI1LCJ5IjoyNDN9LHsieCI6MjMyLjYyNSwieSI6MjQzfSx7IngiOjMxMi44NTgzOTg0Mzc1LCJ5IjoxNjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-oh8cyg_flowchart-v2-pointEnd)\"></path><path d=\"M424.359,139L428.526,139C432.693,139,441.026,139,448.693,139C456.359,139,463.359,139,466.859,139L470.359,139\" id=\"rr-mermaid-oh8cyg-L_Source_Manager_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Source_Manager_0\" data-points=\"W3sieCI6NDI0LjM1OTM3NSwieSI6MTM5fSx7IngiOjQ0OS4zNTkzNzUsInkiOjEzOX0seyJ4Ijo0NzQuMzU5Mzc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-oh8cyg_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Local_Source_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_External_Source_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Vault_Source_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Source_Manager_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-oh8cyg-flowchart-Local-0\" data-look=\"classic\" transform=\"translate(107.8125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.25\" y=\"-27\" width=\"168.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.25, -12)\"><rect></rect><foreignObject width=\"108.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Repository</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-oh8cyg-flowchart-External-1\" data-look=\"classic\" transform=\"translate(107.8125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.8125\" y=\"-27\" width=\"199.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.8125, -12)\"><rect></rect><foreignObject width=\"139.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>External Repository</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-oh8cyg-flowchart-Vault-2\" data-look=\"classic\" transform=\"translate(107.8125, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.4375\" y=\"-27\" width=\"162.875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.4375, -12)\"><rect></rect><foreignObject width=\"102.875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Obsidian Vault</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-oh8cyg-flowchart-Source-4\" data-look=\"classic\" transform=\"translate(340.9921875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.3671875\" y=\"-27\" width=\"166.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.3671875, -12)\"><rect></rect><foreignObject width=\"106.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentSource</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-oh8cyg-flowchart-Manager-10\" data-look=\"classic\" transform=\"translate(563.953125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.59375\" y=\"-27\" width=\"179.1875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.59375, -12)\"><rect></rect><foreignObject width=\"119.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-oh8cyg-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-oh8cyg-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Local[\"Site Repository\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    External[\"External Repository\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Vault[\"Obsidian Vault\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Local --> Source[\"ContentSource\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    External --> Source</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Vault --> Source</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Source --> Manager[\"ContentManager\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>これにより、コンテンツの保存場所が変わっても、それ以降の処理を同じ仕組みで扱えます。</p>\n<h2 id=\"3種類の場所\">3種類の「場所」</h2>\n<p>Content System を理解するときに重要なのが、次の3つを区別することです。</p>\n<table>\n  <thead>\n    <tr>\n      <th>種類</th>\n      <th>意味</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>ファイルシステム上のパス</td>\n      <td>実際にファイルが保存されている場所</td>\n    </tr>\n    <tr>\n      <td>論理パス</td>\n      <td>content root から見たコンテンツの識別子</td>\n    </tr>\n    <tr>\n      <td>公開先</td>\n      <td>Web Site 上の URL</td>\n    </tr>\n  </tbody>\n</table>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>C:\\projects\\garden\\content\\posts\\hello.md</span></span></code></pre>\n  </div>\n</figure>\n<p>というファイルがあったとしても、Riebeckite 内部では、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>posts/hello.md</span></span></code></pre>\n  </div>\n</figure>\n<p>という論理パスとして扱えます。</p>\n<p>さらに、実際の公開先は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/blog/hello/</span></span></code></pre>\n  </div>\n</figure>\n<p>かもしれません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-3wfyuk\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 706.015625px;\" viewBox=\"0 0 706.015625 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-3wfyuk{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-3wfyuk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-3wfyuk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-3wfyuk .error-icon{fill:#552222;}#rr-mermaid-3wfyuk .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-3wfyuk .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-3wfyuk .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-3wfyuk .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-3wfyuk .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-3wfyuk .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-3wfyuk .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-3wfyuk .marker{fill:#333333;stroke:#333333;}#rr-mermaid-3wfyuk .marker.cross{stroke:#333333;}#rr-mermaid-3wfyuk svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-3wfyuk p{margin:0;}#rr-mermaid-3wfyuk .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-3wfyuk .cluster-label text{fill:#333;}#rr-mermaid-3wfyuk .cluster-label span{color:#333;}#rr-mermaid-3wfyuk .cluster-label span p{background-color:transparent;}#rr-mermaid-3wfyuk .label text,#rr-mermaid-3wfyuk span{fill:#333;color:#333;}#rr-mermaid-3wfyuk .node rect,#rr-mermaid-3wfyuk .node circle,#rr-mermaid-3wfyuk .node ellipse,#rr-mermaid-3wfyuk .node polygon,#rr-mermaid-3wfyuk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-3wfyuk .rough-node .label text,#rr-mermaid-3wfyuk .node .label text,#rr-mermaid-3wfyuk .image-shape .label,#rr-mermaid-3wfyuk .icon-shape .label{text-anchor:middle;}#rr-mermaid-3wfyuk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-3wfyuk .rough-node .label,#rr-mermaid-3wfyuk .node .label,#rr-mermaid-3wfyuk .image-shape .label,#rr-mermaid-3wfyuk .icon-shape .label{text-align:center;}#rr-mermaid-3wfyuk .node.clickable{cursor:pointer;}#rr-mermaid-3wfyuk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-3wfyuk .arrowheadPath{fill:#333333;}#rr-mermaid-3wfyuk .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-3wfyuk .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-3wfyuk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-3wfyuk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-3wfyuk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-3wfyuk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-3wfyuk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-3wfyuk .cluster text{fill:#333;}#rr-mermaid-3wfyuk .cluster span{color:#333;}#rr-mermaid-3wfyuk .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-3wfyuk .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-3wfyuk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-3wfyuk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-3wfyuk rect.text{fill:none;stroke-width:0;}#rr-mermaid-3wfyuk .icon-shape,#rr-mermaid-3wfyuk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-3wfyuk .icon-shape p,#rr-mermaid-3wfyuk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-3wfyuk .icon-shape .label rect,#rr-mermaid-3wfyuk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-3wfyuk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-3wfyuk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-3wfyuk .node .neo-node{stroke:#9370DB;}#rr-mermaid-3wfyuk [data-look=\"neo\"].node rect,#rr-mermaid-3wfyuk [data-look=\"neo\"].cluster rect,#rr-mermaid-3wfyuk [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-3wfyuk [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-3wfyuk [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-3wfyuk [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-3wfyuk [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-3wfyuk [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-3wfyuk [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-3wfyuk [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-3wfyuk [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-3wfyuk :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-3wfyuk_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M266.328,47L270.495,47C274.661,47,282.995,47,290.661,47C298.328,47,305.328,47,308.828,47L312.328,47\" id=\"rr-mermaid-3wfyuk-L_FS_Logical_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_FS_Logical_0\" data-points=\"W3sieCI6MjY2LjMyODEyNSwieSI6NDd9LHsieCI6MjkxLjMyODEyNSwieSI6NDd9LHsieCI6MzE2LjMyODEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-3wfyuk_flowchart-v2-pointEnd)\"></path><path d=\"M479.5,47L483.667,47C487.833,47,496.167,47,503.833,47C511.5,47,518.5,47,522,47L525.5,47\" id=\"rr-mermaid-3wfyuk-L_Logical_Public_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Logical_Public_0\" data-points=\"W3sieCI6NDc5LjUsInkiOjQ3fSx7IngiOjUwNC41LCJ5Ijo0N30seyJ4Ijo1MjkuNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-3wfyuk_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_FS_Logical_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Logical_Public_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-3wfyuk-flowchart-FS-0\" data-look=\"classic\" transform=\"translate(137.1640625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-129.1640625\" y=\"-39\" width=\"258.328125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-99.1640625, -24)\"><rect></rect><foreignObject width=\"198.328125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Filesystem Path<br>C:/.../content/posts/hello.md</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-3wfyuk-flowchart-Logical-1\" data-look=\"classic\" transform=\"translate(397.9140625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.5859375\" y=\"-39\" width=\"163.171875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.5859375, -24)\"><rect></rect><foreignObject width=\"103.171875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Logical Path<br>posts/hello.md</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-3wfyuk-flowchart-Public-2\" data-look=\"classic\" transform=\"translate(613.7578125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.2578125\" y=\"-39\" width=\"168.515625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.2578125, -24)\"><rect></rect><foreignObject width=\"108.515625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Location<br>/blog/hello/</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-3wfyuk-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-3wfyuk-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    FS[\"Filesystem Path&#x3C;br/>C:/.../content/posts/hello.md\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Logical[\"Logical Path&#x3C;br/>posts/hello.md\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Public[\"Public Location&#x3C;br/>/blog/hello/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    FS --> Logical</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Logical --> Public</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>この3つを分離することで、content repository を別の repository に移しても、Site 側の URL やコンテンツ処理を同じ規則で扱えます。</p>\n<h1 id=\"contentmanager\">ContentManager</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSource</span></span></code></span> から受け取ったコンテンツを管理し、Site で利用できる状態へ変換します。</p>\n<p>主な役割は次のとおりです。</p>\n<ul>\n  <li>Markdown の frontmatter と本文を読み込む</li>\n  <li>コンテンツを公開するか判断する</li>\n  <li>slug、permalink、content ID を整理する</li>\n  <li>Plugin hooks を実行する</li>\n  <li>公開先を解決する</li>\n  <li>Manifest を生成する</li>\n  <li>Content Graph を生成する</li>\n  <li>Query 用の index を用意する</li>\n</ul>\n<p>つまり ContentManager は、Content System の中心となる orchestrator です。</p>\n<h2 id=\"plugin-が処理に参加する\">Plugin が処理に参加する</h2>\n<p>Plugin は ContentManager の lifecycle に hook できます。</p>\n<p>代表的な hook には、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>onContentLoaded</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>onPostParsed</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>onPostProcessed</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>onManifestCreated</span></span></code></pre>\n  </div>\n</figure>\n<p>などがあります。</p>\n<p>概念的には次のような流れになります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-1h2vr8\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 215.640625px;\" viewBox=\"0 0 215.640625 798\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-1h2vr8{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-1h2vr8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-1h2vr8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-1h2vr8 .error-icon{fill:#552222;}#rr-mermaid-1h2vr8 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-1h2vr8 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-1h2vr8 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-1h2vr8 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-1h2vr8 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-1h2vr8 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-1h2vr8 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-1h2vr8 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-1h2vr8 .marker.cross{stroke:#333333;}#rr-mermaid-1h2vr8 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-1h2vr8 p{margin:0;}#rr-mermaid-1h2vr8 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-1h2vr8 .cluster-label text{fill:#333;}#rr-mermaid-1h2vr8 .cluster-label span{color:#333;}#rr-mermaid-1h2vr8 .cluster-label span p{background-color:transparent;}#rr-mermaid-1h2vr8 .label text,#rr-mermaid-1h2vr8 span{fill:#333;color:#333;}#rr-mermaid-1h2vr8 .node rect,#rr-mermaid-1h2vr8 .node circle,#rr-mermaid-1h2vr8 .node ellipse,#rr-mermaid-1h2vr8 .node polygon,#rr-mermaid-1h2vr8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-1h2vr8 .rough-node .label text,#rr-mermaid-1h2vr8 .node .label text,#rr-mermaid-1h2vr8 .image-shape .label,#rr-mermaid-1h2vr8 .icon-shape .label{text-anchor:middle;}#rr-mermaid-1h2vr8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-1h2vr8 .rough-node .label,#rr-mermaid-1h2vr8 .node .label,#rr-mermaid-1h2vr8 .image-shape .label,#rr-mermaid-1h2vr8 .icon-shape .label{text-align:center;}#rr-mermaid-1h2vr8 .node.clickable{cursor:pointer;}#rr-mermaid-1h2vr8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-1h2vr8 .arrowheadPath{fill:#333333;}#rr-mermaid-1h2vr8 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-1h2vr8 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-1h2vr8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-1h2vr8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-1h2vr8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-1h2vr8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-1h2vr8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-1h2vr8 .cluster text{fill:#333;}#rr-mermaid-1h2vr8 .cluster span{color:#333;}#rr-mermaid-1h2vr8 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-1h2vr8 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-1h2vr8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-1h2vr8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-1h2vr8 rect.text{fill:none;stroke-width:0;}#rr-mermaid-1h2vr8 .icon-shape,#rr-mermaid-1h2vr8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-1h2vr8 .icon-shape p,#rr-mermaid-1h2vr8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-1h2vr8 .icon-shape .label rect,#rr-mermaid-1h2vr8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-1h2vr8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-1h2vr8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-1h2vr8 .node .neo-node{stroke:#9370DB;}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node rect,#rr-mermaid-1h2vr8 [data-look=\"neo\"].cluster rect,#rr-mermaid-1h2vr8 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1h2vr8 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1h2vr8 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-1h2vr8 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1h2vr8 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1h2vr8 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-1h2vr8_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M107.82,62L107.82,66.167C107.82,70.333,107.82,78.667,107.82,86.333C107.82,94,107.82,101,107.82,104.5L107.82,108\" id=\"rr-mermaid-1h2vr8-L_Load_H1_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Load_H1_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjYyfSx7IngiOjEwNy44MjAzMTI1LCJ5Ijo4N30seyJ4IjoxMDcuODIwMzEyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,166L107.82,170.167C107.82,174.333,107.82,182.667,107.82,190.333C107.82,198,107.82,205,107.82,208.5L107.82,212\" id=\"rr-mermaid-1h2vr8-L_H1_Parse_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_H1_Parse_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjE2Nn0seyJ4IjoxMDcuODIwMzEyNSwieSI6MTkxfSx7IngiOjEwNy44MjAzMTI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,270L107.82,274.167C107.82,278.333,107.82,286.667,107.82,294.333C107.82,302,107.82,309,107.82,312.5L107.82,316\" id=\"rr-mermaid-1h2vr8-L_Parse_H2_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Parse_H2_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjI3MH0seyJ4IjoxMDcuODIwMzEyNSwieSI6Mjk1fSx7IngiOjEwNy44MjAzMTI1LCJ5IjozMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,374L107.82,378.167C107.82,382.333,107.82,390.667,107.82,398.333C107.82,406,107.82,413,107.82,416.5L107.82,420\" id=\"rr-mermaid-1h2vr8-L_H2_Process_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_H2_Process_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjM3NH0seyJ4IjoxMDcuODIwMzEyNSwieSI6Mzk5fSx7IngiOjEwNy44MjAzMTI1LCJ5Ijo0MjR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,478L107.82,482.167C107.82,486.333,107.82,494.667,107.82,502.333C107.82,510,107.82,517,107.82,520.5L107.82,524\" id=\"rr-mermaid-1h2vr8-L_Process_H3_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Process_H3_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjQ3OH0seyJ4IjoxMDcuODIwMzEyNSwieSI6NTAzfSx7IngiOjEwNy44MjAzMTI1LCJ5Ijo1Mjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,582L107.82,586.167C107.82,590.333,107.82,598.667,107.82,606.333C107.82,614,107.82,621,107.82,624.5L107.82,628\" id=\"rr-mermaid-1h2vr8-L_H3_Manifest_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_H3_Manifest_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjU4Mn0seyJ4IjoxMDcuODIwMzEyNSwieSI6NjA3fSx7IngiOjEwNy44MjAzMTI1LCJ5Ijo2MzJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path><path d=\"M107.82,686L107.82,690.167C107.82,694.333,107.82,702.667,107.82,710.333C107.82,718,107.82,725,107.82,728.5L107.82,732\" id=\"rr-mermaid-1h2vr8-L_Manifest_H4_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_H4_0\" data-points=\"W3sieCI6MTA3LjgyMDMxMjUsInkiOjY4Nn0seyJ4IjoxMDcuODIwMzEyNSwieSI6NzExfSx7IngiOjEwNy44MjAzMTI1LCJ5Ijo3MzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1h2vr8_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Load_H1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_H1_Parse_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Parse_H2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_H2_Process_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Process_H3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_H3_Manifest_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_H4_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-Load-0\" data-look=\"classic\" transform=\"translate(107.8203125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.9375\" y=\"-27\" width=\"173.875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.9375, -12)\"><rect></rect><foreignObject width=\"113.875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Loaded</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-H1-1\" data-look=\"classic\" transform=\"translate(107.8203125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-93.6171875\" y=\"-27\" width=\"187.234375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-63.6171875, -12)\"><rect></rect><foreignObject width=\"127.234375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>onContentLoaded</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-Parse-2\" data-look=\"classic\" transform=\"translate(107.8203125, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.0234375\" y=\"-27\" width=\"180.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.0234375, -12)\"><rect></rect><foreignObject width=\"120.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Markdown Parse</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-H2-3\" data-look=\"classic\" transform=\"translate(107.8203125, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-80.2578125\" y=\"-27\" width=\"160.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-50.2578125, -12)\"><rect></rect><foreignObject width=\"100.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>onPostParsed</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-Process-4\" data-look=\"classic\" transform=\"translate(107.8203125, 451)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.8203125\" y=\"-27\" width=\"199.640625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.8203125, -12)\"><rect></rect><foreignObject width=\"139.640625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Processing</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-H3-5\" data-look=\"classic\" transform=\"translate(107.8203125, 555)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.703125\" y=\"-27\" width=\"185.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.703125, -12)\"><rect></rect><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>onPostProcessed</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-Manifest-6\" data-look=\"classic\" transform=\"translate(107.8203125, 659)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.921875\" y=\"-27\" width=\"181.84375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.921875, -12)\"><rect></rect><foreignObject width=\"121.84375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest Created</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1h2vr8-flowchart-H4-7\" data-look=\"classic\" transform=\"translate(107.8203125, 763)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.59375\" y=\"-27\" width=\"195.1875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.59375, -12)\"><rect></rect><foreignObject width=\"135.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>onManifestCreated</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-1h2vr8-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-1h2vr8-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Load[\"Content Loaded\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    H1[\"onContentLoaded\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Parse[\"Markdown Parse\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    H2[\"onPostParsed\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Process[\"Content Processing\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    H3[\"onPostProcessed\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Manifest[\"Manifest Created\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    H4[\"onManifestCreated\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Load --> H1</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    H1 --> Parse</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Parse --> H2</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    H2 --> Process</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span>    Process --> H3</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>    H3 --> Manifest</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>    Manifest --> H4</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin はこの lifecycle を利用してコンテンツを拡張します。</p>\n<h1 id=\"slug--permalink--content-id\">slug / permalink / content ID</h1>\n<p>この3つは似ていますが、役割が異なります。</p>\n<table>\n  <thead>\n    <tr>\n      <th>名前</th>\n      <th>何を表す？</th>\n      <th>例</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slug</span></span></code></span></td>\n      <td>コンテンツの短い名前</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hello-world</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span></td>\n      <td>Site 上の公開 URL</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/blog/hello-world/</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>content ID</td>\n      <td>コンテンツそのものを安定して識別する ID</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article-01</span></span></code></span></td>\n    </tr>\n  </tbody>\n</table>\n<p>特に、<strong>slug と公開 URL は同じものではありません</strong>。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>slug</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  hello-world</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>permalink</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>  /blog/hello-world/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>content ID</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>  019abc...</span></span></code></pre>\n  </div>\n</figure>\n<p>のように、それぞれ別の目的を持ちます。</p>\n<h2 id=\"default-public-location\">Default Public Location</h2>\n<p>標準では <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveDefaultContentLocation</span></span></code></span> が公開先を解決します。</p>\n<p>基本的には、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>index</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>その他</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>  ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>/{slug}</span></span></code></pre>\n  </div>\n</figure>\n<p>として扱います。</p>\n<p>ただし、これはあくまで default resolver です。</p>\n<p>Plugin は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>resolveContentLocations</span></span></code></pre>\n  </div>\n</figure>\n<p>hook を使って公開先を追加・変更できます。</p>\n<h1 id=\"contentpubliclocation\">ContentPublicLocation</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> は、コンテンツが <strong>Site 上のどこで公開されるか</strong> を表します。</p>\n<p>通常は1つの記事に1つの canonical な公開先があります。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Article</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>   ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>/blog/article/</span></span></code></pre>\n  </div>\n</figure>\n<p>しかし Plugin によって、別名 URL や redirect が追加される場合があります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-k7renp\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 531.65625px;\" viewBox=\"0 0 531.65625 131\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-k7renp{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-k7renp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-k7renp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-k7renp .error-icon{fill:#552222;}#rr-mermaid-k7renp .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-k7renp .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-k7renp .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-k7renp .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-k7renp .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-k7renp .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-k7renp .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-k7renp .marker{fill:#333333;stroke:#333333;}#rr-mermaid-k7renp .marker.cross{stroke:#333333;}#rr-mermaid-k7renp svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-k7renp p{margin:0;}#rr-mermaid-k7renp .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-k7renp .cluster-label text{fill:#333;}#rr-mermaid-k7renp .cluster-label span{color:#333;}#rr-mermaid-k7renp .cluster-label span p{background-color:transparent;}#rr-mermaid-k7renp .label text,#rr-mermaid-k7renp span{fill:#333;color:#333;}#rr-mermaid-k7renp .node rect,#rr-mermaid-k7renp .node circle,#rr-mermaid-k7renp .node ellipse,#rr-mermaid-k7renp .node polygon,#rr-mermaid-k7renp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-k7renp .rough-node .label text,#rr-mermaid-k7renp .node .label text,#rr-mermaid-k7renp .image-shape .label,#rr-mermaid-k7renp .icon-shape .label{text-anchor:middle;}#rr-mermaid-k7renp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-k7renp .rough-node .label,#rr-mermaid-k7renp .node .label,#rr-mermaid-k7renp .image-shape .label,#rr-mermaid-k7renp .icon-shape .label{text-align:center;}#rr-mermaid-k7renp .node.clickable{cursor:pointer;}#rr-mermaid-k7renp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-k7renp .arrowheadPath{fill:#333333;}#rr-mermaid-k7renp .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-k7renp .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-k7renp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-k7renp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-k7renp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-k7renp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-k7renp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-k7renp .cluster text{fill:#333;}#rr-mermaid-k7renp .cluster span{color:#333;}#rr-mermaid-k7renp .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-k7renp .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-k7renp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-k7renp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-k7renp rect.text{fill:none;stroke-width:0;}#rr-mermaid-k7renp .icon-shape,#rr-mermaid-k7renp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-k7renp .icon-shape p,#rr-mermaid-k7renp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-k7renp .icon-shape .label rect,#rr-mermaid-k7renp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-k7renp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-k7renp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-k7renp .node .neo-node{stroke:#9370DB;}#rr-mermaid-k7renp [data-look=\"neo\"].node rect,#rr-mermaid-k7renp [data-look=\"neo\"].cluster rect,#rr-mermaid-k7renp [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k7renp [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-k7renp [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-k7renp [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k7renp [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-k7renp [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k7renp [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-k7renp [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k7renp [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k7renp :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-k7renp_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-k7renp_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M112.453,21.978L116.62,19.981C120.786,17.985,129.12,13.993,146.751,11.996C164.383,10,191.313,10,222.689,10C254.065,10,289.888,10,315.774,12.364C341.659,14.728,357.607,19.456,365.581,21.819L373.556,24.183\" id=\"rr-mermaid-k7renp-L_Article_Canonical_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Article_Canonical_0\" data-points=\"W3sieCI6MTEyLjQ1MzEyNSwieSI6MjEuOTc3NzQ0MDU2NjUxNDkyfSx7IngiOjEzNy40NTMxMjUsInkiOjEwfSx7IngiOjIxOC4yNDIxODc1LCJ5IjoxMH0seyJ4IjozMjUuNzEwOTM3NSwieSI6MTB9LHsieCI6Mzc3LjM5MDYyNSwieSI6MjUuMzIwMTY3NzUxNjI3NDR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k7renp_flowchart-v2-pointEnd)\"></path><path d=\"M112.453,72.022L116.62,74.019C120.786,76.015,129.12,80.007,136.786,82.004C144.453,84,151.453,84,154.953,84L158.453,84\" id=\"rr-mermaid-k7renp-L_Article_Alias_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Article_Alias_0\" data-points=\"W3sieCI6MTEyLjQ1MzEyNSwieSI6NzIuMDIyMjU1OTQzMzQ4NTF9LHsieCI6MTM3LjQ1MzEyNSwieSI6ODR9LHsieCI6MTYyLjQ1MzEyNSwieSI6ODR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k7renp_flowchart-v2-pointEnd)\"></path><path d=\"M274.031,84L282.645,84C291.258,84,308.484,84,325.072,81.636C341.659,79.272,357.607,74.544,365.581,72.181L373.556,69.817\" id=\"rr-mermaid-k7renp-L_Alias_Canonical_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Alias_Canonical_0\" data-points=\"W3sieCI6Mjc0LjAzMTI1LCJ5Ijo4NH0seyJ4IjozMjUuNzEwOTM3NSwieSI6ODR9LHsieCI6Mzc3LjM5MDYyNSwieSI6NjguNjc5ODMyMjQ4MzcyNTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k7renp_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Article_Canonical_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Article_Alias_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(325.7109375, 84)\"><g class=\"label\" data-id=\"L_Alias_Canonical_0\" transform=\"translate(-26.6796875, -12)\"><foreignObject width=\"53.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>redirect</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-k7renp-flowchart-Article-0\" data-look=\"classic\" transform=\"translate(60.2265625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2265625\" y=\"-27\" width=\"104.453125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2265625, -12)\"><rect></rect><foreignObject width=\"44.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k7renp-flowchart-Canonical-2\" data-look=\"classic\" transform=\"translate(450.5234375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1328125\" y=\"-39\" width=\"146.265625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1328125, -24)\"><rect></rect><foreignObject width=\"86.265625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Canonical<br>/blog/article/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k7renp-flowchart-Alias-4\" data-look=\"classic\" transform=\"translate(218.2421875, 84)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.7890625\" y=\"-39\" width=\"111.578125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.7890625, -24)\"><rect></rect><foreignObject width=\"51.578125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Alias<br>/article/</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-k7renp-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-k7renp-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Article[\"Article\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Article --> Canonical[\"Canonical&#x3C;br/>/blog/article/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Article --> Alias[\"Alias&#x3C;br/>/article/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Alias -->|\"redirect\"| Canonical</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>公開先はページ生成だけで使う情報ではありません。</p>\n<p>たとえば、</p>\n<ul>\n  <li>Site 内リンク</li>\n  <li>redirect</li>\n  <li>sitemap</li>\n  <li>search index</li>\n  <li>language switcher</li>\n  <li>Content Graph</li>\n</ul>\n<p>なども公開先を参照します。</p>\n<p>そのため Riebeckite では URL を単なる文字列として各機能が独自に計算するのではなく、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> として明示的に管理します。</p>\n<h1 id=\"manifest\">Manifest</h1>\n<p>Manifest は、<strong>Build 時に確定したコンテンツの一覧</strong>です。</p>\n<p>各 entry には、たとえば次の情報が含まれます。</p>\n<ul>\n  <li>論理パス</li>\n  <li>metadata</li>\n  <li>公開先</li>\n  <li>Plugin による処理結果</li>\n  <li>incremental build に必要な情報</li>\n</ul>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-7s0onq\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 599.28125px;\" viewBox=\"0 0 599.28125 382\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-7s0onq{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-7s0onq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-7s0onq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-7s0onq .error-icon{fill:#552222;}#rr-mermaid-7s0onq .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-7s0onq .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-7s0onq .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-7s0onq .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-7s0onq .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-7s0onq .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-7s0onq .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-7s0onq .marker{fill:#333333;stroke:#333333;}#rr-mermaid-7s0onq .marker.cross{stroke:#333333;}#rr-mermaid-7s0onq svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-7s0onq p{margin:0;}#rr-mermaid-7s0onq .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-7s0onq .cluster-label text{fill:#333;}#rr-mermaid-7s0onq .cluster-label span{color:#333;}#rr-mermaid-7s0onq .cluster-label span p{background-color:transparent;}#rr-mermaid-7s0onq .label text,#rr-mermaid-7s0onq span{fill:#333;color:#333;}#rr-mermaid-7s0onq .node rect,#rr-mermaid-7s0onq .node circle,#rr-mermaid-7s0onq .node ellipse,#rr-mermaid-7s0onq .node polygon,#rr-mermaid-7s0onq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-7s0onq .rough-node .label text,#rr-mermaid-7s0onq .node .label text,#rr-mermaid-7s0onq .image-shape .label,#rr-mermaid-7s0onq .icon-shape .label{text-anchor:middle;}#rr-mermaid-7s0onq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-7s0onq .rough-node .label,#rr-mermaid-7s0onq .node .label,#rr-mermaid-7s0onq .image-shape .label,#rr-mermaid-7s0onq .icon-shape .label{text-align:center;}#rr-mermaid-7s0onq .node.clickable{cursor:pointer;}#rr-mermaid-7s0onq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-7s0onq .arrowheadPath{fill:#333333;}#rr-mermaid-7s0onq .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-7s0onq .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-7s0onq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-7s0onq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-7s0onq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-7s0onq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-7s0onq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-7s0onq .cluster text{fill:#333;}#rr-mermaid-7s0onq .cluster span{color:#333;}#rr-mermaid-7s0onq .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-7s0onq .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-7s0onq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-7s0onq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-7s0onq rect.text{fill:none;stroke-width:0;}#rr-mermaid-7s0onq .icon-shape,#rr-mermaid-7s0onq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-7s0onq .icon-shape p,#rr-mermaid-7s0onq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-7s0onq .icon-shape .label rect,#rr-mermaid-7s0onq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-7s0onq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-7s0onq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-7s0onq .node .neo-node{stroke:#9370DB;}#rr-mermaid-7s0onq [data-look=\"neo\"].node rect,#rr-mermaid-7s0onq [data-look=\"neo\"].cluster rect,#rr-mermaid-7s0onq [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7s0onq [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-7s0onq [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-7s0onq [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7s0onq [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-7s0onq [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7s0onq [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-7s0onq [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7s0onq [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-7s0onq :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-7s0onq_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-7s0onq_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M187.188,191L191.354,191C195.521,191,203.854,191,211.521,191C219.188,191,226.188,191,229.688,191L233.188,191\" id=\"rr-mermaid-7s0onq-L_Manager_Manifest_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manager_Manifest_0\" data-points=\"W3sieCI6MTg3LjE4NzUsInkiOjE5MX0seyJ4IjoyMTIuMTg3NSwieSI6MTkxfSx7IngiOjIzNy4xODc1LCJ5IjoxOTF9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7s0onq_flowchart-v2-pointEnd)\"></path><path d=\"M312.174,164L323.921,142.5C335.668,121,359.162,78,374.629,56.5C390.096,35,397.536,35,401.257,35L404.977,35\" id=\"rr-mermaid-7s0onq-L_Manifest_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_Page_0\" data-points=\"W3sieCI6MzEyLjE3Mzk3ODM2NTM4NDY0LCJ5IjoxNjR9LHsieCI6MzgyLjY1NjI1LCJ5IjozNX0seyJ4Ijo0MDguOTc2NTYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7s0onq_flowchart-v2-pointEnd)\"></path><path d=\"M341.678,164L348.508,159.833C355.338,155.667,368.997,147.333,379.625,143.167C390.253,139,397.849,139,401.647,139L405.445,139\" id=\"rr-mermaid-7s0onq-L_Manifest_Runtime_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_Runtime_0\" data-points=\"W3sieCI6MzQxLjY3ODE4NTA5NjE1Mzg3LCJ5IjoxNjR9LHsieCI6MzgyLjY1NjI1LCJ5IjoxMzl9LHsieCI6NDA5LjQ0NTMxMjUsInkiOjEzOX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7s0onq_flowchart-v2-pointEnd)\"></path><path d=\"M341.678,218L348.508,222.167C355.338,226.333,368.997,234.667,379.327,238.833C389.656,243,396.656,243,400.156,243L403.656,243\" id=\"rr-mermaid-7s0onq-L_Manifest_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_Build_0\" data-points=\"W3sieCI6MzQxLjY3ODE4NTA5NjE1Mzg3LCJ5IjoyMTh9LHsieCI6MzgyLjY1NjI1LCJ5IjoyNDN9LHsieCI6NDA3LjY1NjI1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7s0onq_flowchart-v2-pointEnd)\"></path><path d=\"M312.174,218L323.921,239.5C335.668,261,359.162,304,375.743,325.5C392.323,347,401.99,347,406.823,347L411.656,347\" id=\"rr-mermaid-7s0onq-L_Manifest_Inspect_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Manifest_Inspect_0\" data-points=\"W3sieCI6MzEyLjE3Mzk3ODM2NTM4NDY0LCJ5IjoyMTh9LHsieCI6MzgyLjY1NjI1LCJ5IjozNDd9LHsieCI6NDE1LjY1NjI1LCJ5IjozNDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-7s0onq_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manager_Manifest_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_Page_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_Runtime_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Manifest_Inspect_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Manager-0\" data-look=\"classic\" transform=\"translate(97.59375, 191)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.59375\" y=\"-27\" width=\"179.1875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.59375, -12)\"><rect></rect><foreignObject width=\"119.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Manifest-1\" data-look=\"classic\" transform=\"translate(297.421875, 191)\"><rect class=\"basic label-container\" style=\"\" x=\"-60.234375\" y=\"-27\" width=\"120.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-30.234375, -12)\"><rect></rect><foreignObject width=\"60.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Page-5\" data-look=\"classic\" transform=\"translate(499.46875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.4921875\" y=\"-27\" width=\"180.984375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.4921875, -12)\"><rect></rect><foreignObject width=\"120.984375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Generation</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Runtime-7\" data-look=\"classic\" transform=\"translate(499.46875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.0234375\" y=\"-27\" width=\"180.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.0234375, -12)\"><rect></rect><foreignObject width=\"120.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Runtime Queries</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Build-9\" data-look=\"classic\" transform=\"translate(499.46875, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.8125\" y=\"-27\" width=\"183.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.8125, -12)\"><rect></rect><foreignObject width=\"123.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Incremental Build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-7s0onq-flowchart-Inspect-11\" data-look=\"classic\" transform=\"translate(499.46875, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>inspect content</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-7s0onq-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-7s0onq-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Manager[\"ContentManager\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Manifest[\"Manifest\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Manager --> Manifest</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Manifest --> Page[\"Page Generation\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Manifest --> Runtime[\"Runtime Queries\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Manifest --> Build[\"Incremental Build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Manifest --> Inspect[\"inspect content\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Manifest は、Content System が解決した結果を他の仕組みへ渡す重要な境界です。</p>\n<p>各 consumer が Markdown を読み直して同じ情報を再計算するのではなく、解決済みの Manifest を利用します。</p>\n<h1 id=\"content-graph\">Content Graph</h1>\n<p>Content Graph は、コンテンツ同士の関係を表します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"markdown\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">markdown</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"markdown\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"markdown\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">[[Article B]]</span></span></code></pre>\n  </div>\n</figure>\n<p>という WikiLink があれば、</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-bmpo7k\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 304.265625px;\" viewBox=\"0 0 304.265625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-bmpo7k{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-bmpo7k .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-bmpo7k .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-bmpo7k .error-icon{fill:#552222;}#rr-mermaid-bmpo7k .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-bmpo7k .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-bmpo7k .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-bmpo7k .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-bmpo7k .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-bmpo7k .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-bmpo7k .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-bmpo7k .marker{fill:#333333;stroke:#333333;}#rr-mermaid-bmpo7k .marker.cross{stroke:#333333;}#rr-mermaid-bmpo7k svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-bmpo7k p{margin:0;}#rr-mermaid-bmpo7k .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-bmpo7k .cluster-label text{fill:#333;}#rr-mermaid-bmpo7k .cluster-label span{color:#333;}#rr-mermaid-bmpo7k .cluster-label span p{background-color:transparent;}#rr-mermaid-bmpo7k .label text,#rr-mermaid-bmpo7k span{fill:#333;color:#333;}#rr-mermaid-bmpo7k .node rect,#rr-mermaid-bmpo7k .node circle,#rr-mermaid-bmpo7k .node ellipse,#rr-mermaid-bmpo7k .node polygon,#rr-mermaid-bmpo7k .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-bmpo7k .rough-node .label text,#rr-mermaid-bmpo7k .node .label text,#rr-mermaid-bmpo7k .image-shape .label,#rr-mermaid-bmpo7k .icon-shape .label{text-anchor:middle;}#rr-mermaid-bmpo7k .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-bmpo7k .rough-node .label,#rr-mermaid-bmpo7k .node .label,#rr-mermaid-bmpo7k .image-shape .label,#rr-mermaid-bmpo7k .icon-shape .label{text-align:center;}#rr-mermaid-bmpo7k .node.clickable{cursor:pointer;}#rr-mermaid-bmpo7k .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-bmpo7k .arrowheadPath{fill:#333333;}#rr-mermaid-bmpo7k .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-bmpo7k .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-bmpo7k .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-bmpo7k .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-bmpo7k .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-bmpo7k .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-bmpo7k .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-bmpo7k .cluster text{fill:#333;}#rr-mermaid-bmpo7k .cluster span{color:#333;}#rr-mermaid-bmpo7k .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-bmpo7k .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-bmpo7k div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-bmpo7k .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-bmpo7k rect.text{fill:none;stroke-width:0;}#rr-mermaid-bmpo7k .icon-shape,#rr-mermaid-bmpo7k .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-bmpo7k .icon-shape p,#rr-mermaid-bmpo7k .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-bmpo7k .icon-shape .label rect,#rr-mermaid-bmpo7k .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-bmpo7k .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-bmpo7k .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-bmpo7k .node .neo-node{stroke:#9370DB;}#rr-mermaid-bmpo7k [data-look=\"neo\"].node rect,#rr-mermaid-bmpo7k [data-look=\"neo\"].cluster rect,#rr-mermaid-bmpo7k [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bmpo7k [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-bmpo7k [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-bmpo7k [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bmpo7k [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-bmpo7k [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bmpo7k [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-bmpo7k [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bmpo7k [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bmpo7k :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-bmpo7k_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M126.688,35L130.854,35C135.021,35,143.354,35,151.021,35C158.688,35,165.688,35,169.188,35L172.688,35\" id=\"rr-mermaid-bmpo7k-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTI2LjY4NzUsInkiOjM1fSx7IngiOjE1MS42ODc1LCJ5IjozNX0seyJ4IjoxNzYuNjg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-bmpo7k_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-bmpo7k-flowchart-A-0\" data-look=\"classic\" transform=\"translate(67.34375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.34375\" y=\"-27\" width=\"118.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.34375, -12)\"><rect></rect><foreignObject width=\"58.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article A</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-bmpo7k-flowchart-B-1\" data-look=\"classic\" transform=\"translate(236.4765625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.7890625\" y=\"-27\" width=\"119.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.7890625, -12)\"><rect></rect><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article B</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-bmpo7k-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-bmpo7k-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>graph LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Article A\"] --> B[\"Article B\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>という関係が成り立ちます。</p>\n<p>この情報から backlink も扱えます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-jkkxvc\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 606.34375px;\" viewBox=\"0 0.0002593994140625 606.34375 71.99974060058594\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-jkkxvc{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-jkkxvc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-jkkxvc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-jkkxvc .error-icon{fill:#552222;}#rr-mermaid-jkkxvc .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-jkkxvc .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-jkkxvc .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-jkkxvc .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-jkkxvc .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-jkkxvc .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-jkkxvc .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-jkkxvc .marker{fill:#333333;stroke:#333333;}#rr-mermaid-jkkxvc .marker.cross{stroke:#333333;}#rr-mermaid-jkkxvc svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-jkkxvc p{margin:0;}#rr-mermaid-jkkxvc .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-jkkxvc .cluster-label text{fill:#333;}#rr-mermaid-jkkxvc .cluster-label span{color:#333;}#rr-mermaid-jkkxvc .cluster-label span p{background-color:transparent;}#rr-mermaid-jkkxvc .label text,#rr-mermaid-jkkxvc span{fill:#333;color:#333;}#rr-mermaid-jkkxvc .node rect,#rr-mermaid-jkkxvc .node circle,#rr-mermaid-jkkxvc .node ellipse,#rr-mermaid-jkkxvc .node polygon,#rr-mermaid-jkkxvc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-jkkxvc .rough-node .label text,#rr-mermaid-jkkxvc .node .label text,#rr-mermaid-jkkxvc .image-shape .label,#rr-mermaid-jkkxvc .icon-shape .label{text-anchor:middle;}#rr-mermaid-jkkxvc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-jkkxvc .rough-node .label,#rr-mermaid-jkkxvc .node .label,#rr-mermaid-jkkxvc .image-shape .label,#rr-mermaid-jkkxvc .icon-shape .label{text-align:center;}#rr-mermaid-jkkxvc .node.clickable{cursor:pointer;}#rr-mermaid-jkkxvc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-jkkxvc .arrowheadPath{fill:#333333;}#rr-mermaid-jkkxvc .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-jkkxvc .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-jkkxvc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-jkkxvc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-jkkxvc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-jkkxvc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-jkkxvc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-jkkxvc .cluster text{fill:#333;}#rr-mermaid-jkkxvc .cluster span{color:#333;}#rr-mermaid-jkkxvc .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-jkkxvc .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-jkkxvc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-jkkxvc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-jkkxvc rect.text{fill:none;stroke-width:0;}#rr-mermaid-jkkxvc .icon-shape,#rr-mermaid-jkkxvc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-jkkxvc .icon-shape p,#rr-mermaid-jkkxvc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-jkkxvc .icon-shape .label rect,#rr-mermaid-jkkxvc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-jkkxvc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-jkkxvc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-jkkxvc .node .neo-node{stroke:#9370DB;}#rr-mermaid-jkkxvc [data-look=\"neo\"].node rect,#rr-mermaid-jkkxvc [data-look=\"neo\"].cluster rect,#rr-mermaid-jkkxvc [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jkkxvc [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-jkkxvc [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-jkkxvc [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jkkxvc [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-jkkxvc [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jkkxvc [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-jkkxvc [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jkkxvc [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-jkkxvc :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-jkkxvc_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M126.688,27.902L136.339,26.585C145.99,25.268,165.292,22.634,183.933,22.539C202.575,22.444,220.556,24.889,229.546,26.111L238.536,27.333\" id=\"rr-mermaid-jkkxvc-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTI2LjY4NzUsInkiOjI3LjkwMTkxODk3NjU0NTg0NH0seyJ4IjoxODQuNTkzNzUsInkiOjIwfSx7IngiOjI0Mi41LCJ5IjoyNy44NzIwMjEyNDEyODc3NTR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jkkxvc_flowchart-v2-pointEnd)\"></path><path d=\"M477.891,44.157L468.24,45.464C458.589,46.771,439.286,49.386,420.645,49.471C402.003,49.556,384.023,47.111,375.032,45.889L366.042,44.667\" id=\"rr-mermaid-jkkxvc-L_C_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_B_0\" data-points=\"W3sieCI6NDc3Ljg5MDYyNSwieSI6NDQuMTU3MTMyNDY0Nzg0MDh9LHsieCI6NDE5Ljk4NDM3NSwieSI6NTJ9LHsieCI6MzYyLjA3ODEyNSwieSI6NDQuMTI3OTc4NzU4NzEyMjQ2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jkkxvc_flowchart-v2-pointEnd)\"></path><path d=\"M242.5,44.128L232.849,45.44C223.198,46.752,203.896,49.376,185.254,49.461C166.613,49.546,148.632,47.093,139.641,45.866L130.651,44.639\" id=\"rr-mermaid-jkkxvc-L_B_A_0\" class=\"edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_A_0\" data-points=\"W3sieCI6MjQyLjUsInkiOjQ0LjEyNzk3ODc1ODcxMjI0Nn0seyJ4IjoxODQuNTkzNzUsInkiOjUyfSx7IngiOjEyNi42ODc1LCJ5Ijo0NC4wOTgwODEwMjM0NTQxNn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jkkxvc_flowchart-v2-pointEnd)\"></path><path d=\"M362.078,27.872L371.729,26.56C381.38,25.248,400.682,22.624,419.324,22.53C437.965,22.435,455.946,24.871,464.936,26.088L473.927,27.306\" id=\"rr-mermaid-jkkxvc-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MzYyLjA3ODEyNSwieSI6MjcuODcyMDIxMjQxMjg3NzU0fSx7IngiOjQxOS45ODQzNzUsInkiOjIwfSx7IngiOjQ3Ny44OTA2MjUsInkiOjI3Ljg0Mjg2NzUzNTIxNTkyM31d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-jkkxvc_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(184.59375, 52)\"><g class=\"label\" data-id=\"L_B_A_0\" transform=\"translate(-32.90625, -12)\"><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>backlinks</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(419.98243, 20.00026)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-32.90625, -12)\"><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>backlinks</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-jkkxvc-flowchart-A-0\" data-look=\"classic\" transform=\"translate(67.34375, 36)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.34375\" y=\"-27\" width=\"118.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.34375, -12)\"><rect></rect><foreignObject width=\"58.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article A</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jkkxvc-flowchart-B-1\" data-look=\"classic\" transform=\"translate(302.2890625, 36)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.7890625\" y=\"-27\" width=\"119.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.7890625, -12)\"><rect></rect><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article B</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-jkkxvc-flowchart-C-2\" data-look=\"classic\" transform=\"translate(538.1171875, 36)\"><rect class=\"basic label-container\" style=\"\" x=\"-60.2265625\" y=\"-27\" width=\"120.453125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-30.2265625, -12)\"><rect></rect><foreignObject width=\"60.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Article C</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-jkkxvc-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-jkkxvc-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>graph LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Article A\"] --> B[\"Article B\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    C[\"Article C\"] --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    B -. \"backlinks\" .-> A</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    B -. \"backlinks\" .-> C</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Content Graph は単なるグラフ表示用のデータではありません。</p>\n<p>たとえば、</p>\n<ul>\n  <li>WikiLink</li>\n  <li>Markdown link</li>\n  <li>backlinks</li>\n  <li>taxonomy</li>\n  <li>series</li>\n  <li>related posts</li>\n  <li>local graph</li>\n  <li>garden explorer</li>\n</ul>\n<p>などの基盤として利用できます。</p>\n<p>Plugin は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>extendContentGraph</span></span></code></pre>\n  </div>\n</figure>\n<p>を使ってグラフへ情報を追加できます。</p>\n<h1 id=\"content-queries\">Content Queries</h1>\n<p>Build 後のコンテンツを検索・整理するために、Query API が用意されています。</p>\n<p>代表的な API は次のとおりです。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>queryContentEntries</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>queryContentPage</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>groupContentEntries</span></span></code></pre>\n  </div>\n</figure>\n<p>これらは<strong>ファイルを検索する API ではありません</strong>。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-4uxlg6\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 902.28125px;\" viewBox=\"0 0 902.28125 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-4uxlg6{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-4uxlg6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-4uxlg6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-4uxlg6 .error-icon{fill:#552222;}#rr-mermaid-4uxlg6 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-4uxlg6 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-4uxlg6 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-4uxlg6 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-4uxlg6 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-4uxlg6 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-4uxlg6 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-4uxlg6 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-4uxlg6 .marker.cross{stroke:#333333;}#rr-mermaid-4uxlg6 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-4uxlg6 p{margin:0;}#rr-mermaid-4uxlg6 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-4uxlg6 .cluster-label text{fill:#333;}#rr-mermaid-4uxlg6 .cluster-label span{color:#333;}#rr-mermaid-4uxlg6 .cluster-label span p{background-color:transparent;}#rr-mermaid-4uxlg6 .label text,#rr-mermaid-4uxlg6 span{fill:#333;color:#333;}#rr-mermaid-4uxlg6 .node rect,#rr-mermaid-4uxlg6 .node circle,#rr-mermaid-4uxlg6 .node ellipse,#rr-mermaid-4uxlg6 .node polygon,#rr-mermaid-4uxlg6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-4uxlg6 .rough-node .label text,#rr-mermaid-4uxlg6 .node .label text,#rr-mermaid-4uxlg6 .image-shape .label,#rr-mermaid-4uxlg6 .icon-shape .label{text-anchor:middle;}#rr-mermaid-4uxlg6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-4uxlg6 .rough-node .label,#rr-mermaid-4uxlg6 .node .label,#rr-mermaid-4uxlg6 .image-shape .label,#rr-mermaid-4uxlg6 .icon-shape .label{text-align:center;}#rr-mermaid-4uxlg6 .node.clickable{cursor:pointer;}#rr-mermaid-4uxlg6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-4uxlg6 .arrowheadPath{fill:#333333;}#rr-mermaid-4uxlg6 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-4uxlg6 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-4uxlg6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-4uxlg6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-4uxlg6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-4uxlg6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-4uxlg6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-4uxlg6 .cluster text{fill:#333;}#rr-mermaid-4uxlg6 .cluster span{color:#333;}#rr-mermaid-4uxlg6 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-4uxlg6 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-4uxlg6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-4uxlg6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-4uxlg6 rect.text{fill:none;stroke-width:0;}#rr-mermaid-4uxlg6 .icon-shape,#rr-mermaid-4uxlg6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-4uxlg6 .icon-shape p,#rr-mermaid-4uxlg6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-4uxlg6 .icon-shape .label rect,#rr-mermaid-4uxlg6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-4uxlg6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-4uxlg6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-4uxlg6 .node .neo-node{stroke:#9370DB;}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node rect,#rr-mermaid-4uxlg6 [data-look=\"neo\"].cluster rect,#rr-mermaid-4uxlg6 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4uxlg6 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4uxlg6 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-4uxlg6 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4uxlg6 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4uxlg6 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-4uxlg6_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M180.031,35L184.198,35C188.365,35,196.698,35,204.365,35C212.031,35,219.031,35,222.531,35L226.031,35\" id=\"rr-mermaid-4uxlg6-L_Files_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Files_Build_0\" data-points=\"W3sieCI6MTgwLjAzMTI1LCJ5IjozNX0seyJ4IjoyMDUuMDMxMjUsInkiOjM1fSx7IngiOjIzMC4wMzEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4uxlg6_flowchart-v2-pointEnd)\"></path><path d=\"M458.141,35L462.307,35C466.474,35,474.807,35,489.598,38.935C504.389,42.87,525.637,50.74,536.261,54.676L546.885,58.611\" id=\"rr-mermaid-4uxlg6-L_Build_Index_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Build_Index_0\" data-points=\"W3sieCI6NDU4LjE0MDYyNSwieSI6MzV9LHsieCI6NDgzLjE0MDYyNSwieSI6MzV9LHsieCI6NTUwLjYzNjExNzc4ODQ2MTUsInkiOjYwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4uxlg6_flowchart-v2-pointEnd)\"></path><path d=\"M426.117,139L435.621,139C445.125,139,464.133,139,484.261,135.065C504.389,131.13,525.637,123.26,536.261,119.324L546.885,115.389\" id=\"rr-mermaid-4uxlg6-L_Query_Index_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Query_Index_0\" data-points=\"W3sieCI6NDI2LjExNzE4NzUsInkiOjEzOX0seyJ4Ijo0ODMuMTQwNjI1LCJ5IjoxMzl9LHsieCI6NTUwLjYzNjExNzc4ODQ2MTUsInkiOjExNH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4uxlg6_flowchart-v2-pointEnd)\"></path><path d=\"M738.922,87L743.089,87C747.255,87,755.589,87,763.255,87C770.922,87,777.922,87,781.422,87L784.922,87\" id=\"rr-mermaid-4uxlg6-L_Index_Result_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Index_Result_0\" data-points=\"W3sieCI6NzM4LjkyMTg3NSwieSI6ODd9LHsieCI6NzYzLjkyMTg3NSwieSI6ODd9LHsieCI6Nzg4LjkyMTg3NSwieSI6ODd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4uxlg6_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Files_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Build_Index_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Query_Index_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Index_Result_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-4uxlg6-flowchart-Files-0\" data-look=\"classic\" transform=\"translate(94.015625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.015625\" y=\"-27\" width=\"172.03125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.015625, -12)\"><rect></rect><foreignObject width=\"112.03125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Markdown Files</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4uxlg6-flowchart-Build-1\" data-look=\"classic\" transform=\"translate(344.0859375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.0546875\" y=\"-27\" width=\"228.109375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.0546875, -12)\"><rect></rect><foreignObject width=\"168.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build / ContentManager</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4uxlg6-flowchart-Index-2\" data-look=\"classic\" transform=\"translate(623.53125, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-115.390625\" y=\"-27\" width=\"230.78125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-85.390625, -12)\"><rect></rect><foreignObject width=\"170.78125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Resolved Content Index</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4uxlg6-flowchart-Query-3\" data-look=\"classic\" transform=\"translate(344.0859375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.03125\" y=\"-27\" width=\"164.0625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.03125, -12)\"><rect></rect><foreignObject width=\"104.0625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Query</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4uxlg6-flowchart-Result-4\" data-look=\"classic\" transform=\"translate(841.6015625, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.6796875\" y=\"-27\" width=\"105.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.6796875, -12)\"><rect></rect><foreignObject width=\"45.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Result</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-4uxlg6-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-4uxlg6-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Files[\"Markdown Files\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Build[\"Build / ContentManager\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Index[\"Resolved Content Index\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Query[\"Content Query\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Result[\"Result\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Files --> Build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Build --> Index</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Query --> Index</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Index --> Result</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Query は、Build 時にすでに解決された index に対して実行します。</p>\n<p>Runtime や Plugin が Markdown を直接読み直して独自に状態を再構築することは避けます。</p>\n<h1 id=\"content-collections\">Content Collections</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildContentCollections</span></span></code></span> は、複数のコンテンツを一覧として扱うための仕組みです。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>すべての記事</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>     ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>日付順に並べる</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>     ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>タグごとに分類する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>     ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>ページ単位に分割する</span></span></code></pre>\n  </div>\n</figure>\n<p>といった処理に利用できます。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageSize</span></span></code></span> を指定すると pagination も扱えます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-k73614\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 897.578125px;\" viewBox=\"0 0 897.578125 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-k73614{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-k73614 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-k73614 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-k73614 .error-icon{fill:#552222;}#rr-mermaid-k73614 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-k73614 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-k73614 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-k73614 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-k73614 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-k73614 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-k73614 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-k73614 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-k73614 .marker.cross{stroke:#333333;}#rr-mermaid-k73614 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-k73614 p{margin:0;}#rr-mermaid-k73614 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-k73614 .cluster-label text{fill:#333;}#rr-mermaid-k73614 .cluster-label span{color:#333;}#rr-mermaid-k73614 .cluster-label span p{background-color:transparent;}#rr-mermaid-k73614 .label text,#rr-mermaid-k73614 span{fill:#333;color:#333;}#rr-mermaid-k73614 .node rect,#rr-mermaid-k73614 .node circle,#rr-mermaid-k73614 .node ellipse,#rr-mermaid-k73614 .node polygon,#rr-mermaid-k73614 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-k73614 .rough-node .label text,#rr-mermaid-k73614 .node .label text,#rr-mermaid-k73614 .image-shape .label,#rr-mermaid-k73614 .icon-shape .label{text-anchor:middle;}#rr-mermaid-k73614 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-k73614 .rough-node .label,#rr-mermaid-k73614 .node .label,#rr-mermaid-k73614 .image-shape .label,#rr-mermaid-k73614 .icon-shape .label{text-align:center;}#rr-mermaid-k73614 .node.clickable{cursor:pointer;}#rr-mermaid-k73614 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-k73614 .arrowheadPath{fill:#333333;}#rr-mermaid-k73614 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-k73614 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-k73614 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-k73614 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-k73614 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-k73614 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-k73614 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-k73614 .cluster text{fill:#333;}#rr-mermaid-k73614 .cluster span{color:#333;}#rr-mermaid-k73614 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-k73614 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-k73614 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-k73614 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-k73614 rect.text{fill:none;stroke-width:0;}#rr-mermaid-k73614 .icon-shape,#rr-mermaid-k73614 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-k73614 .icon-shape p,#rr-mermaid-k73614 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-k73614 .icon-shape .label rect,#rr-mermaid-k73614 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-k73614 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-k73614 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-k73614 .node .neo-node{stroke:#9370DB;}#rr-mermaid-k73614 [data-look=\"neo\"].node rect,#rr-mermaid-k73614 [data-look=\"neo\"].cluster rect,#rr-mermaid-k73614 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k73614 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-k73614 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-k73614 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k73614 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-k73614 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k73614 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-k73614 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k73614 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-k73614 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-k73614_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-k73614_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M192.516,35L196.682,35C200.849,35,209.182,35,216.849,35C224.516,35,231.516,35,235.016,35L238.516,35\" id=\"rr-mermaid-k73614-L_Entries_Sort_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Entries_Sort_0\" data-points=\"W3sieCI6MTkyLjUxNTYyNSwieSI6MzV9LHsieCI6MjE3LjUxNTYyNSwieSI6MzV9LHsieCI6MjQyLjUxNTYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k73614_flowchart-v2-pointEnd)\"></path><path d=\"M331.859,35L336.026,35C340.193,35,348.526,35,356.193,35C363.859,35,370.859,35,374.359,35L377.859,35\" id=\"rr-mermaid-k73614-L_Sort_Group_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Sort_Group_0\" data-points=\"W3sieCI6MzMxLjg1OTM3NSwieSI6MzV9LHsieCI6MzU2Ljg1OTM3NSwieSI6MzV9LHsieCI6MzgxLjg1OTM3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k73614_flowchart-v2-pointEnd)\"></path><path d=\"M486.328,35L490.495,35C494.661,35,502.995,35,510.661,35C518.328,35,525.328,35,528.828,35L532.328,35\" id=\"rr-mermaid-k73614-L_Group_Paginate_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Group_Paginate_0\" data-points=\"W3sieCI6NDg2LjMyODEyNSwieSI6MzV9LHsieCI6NTExLjMyODEyNSwieSI6MzV9LHsieCI6NTM2LjMyODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k73614_flowchart-v2-pointEnd)\"></path><path d=\"M659.5,35L663.667,35C667.833,35,676.167,35,683.833,35C691.5,35,698.5,35,702,35L705.5,35\" id=\"rr-mermaid-k73614-L_Paginate_Pages_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Paginate_Pages_0\" data-points=\"W3sieCI6NjU5LjUsInkiOjM1fSx7IngiOjY4NC41LCJ5IjozNX0seyJ4Ijo3MDkuNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-k73614_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Entries_Sort_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Sort_Group_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Group_Paginate_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Paginate_Pages_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-k73614-flowchart-Entries-0\" data-look=\"classic\" transform=\"translate(100.2578125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.2578125\" y=\"-27\" width=\"184.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.2578125, -12)\"><rect></rect><foreignObject width=\"124.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Published Entries</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k73614-flowchart-Sort-1\" data-look=\"classic\" transform=\"translate(287.1875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-44.671875\" y=\"-27\" width=\"89.34375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-14.671875, -12)\"><rect></rect><foreignObject width=\"29.34375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Sort</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k73614-flowchart-Group-2\" data-look=\"classic\" transform=\"translate(434.09375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.234375\" y=\"-27\" width=\"104.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.234375, -12)\"><rect></rect><foreignObject width=\"44.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Group</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k73614-flowchart-Paginate-3\" data-look=\"classic\" transform=\"translate(597.9140625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-61.5859375\" y=\"-27\" width=\"123.171875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-31.5859375, -12)\"><rect></rect><foreignObject width=\"63.171875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Paginate</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-k73614-flowchart-Pages-4\" data-look=\"classic\" transform=\"translate(799.5390625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.0390625\" y=\"-27\" width=\"180.078125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.0390625, -12)\"><rect></rect><foreignObject width=\"120.078125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Collection Pages</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-k73614-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-k73614-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Entries[\"Published Entries\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Sort[\"Sort\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Group[\"Group\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Paginate[\"Paginate\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Pages[\"Collection Pages\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Entries --> Sort</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Sort --> Group</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Group --> Paginate</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Paginate --> Pages</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin や Site Application は、この仕組みを使って記事一覧、タグ一覧などを作成できます。</p>\n<h1 id=\"assets\">Assets</h1>\n<p>画像や添付ファイルは Markdown 本文とは別の entry として扱います。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>content/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>├─ article.md</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>└─ images/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>   └─ example.png</span></span></code></pre>\n  </div>\n</figure>\n<p>があった場合、Riebeckite はアセットの論理パスを保ちながら、Site 上で利用できる URL へ対応付けます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-rf8vts\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 687.3125px;\" viewBox=\"0 0 687.3125 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-rf8vts{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-rf8vts .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-rf8vts .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-rf8vts .error-icon{fill:#552222;}#rr-mermaid-rf8vts .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-rf8vts .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-rf8vts .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-rf8vts .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-rf8vts .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-rf8vts .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-rf8vts .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-rf8vts .marker{fill:#333333;stroke:#333333;}#rr-mermaid-rf8vts .marker.cross{stroke:#333333;}#rr-mermaid-rf8vts svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-rf8vts p{margin:0;}#rr-mermaid-rf8vts .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-rf8vts .cluster-label text{fill:#333;}#rr-mermaid-rf8vts .cluster-label span{color:#333;}#rr-mermaid-rf8vts .cluster-label span p{background-color:transparent;}#rr-mermaid-rf8vts .label text,#rr-mermaid-rf8vts span{fill:#333;color:#333;}#rr-mermaid-rf8vts .node rect,#rr-mermaid-rf8vts .node circle,#rr-mermaid-rf8vts .node ellipse,#rr-mermaid-rf8vts .node polygon,#rr-mermaid-rf8vts .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-rf8vts .rough-node .label text,#rr-mermaid-rf8vts .node .label text,#rr-mermaid-rf8vts .image-shape .label,#rr-mermaid-rf8vts .icon-shape .label{text-anchor:middle;}#rr-mermaid-rf8vts .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-rf8vts .rough-node .label,#rr-mermaid-rf8vts .node .label,#rr-mermaid-rf8vts .image-shape .label,#rr-mermaid-rf8vts .icon-shape .label{text-align:center;}#rr-mermaid-rf8vts .node.clickable{cursor:pointer;}#rr-mermaid-rf8vts .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-rf8vts .arrowheadPath{fill:#333333;}#rr-mermaid-rf8vts .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-rf8vts .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-rf8vts .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-rf8vts .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-rf8vts .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-rf8vts .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-rf8vts .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-rf8vts .cluster text{fill:#333;}#rr-mermaid-rf8vts .cluster span{color:#333;}#rr-mermaid-rf8vts .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-rf8vts .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-rf8vts div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-rf8vts .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-rf8vts rect.text{fill:none;stroke-width:0;}#rr-mermaid-rf8vts .icon-shape,#rr-mermaid-rf8vts .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-rf8vts .icon-shape p,#rr-mermaid-rf8vts .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-rf8vts .icon-shape .label rect,#rr-mermaid-rf8vts .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-rf8vts .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-rf8vts .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-rf8vts .node .neo-node{stroke:#9370DB;}#rr-mermaid-rf8vts [data-look=\"neo\"].node rect,#rr-mermaid-rf8vts [data-look=\"neo\"].cluster rect,#rr-mermaid-rf8vts [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-rf8vts [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-rf8vts [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-rf8vts [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-rf8vts [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-rf8vts [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-rf8vts [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-rf8vts [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-rf8vts [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-rf8vts :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-rf8vts_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-rf8vts_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M215.641,47L219.807,47C223.974,47,232.307,47,239.974,47C247.641,47,254.641,47,258.141,47L261.641,47\" id=\"rr-mermaid-rf8vts-L_Asset_Resolver_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Asset_Resolver_0\" data-points=\"W3sieCI6MjE1LjY0MDYyNSwieSI6NDd9LHsieCI6MjQwLjY0MDYyNSwieSI6NDd9LHsieCI6MjY1LjY0MDYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-rf8vts_flowchart-v2-pointEnd)\"></path><path d=\"M445.703,47L449.87,47C454.036,47,462.37,47,470.036,47C477.703,47,484.703,47,488.203,47L491.703,47\" id=\"rr-mermaid-rf8vts-L_Resolver_Public_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Public_0\" data-points=\"W3sieCI6NDQ1LjcwMzEyNSwieSI6NDd9LHsieCI6NDcwLjcwMzEyNSwieSI6NDd9LHsieCI6NDk1LjcwMzEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-rf8vts_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Asset_Resolver_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Public_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-rf8vts-flowchart-Asset-0\" data-look=\"classic\" transform=\"translate(111.8203125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-103.8203125\" y=\"-39\" width=\"207.640625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-73.8203125, -24)\"><rect></rect><foreignObject width=\"147.640625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Asset<br>images/example.png</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-rf8vts-flowchart-Resolver-1\" data-look=\"classic\" transform=\"translate(355.671875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.03125\" y=\"-27\" width=\"180.0625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.03125, -12)\"><rect></rect><foreignObject width=\"120.0625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Asset Resolution</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-rf8vts-flowchart-Public-2\" data-look=\"classic\" transform=\"translate(587.5078125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.8046875\" y=\"-27\" width=\"183.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.8046875, -12)\"><rect></rect><foreignObject width=\"123.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Asset URL</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-rf8vts-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-rf8vts-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Asset[\"Content Asset&#x3C;br/>images/example.png\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Resolver[\"Asset Resolution\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Public[\"Public Asset URL\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Asset --> Resolver</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Resolver --> Public</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>実際の URL 形式は Plugin や設定によって変わる場合があります。</p>\n<p>content root の外にある任意のファイルを公開 URL に変換しないことが重要です。</p>\n<p>Content System の公開境界を通して、安全に公開対象を決定します。</p>\n<h1 id=\"content-repository-を分離する場合\">Content Repository を分離する場合</h1>\n<p>Site と Content を別 repository にしても、Content System の基本的な流れは変わりません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-2nq50y\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 957.4375px;\" viewBox=\"0 0 957.4375 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-2nq50y{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-2nq50y .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-2nq50y .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-2nq50y .error-icon{fill:#552222;}#rr-mermaid-2nq50y .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-2nq50y .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-2nq50y .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-2nq50y .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-2nq50y .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-2nq50y .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-2nq50y .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-2nq50y .marker{fill:#333333;stroke:#333333;}#rr-mermaid-2nq50y .marker.cross{stroke:#333333;}#rr-mermaid-2nq50y svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-2nq50y p{margin:0;}#rr-mermaid-2nq50y .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-2nq50y .cluster-label text{fill:#333;}#rr-mermaid-2nq50y .cluster-label span{color:#333;}#rr-mermaid-2nq50y .cluster-label span p{background-color:transparent;}#rr-mermaid-2nq50y .label text,#rr-mermaid-2nq50y span{fill:#333;color:#333;}#rr-mermaid-2nq50y .node rect,#rr-mermaid-2nq50y .node circle,#rr-mermaid-2nq50y .node ellipse,#rr-mermaid-2nq50y .node polygon,#rr-mermaid-2nq50y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2nq50y .rough-node .label text,#rr-mermaid-2nq50y .node .label text,#rr-mermaid-2nq50y .image-shape .label,#rr-mermaid-2nq50y .icon-shape .label{text-anchor:middle;}#rr-mermaid-2nq50y .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-2nq50y .rough-node .label,#rr-mermaid-2nq50y .node .label,#rr-mermaid-2nq50y .image-shape .label,#rr-mermaid-2nq50y .icon-shape .label{text-align:center;}#rr-mermaid-2nq50y .node.clickable{cursor:pointer;}#rr-mermaid-2nq50y .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-2nq50y .arrowheadPath{fill:#333333;}#rr-mermaid-2nq50y .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-2nq50y .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-2nq50y .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2nq50y .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-2nq50y .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2nq50y .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-2nq50y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-2nq50y .cluster text{fill:#333;}#rr-mermaid-2nq50y .cluster span{color:#333;}#rr-mermaid-2nq50y .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-2nq50y .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-2nq50y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-2nq50y .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-2nq50y rect.text{fill:none;stroke-width:0;}#rr-mermaid-2nq50y .icon-shape,#rr-mermaid-2nq50y .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2nq50y .icon-shape p,#rr-mermaid-2nq50y .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-2nq50y .icon-shape .label rect,#rr-mermaid-2nq50y .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2nq50y .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-2nq50y .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-2nq50y .node .neo-node{stroke:#9370DB;}#rr-mermaid-2nq50y [data-look=\"neo\"].node rect,#rr-mermaid-2nq50y [data-look=\"neo\"].cluster rect,#rr-mermaid-2nq50y [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2nq50y [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-2nq50y [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2nq50y [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2nq50y [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-2nq50y [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2nq50y [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-2nq50y [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2nq50y [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2nq50y :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-2nq50y_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-2nq50y_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M204.969,35L209.135,35C213.302,35,221.635,35,229.302,35C236.969,35,243.969,35,247.469,35L250.969,35\" id=\"rr-mermaid-2nq50y-L_ContentRepo_Checkout_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ContentRepo_Checkout_0\" data-points=\"W3sieCI6MjA0Ljk2ODc1LCJ5IjozNX0seyJ4IjoyMjkuOTY4NzUsInkiOjM1fSx7IngiOjI1NC45Njg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2nq50y_flowchart-v2-pointEnd)\"></path><path d=\"M507.078,35L511.245,35C515.411,35,523.745,35,536.31,38.887C548.876,42.773,565.673,50.547,574.072,54.433L582.471,58.32\" id=\"rr-mermaid-2nq50y-L_Checkout_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Checkout_Build_0\" data-points=\"W3sieCI6NTA3LjA3ODEyNSwieSI6MzV9LHsieCI6NTMyLjA3ODEyNSwieSI6MzV9LHsieCI6NTg2LjEwMDgxMTI5ODA3NjksInkiOjYwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2nq50y_flowchart-v2-pointEnd)\"></path><path d=\"M465.273,139L476.408,139C487.542,139,509.81,139,529.343,135.113C548.876,131.227,565.673,123.453,574.072,119.567L582.471,115.68\" id=\"rr-mermaid-2nq50y-L_SiteRepo_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_SiteRepo_Build_0\" data-points=\"W3sieCI6NDY1LjI3MzQzNzUsInkiOjEzOX0seyJ4Ijo1MzIuMDc4MTI1LCJ5IjoxMzl9LHsieCI6NTg2LjEwMDgxMTI5ODA3NjksInkiOjExNH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2nq50y_flowchart-v2-pointEnd)\"></path><path d=\"M731.813,87L735.979,87C740.146,87,748.479,87,756.146,87C763.813,87,770.813,87,774.313,87L777.813,87\" id=\"rr-mermaid-2nq50y-L_Build_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Build_Site_0\" data-points=\"W3sieCI6NzMxLjgxMjUsInkiOjg3fSx7IngiOjc1Ni44MTI1LCJ5Ijo4N30seyJ4Ijo3ODEuODEyNSwieSI6ODd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2nq50y_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ContentRepo_Checkout_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Checkout_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_SiteRepo_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Build_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-2nq50y-flowchart-ContentRepo-0\" data-look=\"classic\" transform=\"translate(106.484375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.484375\" y=\"-27\" width=\"196.96875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.484375, -12)\"><rect></rect><foreignObject width=\"136.96875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Repository</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2nq50y-flowchart-Checkout-1\" data-look=\"classic\" transform=\"translate(381.0234375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.0546875\" y=\"-27\" width=\"252.109375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.0546875, -12)\"><rect></rect><foreignObject width=\"192.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Checkout / Content Source</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2nq50y-flowchart-SiteRepo-2\" data-look=\"classic\" transform=\"translate(381.0234375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.25\" y=\"-27\" width=\"168.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.25, -12)\"><rect></rect><foreignObject width=\"108.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Repository</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2nq50y-flowchart-Build-3\" data-look=\"classic\" transform=\"translate(644.4453125, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.3671875\" y=\"-27\" width=\"174.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.3671875, -12)\"><rect></rect><foreignObject width=\"114.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2nq50y-flowchart-Site-4\" data-look=\"classic\" transform=\"translate(865.625, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Generated Site</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-2nq50y-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-2nq50y-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    ContentRepo[\"Content Repository\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Checkout[\"Checkout / Content Source\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    SiteRepo[\"Site Repository\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Build[\"Riebeckite Build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Site[\"Generated Site\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    ContentRepo --> Checkout</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Checkout --> Build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    SiteRepo --> Build</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Build --> Site</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Content Repository はコンテンツを提供します。</p>\n<p>最終的に、</p>\n<ul>\n  <li>何を公開するか</li>\n  <li>どの Plugin を使うか</li>\n  <li>どの URL で公開するか</li>\n  <li>どの Site を生成するか</li>\n</ul>\n<p>を決定するのは Site Repository 側の Build です。</p>\n<p>このため、Content Repository が分離されていても ContentManager や Plugin が filesystem の配置を特別扱いする必要はありません。</p>\n<h1 id=\"content-system-の境界\">Content System の境界</h1>\n<p>Content System を変更するときは、次の原則を維持してください。</p>\n<table>\n  <thead>\n    <tr>\n      <th>原則</th>\n      <th>理由</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content.directory</span></span></code></span> は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span> 基準で解決する</td>\n      <td>Site ごとに安定した基準を持つため</td>\n    </tr>\n    <tr>\n      <td>Plugin は filesystem path に依存しない</td>\n      <td>Content Source を交換可能にするため</td>\n    </tr>\n    <tr>\n      <td>公開判定は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>publishStrategy</span></span></code></span> と frontmatter に従う</td>\n      <td>公開境界を一元化するため</td>\n    </tr>\n    <tr>\n      <td>公開先は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> として登録する</td>\n      <td>URL を各機能が独自計算しないため</td>\n    </tr>\n    <tr>\n      <td>Runtime は Build 済み index を利用する</td>\n      <td>Runtime から source filesystem を分離するため</td>\n    </tr>\n    <tr>\n      <td>Site Build が最終的な公開状態を決める</td>\n      <td>Content Repository と Site の責務を分離するため</td>\n    </tr>\n  </tbody>\n</table>\n<p>全体として、</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-l5t2im\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1031.375px;\" viewBox=\"0 0 1031.375 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-l5t2im{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-l5t2im .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-l5t2im .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-l5t2im .error-icon{fill:#552222;}#rr-mermaid-l5t2im .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-l5t2im .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-l5t2im .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-l5t2im .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-l5t2im .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-l5t2im .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-l5t2im .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-l5t2im .marker{fill:#333333;stroke:#333333;}#rr-mermaid-l5t2im .marker.cross{stroke:#333333;}#rr-mermaid-l5t2im svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-l5t2im p{margin:0;}#rr-mermaid-l5t2im .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-l5t2im .cluster-label text{fill:#333;}#rr-mermaid-l5t2im .cluster-label span{color:#333;}#rr-mermaid-l5t2im .cluster-label span p{background-color:transparent;}#rr-mermaid-l5t2im .label text,#rr-mermaid-l5t2im span{fill:#333;color:#333;}#rr-mermaid-l5t2im .node rect,#rr-mermaid-l5t2im .node circle,#rr-mermaid-l5t2im .node ellipse,#rr-mermaid-l5t2im .node polygon,#rr-mermaid-l5t2im .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-l5t2im .rough-node .label text,#rr-mermaid-l5t2im .node .label text,#rr-mermaid-l5t2im .image-shape .label,#rr-mermaid-l5t2im .icon-shape .label{text-anchor:middle;}#rr-mermaid-l5t2im .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-l5t2im .rough-node .label,#rr-mermaid-l5t2im .node .label,#rr-mermaid-l5t2im .image-shape .label,#rr-mermaid-l5t2im .icon-shape .label{text-align:center;}#rr-mermaid-l5t2im .node.clickable{cursor:pointer;}#rr-mermaid-l5t2im .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-l5t2im .arrowheadPath{fill:#333333;}#rr-mermaid-l5t2im .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-l5t2im .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-l5t2im .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-l5t2im .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-l5t2im .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-l5t2im .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-l5t2im .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-l5t2im .cluster text{fill:#333;}#rr-mermaid-l5t2im .cluster span{color:#333;}#rr-mermaid-l5t2im .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-l5t2im .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-l5t2im div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-l5t2im .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-l5t2im rect.text{fill:none;stroke-width:0;}#rr-mermaid-l5t2im .icon-shape,#rr-mermaid-l5t2im .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-l5t2im .icon-shape p,#rr-mermaid-l5t2im .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-l5t2im .icon-shape .label rect,#rr-mermaid-l5t2im .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-l5t2im .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-l5t2im .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-l5t2im .node .neo-node{stroke:#9370DB;}#rr-mermaid-l5t2im [data-look=\"neo\"].node rect,#rr-mermaid-l5t2im [data-look=\"neo\"].cluster rect,#rr-mermaid-l5t2im [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-l5t2im [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-l5t2im [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-l5t2im [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-l5t2im [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-l5t2im [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-l5t2im [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-l5t2im [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-l5t2im [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-l5t2im :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-l5t2im_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-l5t2im_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M152,47L156.167,47C160.333,47,168.667,47,176.333,47C184,47,191,47,194.5,47L198,47\" id=\"rr-mermaid-l5t2im-L_Source_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Source_Content_0\" data-points=\"W3sieCI6MTUyLCJ5Ijo0N30seyJ4IjoxNzcsInkiOjQ3fSx7IngiOjIwMiwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-l5t2im_flowchart-v2-pointEnd)\"></path><path d=\"M381.188,47L385.354,47C389.521,47,397.854,47,405.521,47C413.188,47,420.188,47,423.688,47L427.188,47\" id=\"rr-mermaid-l5t2im-L_Content_Public_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Content_Public_0\" data-points=\"W3sieCI6MzgxLjE4NzUsInkiOjQ3fSx7IngiOjQwNi4xODc1LCJ5Ijo0N30seyJ4Ijo0MzEuMTg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-l5t2im_flowchart-v2-pointEnd)\"></path><path d=\"M599.703,47L603.87,47C608.036,47,616.37,47,624.036,47C631.703,47,638.703,47,642.203,47L645.703,47\" id=\"rr-mermaid-l5t2im-L_Public_Index_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Public_Index_0\" data-points=\"W3sieCI6NTk5LjcwMzEyNSwieSI6NDd9LHsieCI6NjI0LjcwMzEyNSwieSI6NDd9LHsieCI6NjQ5LjcwMzEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-l5t2im_flowchart-v2-pointEnd)\"></path><path d=\"M827.984,47L832.151,47C836.318,47,844.651,47,852.318,47C859.984,47,866.984,47,870.484,47L873.984,47\" id=\"rr-mermaid-l5t2im-L_Index_Consumer_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Index_Consumer_0\" data-points=\"W3sieCI6ODI3Ljk4NDM3NSwieSI6NDd9LHsieCI6ODUyLjk4NDM3NSwieSI6NDd9LHsieCI6ODc3Ljk4NDM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-l5t2im_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Source_Content_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Content_Public_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Public_Index_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Index_Consumer_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-l5t2im-flowchart-Source-0\" data-look=\"classic\" transform=\"translate(80, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-72\" y=\"-39\" width=\"144\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42, -24)\"><rect></rect><foreignObject width=\"84\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Source<br>どこから読む？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-l5t2im-flowchart-Content-1\" data-look=\"classic\" transform=\"translate(291.59375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.59375\" y=\"-39\" width=\"179.1875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.59375, -24)\"><rect></rect><foreignObject width=\"119.1875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ContentManager<br>何として扱う？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-l5t2im-flowchart-Public-2\" data-look=\"classic\" transform=\"translate(515.4453125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.2578125\" y=\"-39\" width=\"168.515625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.2578125, -24)\"><rect></rect><foreignObject width=\"108.515625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Location<br>どこで公開する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-l5t2im-flowchart-Index-3\" data-look=\"classic\" transform=\"translate(738.84375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.140625\" y=\"-39\" width=\"178.28125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.140625, -24)\"><rect></rect><foreignObject width=\"118.28125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest / Graph<br>何が解決された？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-l5t2im-flowchart-Consumer-4\" data-look=\"classic\" transform=\"translate(950.6796875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.6953125\" y=\"-39\" width=\"145.390625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.6953125, -24)\"><rect></rect><foreignObject width=\"85.390625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site / Plugin<br>どう利用する？</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-l5t2im-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-l5t2im-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Source[\"Source&#x3C;br/>どこから読む？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Content[\"ContentManager&#x3C;br/>何として扱う？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Public[\"Public Location&#x3C;br/>どこで公開する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Index[\"Manifest / Graph&#x3C;br/>何が解決された？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Consumer[\"Site / Plugin&#x3C;br/>どう利用する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Source --> Content</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Content --> Public</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Public --> Index</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Index --> Consumer</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>という境界を崩さないことが重要です。</p>\n<p><strong>Source は読み込み方、ContentManager はコンテンツの解決、Public Location は公開先、Manifest / Graph は解決結果を表します。</strong></p>\n<p>各機能が filesystem や Markdown を独自に読み直すのではなく、この Content System を通して同じ解決結果を共有することが、Riebeckite の Content Architecture の基本です。</p>\n<h2 id=\"関連ページ\">関連ページ</h2>\n<ul>\n  <li><a href=\"/docs/reference/configuration\">Configuration</a></li>\n  <li><a href=\"/docs/reference/plugin-api\">Plugin API</a></li>\n  <li><a href=\"/docs/guides/content-repositories\">Content Repositories</a></li>\n  <li><a href=\"/docs/guides/deployment/separate-content-repository\">Separate Content Repository</a></li>\n</ul>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Content System Content System は、Markdown や画像などのファイルを、Riebeckite がサイトとして扱えるコンテンツへ変換する仕組みです。 単に Markdown を HTML に変換するだけではありません。 Riebeckite が、 このファイルは何の記事なのか 公開してよ","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/development","url":"https://riebeckite.dev/en/docs/framework/development","title":"development.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"framework-development\">Framework Development</h1>\n<p>This page is for people developing Riebeckite itself: core, CLI, HonoX integration, official plugins, official themes, templates, or the reference app. It is intentionally separate from <a href=\"/en/docs/getting-started/\">Getting Started</a>. Users who only want to publish a site should use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>create-riebeckite</span></span></code></span> instead of cloning this monorepo.</p>\n<h2 id=\"clone-and-install\">Clone and install</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">git</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> clone</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> https://github.com/rerurate/riebeckite.git</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">cd</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> install</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<h2 id=\"common-commands\">Common commands</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> dev</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check:docs</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check:scaffold</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> test</span></span></code></pre>\n  </div>\n</figure>\n<p>Use targeted commands when possible:</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm check:docs</span></span></code></span> validates Markdown links and docs structure.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm check:scaffold</span></span></code></span> validates generated scaffold output.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm typecheck</span></span></code></span> checks packages.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm --filter &#x3C;package> test</span></span></code></span> runs a package test when available.</li>\n</ul>\n<h2 id=\"repository-layout\">Repository layout</h2>\n<table>\n  <thead>\n    <tr>\n      <th>Path</th>\n      <th>Purpose</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/core</span></span></code></span></td>\n      <td>public config, content, pipeline, plugin, theme, diagnostics, observability APIs</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/cli</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite</span></span></code></span> command</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/integrations/honox</span></span></code></span></td>\n      <td>HonoX integration and scaffold generator</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/create-riebeckite</span></span></code></span></td>\n      <td>public site scaffolding entrypoint</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/plugins/*</span></span></code></span></td>\n      <td>official plugins</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/themes/*</span></span></code></span></td>\n      <td>official themes</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></td>\n      <td>official documentation app and framework-development reference application</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>docs/</span></span></code></span></td>\n      <td>documentation source read by the official docs app</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>templates/analytics-cloudflare</span></span></code></span></td>\n      <td>Analytics Worker deployment templates</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"boundaries\">Boundaries</h2>\n<ul>\n  <li>Core must not depend on app, plugin package internals, or framework-specific reverse dependencies.</li>\n  <li>External plugins and themes must use public exports, not <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>src/**</span></span></code></span> imports.</li>\n  <li>General-user docs must not require monorepo setup.</li>\n  <li>Generated scaffolds must remain self-contained sites.</li>\n</ul>\n<p>See <a href=\"/en/docs/framework/architecture\">Architecture</a>, <a href=\"/en/docs/framework/testing\">Testing</a>, <a href=\"/en/docs/reference/cli\">CLI</a>, and <a href=\"/en/docs/framework/honox-integration\">HonoX Integration</a>.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Framework Development This page is for people developing Riebeckite itself: core, CLI, HonoX integration, official plugins, official themes, templates, or the r","tags":[]},{"id":"https://riebeckite.dev/docs/framework/development","url":"https://riebeckite.dev/docs/framework/development","title":"development","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"framework-development\">Framework Development</h1>\n<p>このページは、<strong>Riebeckite 本体を開発する人向け</strong>のガイドです。</p>\n<p>次のような変更を行う場合に、この monorepo を使用します。</p>\n<ul>\n  <li>Core の機能を追加・変更する</li>\n  <li>CLI を変更する</li>\n  <li>HonoX Integration を変更する</li>\n  <li>公式 Plugin / Theme を開発する</li>\n  <li>Site scaffold や template を変更する</li>\n  <li>公式ドキュメントや参照アプリを変更する</li>\n</ul>\n<p>単に Riebeckite を使って自分の Site を作りたい場合は、<strong>この repository を clone する必要はありません。</strong></p>\n<p><a href=\"/docs/getting-started/\">Getting Started</a> から Site を作成してください。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-yzq05s\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 495.46875px;\" viewBox=\"0 0 495.46875 374\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-yzq05s{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-yzq05s .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-yzq05s .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-yzq05s .error-icon{fill:#552222;}#rr-mermaid-yzq05s .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-yzq05s .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-yzq05s .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-yzq05s .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-yzq05s .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-yzq05s .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-yzq05s .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-yzq05s .marker{fill:#333333;stroke:#333333;}#rr-mermaid-yzq05s .marker.cross{stroke:#333333;}#rr-mermaid-yzq05s svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-yzq05s p{margin:0;}#rr-mermaid-yzq05s .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-yzq05s .cluster-label text{fill:#333;}#rr-mermaid-yzq05s .cluster-label span{color:#333;}#rr-mermaid-yzq05s .cluster-label span p{background-color:transparent;}#rr-mermaid-yzq05s .label text,#rr-mermaid-yzq05s span{fill:#333;color:#333;}#rr-mermaid-yzq05s .node rect,#rr-mermaid-yzq05s .node circle,#rr-mermaid-yzq05s .node ellipse,#rr-mermaid-yzq05s .node polygon,#rr-mermaid-yzq05s .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-yzq05s .rough-node .label text,#rr-mermaid-yzq05s .node .label text,#rr-mermaid-yzq05s .image-shape .label,#rr-mermaid-yzq05s .icon-shape .label{text-anchor:middle;}#rr-mermaid-yzq05s .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-yzq05s .rough-node .label,#rr-mermaid-yzq05s .node .label,#rr-mermaid-yzq05s .image-shape .label,#rr-mermaid-yzq05s .icon-shape .label{text-align:center;}#rr-mermaid-yzq05s .node.clickable{cursor:pointer;}#rr-mermaid-yzq05s .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-yzq05s .arrowheadPath{fill:#333333;}#rr-mermaid-yzq05s .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-yzq05s .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-yzq05s .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-yzq05s .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-yzq05s .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-yzq05s .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-yzq05s .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-yzq05s .cluster text{fill:#333;}#rr-mermaid-yzq05s .cluster span{color:#333;}#rr-mermaid-yzq05s .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-yzq05s .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-yzq05s div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-yzq05s .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-yzq05s rect.text{fill:none;stroke-width:0;}#rr-mermaid-yzq05s .icon-shape,#rr-mermaid-yzq05s .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-yzq05s .icon-shape p,#rr-mermaid-yzq05s .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-yzq05s .icon-shape .label rect,#rr-mermaid-yzq05s .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-yzq05s .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-yzq05s .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-yzq05s .node .neo-node{stroke:#9370DB;}#rr-mermaid-yzq05s [data-look=\"neo\"].node rect,#rr-mermaid-yzq05s [data-look=\"neo\"].cluster rect,#rr-mermaid-yzq05s [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-yzq05s [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-yzq05s [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-yzq05s [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-yzq05s [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-yzq05s [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-yzq05s [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-yzq05s [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-yzq05s [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-yzq05s :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-yzq05s_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-yzq05s_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M203.696,98.52L188.121,110.6C172.547,122.68,141.399,146.84,125.824,164.42C110.25,182,110.25,193,110.25,198.5L110.25,204\" id=\"rr-mermaid-yzq05s-L_Q_User_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_User_0\" data-points=\"W3sieCI6MjAzLjY5NTYxNzQ0MTQ1MTI1LCJ5Ijo5OC41MTk4MzYxOTE0NTEyNX0seyJ4IjoxMTAuMjUsInkiOjE3MX0seyJ4IjoxMTAuMjUsInkiOjIwOH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-yzq05s_flowchart-v2-pointEnd)\"></path><path d=\"M274.656,98.52L290.23,110.6C305.804,122.68,336.953,146.84,352.527,164.42C368.102,182,368.102,193,368.102,198.5L368.102,204\" id=\"rr-mermaid-yzq05s-L_Q_Dev_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Dev_0\" data-points=\"W3sieCI6Mjc0LjY1NTk0NTA1ODU0ODc1LCJ5Ijo5OC41MTk4MzYxOTE0NTEyNX0seyJ4IjozNjguMTAxNTYyNSwieSI6MTcxfSx7IngiOjM2OC4xMDE1NjI1LCJ5IjoyMDh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-yzq05s_flowchart-v2-pointEnd)\"></path><path d=\"M110.25,262L110.25,266.167C110.25,270.333,110.25,278.667,110.25,286.333C110.25,294,110.25,301,110.25,304.5L110.25,308\" id=\"rr-mermaid-yzq05s-L_User_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_User_Site_0\" data-points=\"W3sieCI6MTEwLjI1LCJ5IjoyNjJ9LHsieCI6MTEwLjI1LCJ5IjoyODd9LHsieCI6MTEwLjI1LCJ5IjozMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-yzq05s_flowchart-v2-pointEnd)\"></path><path d=\"M368.102,262L368.102,266.167C368.102,270.333,368.102,278.667,368.102,286.333C368.102,294,368.102,301,368.102,304.5L368.102,308\" id=\"rr-mermaid-yzq05s-L_Dev_Repo_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Dev_Repo_0\" data-points=\"W3sieCI6MzY4LjEwMTU2MjUsInkiOjI2Mn0seyJ4IjozNjguMTAxNTYyNSwieSI6Mjg3fSx7IngiOjM2OC4xMDE1NjI1LCJ5IjozMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-yzq05s_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(110.25, 171)\"><g class=\"label\" data-id=\"L_Q_User_0\" transform=\"translate(-87.140625, -12)\"><foreignObject width=\"174.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>RiebeckiteでSiteを作りたい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(368.1015625, 171)\"><g class=\"label\" data-id=\"L_Q_Dev_0\" transform=\"translate(-85.3515625, -12)\"><foreignObject width=\"170.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Riebeckite本体を変更したい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_User_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Dev_Repo_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-yzq05s-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(239.17578125, 71)\"><polygon points=\"63,0 126,-63 63,-126 0,-63\" class=\"label-container\" transform=\"translate(-62.5, 63)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何をしたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-yzq05s-flowchart-User-2\" data-look=\"classic\" transform=\"translate(110.25, 235)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-yzq05s-flowchart-Dev-4\" data-look=\"classic\" transform=\"translate(368.1015625, 235)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.3671875\" y=\"-27\" width=\"238.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.3671875, -12)\"><rect></rect><foreignObject width=\"178.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework Development</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-yzq05s-flowchart-Site-6\" data-look=\"classic\" transform=\"translate(110.25, 339)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.25\" y=\"-27\" width=\"204.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.25, -12)\"><rect></rect><foreignObject width=\"144.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>自分のSite Repository</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-yzq05s-flowchart-Repo-8\" data-look=\"classic\" transform=\"translate(368.1015625, 339)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.6015625\" y=\"-27\" width=\"211.203125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.6015625, -12)\"><rect></rect><foreignObject width=\"151.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Monorepo</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-yzq05s-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-yzq05s-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"何をしたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"RiebeckiteでSiteを作りたい\"| User[\"Getting Started\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"Riebeckite本体を変更したい\"| Dev[\"Framework Development\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    User --> Site[\"自分のSite Repository\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Dev --> Repo[\"Riebeckite Monorepo\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h1 id=\"開発を始める\">開発を始める</h1>\n<p>Riebeckite 本体を開発する場合は、repository を clone して依存関係をインストールします。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">git</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> clone</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> https://github.com/rerurate/riebeckite.git</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">cd</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> install</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<p>これで workspace 内の package を開発できる状態になります。</p>\n<h2 id=\"開発サーバーを起動する\">開発サーバーを起動する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> dev</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> の参照アプリを使って、Riebeckite の変更を実際の Site として確認できます。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> は単なるデモではなく、Framework 開発時に Core、Plugin、Theme、Integration が正しく組み合わさることを確認するための参照アプリでもあります。</p>\n<h1 id=\"repository-の構成\">Repository の構成</h1>\n<p>Riebeckite は pnpm workspace を使った monorepo です。</p>\n<p>大きく次のように分かれています。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-d7gn6t\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1938.640625px;\" viewBox=\"0 0 1938.640625 326\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-d7gn6t{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-d7gn6t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-d7gn6t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-d7gn6t .error-icon{fill:#552222;}#rr-mermaid-d7gn6t .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-d7gn6t .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-d7gn6t .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-d7gn6t .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-d7gn6t .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-d7gn6t .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-d7gn6t .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-d7gn6t .marker{fill:#333333;stroke:#333333;}#rr-mermaid-d7gn6t .marker.cross{stroke:#333333;}#rr-mermaid-d7gn6t svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-d7gn6t p{margin:0;}#rr-mermaid-d7gn6t .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-d7gn6t .cluster-label text{fill:#333;}#rr-mermaid-d7gn6t .cluster-label span{color:#333;}#rr-mermaid-d7gn6t .cluster-label span p{background-color:transparent;}#rr-mermaid-d7gn6t .label text,#rr-mermaid-d7gn6t span{fill:#333;color:#333;}#rr-mermaid-d7gn6t .node rect,#rr-mermaid-d7gn6t .node circle,#rr-mermaid-d7gn6t .node ellipse,#rr-mermaid-d7gn6t .node polygon,#rr-mermaid-d7gn6t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-d7gn6t .rough-node .label text,#rr-mermaid-d7gn6t .node .label text,#rr-mermaid-d7gn6t .image-shape .label,#rr-mermaid-d7gn6t .icon-shape .label{text-anchor:middle;}#rr-mermaid-d7gn6t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-d7gn6t .rough-node .label,#rr-mermaid-d7gn6t .node .label,#rr-mermaid-d7gn6t .image-shape .label,#rr-mermaid-d7gn6t .icon-shape .label{text-align:center;}#rr-mermaid-d7gn6t .node.clickable{cursor:pointer;}#rr-mermaid-d7gn6t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-d7gn6t .arrowheadPath{fill:#333333;}#rr-mermaid-d7gn6t .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-d7gn6t .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-d7gn6t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-d7gn6t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-d7gn6t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-d7gn6t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-d7gn6t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-d7gn6t .cluster text{fill:#333;}#rr-mermaid-d7gn6t .cluster span{color:#333;}#rr-mermaid-d7gn6t .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-d7gn6t .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-d7gn6t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-d7gn6t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-d7gn6t rect.text{fill:none;stroke-width:0;}#rr-mermaid-d7gn6t .icon-shape,#rr-mermaid-d7gn6t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-d7gn6t .icon-shape p,#rr-mermaid-d7gn6t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-d7gn6t .icon-shape .label rect,#rr-mermaid-d7gn6t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-d7gn6t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-d7gn6t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-d7gn6t .node .neo-node{stroke:#9370DB;}#rr-mermaid-d7gn6t [data-look=\"neo\"].node rect,#rr-mermaid-d7gn6t [data-look=\"neo\"].cluster rect,#rr-mermaid-d7gn6t [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d7gn6t [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-d7gn6t [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-d7gn6t [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d7gn6t [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-d7gn6t [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d7gn6t [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-d7gn6t [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d7gn6t [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-d7gn6t :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-d7gn6t_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M1308.195,39.013L1175.755,47.011C1043.314,55.009,778.432,71.004,645.992,82.502C513.551,94,513.551,101,513.551,104.5L513.551,108\" id=\"rr-mermaid-d7gn6t-L_Repo_Packages_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Repo_Packages_0\" data-points=\"W3sieCI6MTMwOC4xOTUzMTI1LCJ5IjozOS4wMTM0MDkzNjIwNTczMX0seyJ4Ijo1MTMuNTUwNzgxMjUsInkiOjg3fSx7IngiOjUxMy41NTA3ODEyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1308.195,60.676L1296.839,65.063C1285.482,69.45,1262.768,78.225,1251.411,86.113C1240.055,94,1240.055,101,1240.055,104.5L1240.055,108\" id=\"rr-mermaid-d7gn6t-L_Repo_Apps_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Repo_Apps_0\" data-points=\"W3sieCI6MTMwOC4xOTUzMTI1LCJ5Ijo2MC42NzU1NDcwNDI3NzY3MTR9LHsieCI6MTI0MC4wNTQ2ODc1LCJ5Ijo4N30seyJ4IjoxMjQwLjA1NDY4NzUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1441.117,60.676L1452.474,65.063C1463.831,69.45,1486.544,78.225,1497.901,86.113C1509.258,94,1509.258,101,1509.258,104.5L1509.258,108\" id=\"rr-mermaid-d7gn6t-L_Repo_Docs_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Repo_Docs_0\" data-points=\"W3sieCI6MTQ0MS4xMTcxODc1LCJ5Ijo2MC42NzU1NDcwNDI3NzY3MTR9LHsieCI6MTUwOS4yNTc4MTI1LCJ5Ijo4N30seyJ4IjoxNTA5LjI1NzgxMjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1441.117,43.113L1501.038,50.427C1560.958,57.742,1680.799,72.371,1740.72,83.185C1800.641,94,1800.641,101,1800.641,104.5L1800.641,108\" id=\"rr-mermaid-d7gn6t-L_Repo_Templates_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Repo_Templates_0\" data-points=\"W3sieCI6MTQ0MS4xMTcxODc1LCJ5Ijo0My4xMTI5MDAyNjc3NjIxN30seyJ4IjoxODAwLjY0MDYyNSwieSI6ODd9LHsieCI6MTgwMC42NDA2MjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M447.082,146.654L382.902,154.045C318.721,161.436,190.361,176.218,126.18,189.109C62,202,62,213,62,218.5L62,224\" id=\"rr-mermaid-d7gn6t-L_Packages_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_Core_0\" data-points=\"W3sieCI6NDQ3LjA4MjAzMTI1LCJ5IjoxNDYuNjU0NDU0NzAwMzgxNX0seyJ4Ijo2MiwieSI6MTkxfSx7IngiOjYyLCJ5IjoyMjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M447.082,150.329L407.311,157.107C367.539,163.886,287.996,177.443,248.225,189.721C208.453,202,208.453,213,208.453,218.5L208.453,224\" id=\"rr-mermaid-d7gn6t-L_Packages_CLI_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_CLI_0\" data-points=\"W3sieCI6NDQ3LjA4MjAzMTI1LCJ5IjoxNTAuMzI4NzQ5NzU5OTM4NTV9LHsieCI6MjA4LjQ1MzEyNSwieSI6MTkxfSx7IngiOjIwOC40NTMxMjUsInkiOjIyOH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M452.665,166L443.269,170.167C433.873,174.333,415.081,182.667,405.685,192.333C396.289,202,396.289,213,396.289,218.5L396.289,224\" id=\"rr-mermaid-d7gn6t-L_Packages_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_Integration_0\" data-points=\"W3sieCI6NDUyLjY2NDg4ODgyMjExNTM2LCJ5IjoxNjZ9LHsieCI6Mzk2LjI4OTA2MjUsInkiOjE5MX0seyJ4IjozOTYuMjg5MDYyNSwieSI6MjI4fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M574.437,166L583.833,170.167C593.229,174.333,612.021,182.667,621.417,192.333C630.813,202,630.813,213,630.813,218.5L630.813,224\" id=\"rr-mermaid-d7gn6t-L_Packages_Create_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_Create_0\" data-points=\"W3sieCI6NTc0LjQzNjY3MzY3Nzg4NDYsInkiOjE2Nn0seyJ4Ijo2MzAuODEyNSwieSI6MTkxfSx7IngiOjYzMC44MTI1LCJ5IjoyMjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M580.02,149.779L622.382,156.65C664.745,163.52,749.47,177.26,791.833,189.63C834.195,202,834.195,213,834.195,218.5L834.195,224\" id=\"rr-mermaid-d7gn6t-L_Packages_Plugins_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_Plugins_0\" data-points=\"W3sieCI6NTgwLjAxOTUzMTI1LCJ5IjoxNDkuNzc5NDYwMzE1NTI2Nn0seyJ4Ijo4MzQuMTk1MzEyNSwieSI6MTkxfSx7IngiOjgzNC4xOTUzMTI1LCJ5IjoyMjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M580.02,145.888L652.572,153.407C725.125,160.925,870.23,175.963,942.783,188.981C1015.336,202,1015.336,213,1015.336,218.5L1015.336,224\" id=\"rr-mermaid-d7gn6t-L_Packages_Themes_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Packages_Themes_0\" data-points=\"W3sieCI6NTgwLjAxOTUzMTI1LCJ5IjoxNDUuODg4MTU3MTI2NTA5Mjd9LHsieCI6MTAxNS4zMzU5Mzc1LCJ5IjoxOTF9LHsieCI6MTAxNS4zMzU5Mzc1LCJ5IjoyMjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1240.055,166L1240.055,170.167C1240.055,174.333,1240.055,182.667,1240.055,192.333C1240.055,202,1240.055,213,1240.055,218.5L1240.055,224\" id=\"rr-mermaid-d7gn6t-L_Apps_Web_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Apps_Web_0\" data-points=\"W3sieCI6MTI0MC4wNTQ2ODc1LCJ5IjoxNjZ9LHsieCI6MTI0MC4wNTQ2ODc1LCJ5IjoxOTF9LHsieCI6MTI0MC4wNTQ2ODc1LCJ5IjoyMjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1509.258,166L1509.258,170.167C1509.258,174.333,1509.258,182.667,1509.258,194.333C1509.258,206,1509.258,221,1509.258,228.5L1509.258,236\" id=\"rr-mermaid-d7gn6t-L_Docs_DocSource_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Docs_DocSource_0\" data-points=\"W3sieCI6MTUwOS4yNTc4MTI1LCJ5IjoxNjZ9LHsieCI6MTUwOS4yNTc4MTI1LCJ5IjoxOTF9LHsieCI6MTUwOS4yNTc4MTI1LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path><path d=\"M1800.641,166L1800.641,170.167C1800.641,174.333,1800.641,182.667,1800.641,190.333C1800.641,198,1800.641,205,1800.641,208.5L1800.641,212\" id=\"rr-mermaid-d7gn6t-L_Templates_Analytics_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Templates_Analytics_0\" data-points=\"W3sieCI6MTgwMC42NDA2MjUsInkiOjE2Nn0seyJ4IjoxODAwLjY0MDYyNSwieSI6MTkxfSx7IngiOjE4MDAuNjQwNjI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-d7gn6t_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Repo_Packages_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Repo_Apps_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Repo_Docs_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Repo_Templates_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_CLI_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_Create_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_Plugins_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Packages_Themes_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Apps_Web_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Docs_DocSource_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Templates_Analytics_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Repo-0\" data-look=\"classic\" transform=\"translate(1374.65625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.4609375\" y=\"-27\" width=\"132.921875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.4609375, -12)\"><rect></rect><foreignObject width=\"72.921875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>riebeckite/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Packages-2\" data-look=\"classic\" transform=\"translate(513.55078125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.46875\" y=\"-27\" width=\"132.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.46875, -12)\"><rect></rect><foreignObject width=\"72.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>packages/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Apps-4\" data-look=\"classic\" transform=\"translate(1240.0546875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-49.5703125\" y=\"-27\" width=\"99.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-19.5703125, -12)\"><rect></rect><foreignObject width=\"39.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>apps/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Docs-6\" data-look=\"classic\" transform=\"translate(1509.2578125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-49.125\" y=\"-27\" width=\"98.25\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-19.125, -12)\"><rect></rect><foreignObject width=\"38.25\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>docs/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Templates-8\" data-look=\"classic\" transform=\"translate(1800.640625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.90625\" y=\"-27\" width=\"133.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.90625, -12)\"><rect></rect><foreignObject width=\"73.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>templates/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Core-10\" data-look=\"classic\" transform=\"translate(62, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-54\" y=\"-39\" width=\"108\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24, -24)\"><rect></rect><foreignObject width=\"48\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>core<br>共通基盤</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-CLI-12\" data-look=\"classic\" transform=\"translate(208.453125, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-42.453125\" y=\"-39\" width=\"84.90625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12.453125, -24)\"><rect></rect><foreignObject width=\"24.90625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>cli<br>CLI</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Integration-14\" data-look=\"classic\" transform=\"translate(396.2890625, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.3828125\" y=\"-39\" width=\"190.765625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.3828125, -24)\"><rect></rect><foreignObject width=\"130.765625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>integrations/honox<br>HonoX接続</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Create-16\" data-look=\"classic\" transform=\"translate(630.8125, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.140625\" y=\"-39\" width=\"178.28125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.140625, -24)\"><rect></rect><foreignObject width=\"118.28125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>create-riebeckite<br>Site生成</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Plugins-18\" data-look=\"classic\" transform=\"translate(834.1953125, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.2421875\" y=\"-39\" width=\"128.484375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.2421875, -24)\"><rect></rect><foreignObject width=\"68.484375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>plugins/*<br>公式Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Themes-20\" data-look=\"classic\" transform=\"translate(1015.3359375, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.8984375\" y=\"-39\" width=\"133.796875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.8984375, -24)\"><rect></rect><foreignObject width=\"73.796875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>themes/*<br>公式Theme</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Web-22\" data-look=\"classic\" transform=\"translate(1240.0546875, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.8203125\" y=\"-39\" width=\"215.640625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.8203125, -24)\"><rect></rect><foreignObject width=\"155.640625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>web<br>Docs / Reference App</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-DocSource-24\" data-look=\"classic\" transform=\"translate(1509.2578125, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.3828125\" y=\"-27\" width=\"222.765625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.3828125, -12)\"><rect></rect><foreignObject width=\"162.765625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Documentation Source</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-d7gn6t-flowchart-Analytics-26\" data-look=\"classic\" transform=\"translate(1800.640625, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-51\" width=\"260\" height=\"102\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -36)\"><rect></rect><foreignObject width=\"200\" height=\"72\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>analytics-cloudflare<br>Analytics Deployment Template</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-d7gn6t-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-d7gn6t-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Repo[\"riebeckite/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Repo --> Packages[\"packages/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Repo --> Apps[\"apps/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Repo --> Docs[\"docs/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Repo --> Templates[\"templates/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Packages --> Core[\"core&#x3C;br/>共通基盤\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Packages --> CLI[\"cli&#x3C;br/>CLI\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Packages --> Integration[\"integrations/honox&#x3C;br/>HonoX接続\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Packages --> Create[\"create-riebeckite&#x3C;br/>Site生成\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Packages --> Plugins[\"plugins/*&#x3C;br/>公式Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Packages --> Themes[\"themes/*&#x3C;br/>公式Theme\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>    Apps --> Web[\"web&#x3C;br/>Docs / Reference App\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>    Docs --> DocSource[\"Documentation Source\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span>    Templates --> Analytics[\"analytics-cloudflare&#x3C;br/>Analytics Deployment Template\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<table>\n  <thead>\n    <tr>\n      <th>Path</th>\n      <th>役割</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/core</span></span></code></span></td>\n      <td>config、content、pipeline、Plugin、Theme、Diagnostics、Observability などの共通基盤</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/cli</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite</span></span></code></span> CLI</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/integrations/honox</span></span></code></span></td>\n      <td>HonoX / Vite Integration と scaffold generator</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/create-riebeckite</span></span></code></span></td>\n      <td>Site 作成用の公開 entrypoint</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/plugins/*</span></span></code></span></td>\n      <td>公式 Plugin</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/themes/*</span></span></code></span></td>\n      <td>公式 Theme</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span></td>\n      <td>公式ドキュメント Site兼、Framework 開発用の参照アプリ</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>docs/</span></span></code></span></td>\n      <td>公式ドキュメントの source</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>templates/analytics-cloudflare</span></span></code></span></td>\n      <td>Analytics Worker の Deployment template</td>\n    </tr>\n  </tbody>\n</table>\n<p>各 package の詳しい責務については <a href=\"/docs/framework/architecture\">Architecture</a> を参照してください。</p>\n<h1 id=\"よく使うコマンド\">よく使うコマンド</h1>\n<p>Framework 開発でよく使用するコマンドは次のとおりです。</p>\n<table>\n  <thead>\n    <tr>\n      <th>コマンド</th>\n      <th>用途</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm dev</span></span></code></span></td>\n      <td>開発用 Site を起動する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm build</span></span></code></span></td>\n      <td>workspace を build する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm check</span></span></code></span></td>\n      <td>repository 全体を検査する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm test</span></span></code></span></td>\n      <td>test を実行する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm typecheck</span></span></code></span></td>\n      <td>TypeScript の型を検査する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm check:docs</span></span></code></span></td>\n      <td>Documentation を検査する</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pnpm check:scaffold</span></span></code></span></td>\n      <td>生成される Site を検査する</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"documentation-を変更した場合\">Documentation を変更した場合</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check:docs</span></span></code></pre>\n  </div>\n</figure>\n<p>Markdown link や Documentation の構造を検査します。</p>\n<p>ドキュメントを追加・移動・削除した場合は実行してください。</p>\n<h2 id=\"scaffold-を変更した場合\">Scaffold を変更した場合</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check:scaffold</span></span></code></pre>\n  </div>\n</figure>\n<p>生成される Riebeckite Site が正しい構成になっているかを検査します。</p>\n<p>たとえば、</p>\n<ul>\n  <li>scaffold generator</li>\n  <li>preset</li>\n  <li>template</li>\n  <li>生成される <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>package.json</span></span></code></span></li>\n  <li>Site の初期構成</li>\n</ul>\n<p>などを変更した場合に重要です。</p>\n<h2 id=\"package-の型を確認する\">Package の型を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> typecheck</span></span></code></pre>\n  </div>\n</figure>\n<p>TypeScript の型エラーを確認します。</p>\n<h2 id=\"特定-package-の-test\">特定 Package の Test</h2>\n<p>変更した package だけを確認したい場合は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--filter</span></span></code></span> を使用できます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --filter</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> &#x3C;</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">packag</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">e</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">></span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> test</span></span></code></pre>\n  </div>\n</figure>\n<p>たとえば特定の Plugin だけを変更した場合、最初から repository 全体の test を実行するのではなく、対象 package の test から確認できます。</p>\n<h1 id=\"変更するときの基本的な流れ\">変更するときの基本的な流れ</h1>\n<p>変更内容によって必要な検証は異なりますが、基本的には <strong>小さい範囲から確認して、最後に広い範囲を確認する</strong> 形を推奨します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-n4oe6y\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 276px;\" viewBox=\"0 0 276 534\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-n4oe6y{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-n4oe6y .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-n4oe6y .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-n4oe6y .error-icon{fill:#552222;}#rr-mermaid-n4oe6y .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-n4oe6y .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-n4oe6y .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-n4oe6y .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-n4oe6y .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-n4oe6y .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-n4oe6y .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-n4oe6y .marker{fill:#333333;stroke:#333333;}#rr-mermaid-n4oe6y .marker.cross{stroke:#333333;}#rr-mermaid-n4oe6y svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-n4oe6y p{margin:0;}#rr-mermaid-n4oe6y .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-n4oe6y .cluster-label text{fill:#333;}#rr-mermaid-n4oe6y .cluster-label span{color:#333;}#rr-mermaid-n4oe6y .cluster-label span p{background-color:transparent;}#rr-mermaid-n4oe6y .label text,#rr-mermaid-n4oe6y span{fill:#333;color:#333;}#rr-mermaid-n4oe6y .node rect,#rr-mermaid-n4oe6y .node circle,#rr-mermaid-n4oe6y .node ellipse,#rr-mermaid-n4oe6y .node polygon,#rr-mermaid-n4oe6y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-n4oe6y .rough-node .label text,#rr-mermaid-n4oe6y .node .label text,#rr-mermaid-n4oe6y .image-shape .label,#rr-mermaid-n4oe6y .icon-shape .label{text-anchor:middle;}#rr-mermaid-n4oe6y .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-n4oe6y .rough-node .label,#rr-mermaid-n4oe6y .node .label,#rr-mermaid-n4oe6y .image-shape .label,#rr-mermaid-n4oe6y .icon-shape .label{text-align:center;}#rr-mermaid-n4oe6y .node.clickable{cursor:pointer;}#rr-mermaid-n4oe6y .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-n4oe6y .arrowheadPath{fill:#333333;}#rr-mermaid-n4oe6y .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-n4oe6y .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-n4oe6y .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-n4oe6y .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-n4oe6y .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-n4oe6y .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-n4oe6y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-n4oe6y .cluster text{fill:#333;}#rr-mermaid-n4oe6y .cluster span{color:#333;}#rr-mermaid-n4oe6y .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-n4oe6y .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-n4oe6y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-n4oe6y .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-n4oe6y rect.text{fill:none;stroke-width:0;}#rr-mermaid-n4oe6y .icon-shape,#rr-mermaid-n4oe6y .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-n4oe6y .icon-shape p,#rr-mermaid-n4oe6y .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-n4oe6y .icon-shape .label rect,#rr-mermaid-n4oe6y .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-n4oe6y .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-n4oe6y .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-n4oe6y .node .neo-node{stroke:#9370DB;}#rr-mermaid-n4oe6y [data-look=\"neo\"].node rect,#rr-mermaid-n4oe6y [data-look=\"neo\"].cluster rect,#rr-mermaid-n4oe6y [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-n4oe6y [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-n4oe6y [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-n4oe6y [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-n4oe6y [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-n4oe6y [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-n4oe6y [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-n4oe6y [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-n4oe6y [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-n4oe6y :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-n4oe6y_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,62L138,66.167C138,70.333,138,78.667,138,86.333C138,94,138,101,138,104.5L138,108\" id=\"rr-mermaid-n4oe6y-L_Change_Focus_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Change_Focus_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo2Mn0seyJ4IjoxMzgsInkiOjg3fSx7IngiOjEzOCwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-n4oe6y_flowchart-v2-pointEnd)\"></path><path d=\"M138,190L138,194.167C138,198.333,138,206.667,138,214.333C138,222,138,229,138,232.5L138,236\" id=\"rr-mermaid-n4oe6y-L_Focus_Related_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Focus_Related_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxOTB9LHsieCI6MTM4LCJ5IjoyMTV9LHsieCI6MTM4LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-n4oe6y_flowchart-v2-pointEnd)\"></path><path d=\"M138,318L138,322.167C138,326.333,138,334.667,138,342.333C138,350,138,357,138,360.5L138,364\" id=\"rr-mermaid-n4oe6y-L_Related_Check_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Related_Check_0\" data-points=\"W3sieCI6MTM4LCJ5IjozMTh9LHsieCI6MTM4LCJ5IjozNDN9LHsieCI6MTM4LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-n4oe6y_flowchart-v2-pointEnd)\"></path><path d=\"M138,422L138,426.167C138,430.333,138,438.667,138,446.333C138,454,138,461,138,464.5L138,468\" id=\"rr-mermaid-n4oe6y-L_Check_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Check_Build_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo0MjJ9LHsieCI6MTM4LCJ5Ijo0NDd9LHsieCI6MTM4LCJ5Ijo0NzJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-n4oe6y_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Change_Focus_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Focus_Related_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Related_Check_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Check_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-n4oe6y-flowchart-Change-0\" data-look=\"classic\" transform=\"translate(138, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-27\" width=\"132\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>コードを変更</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-n4oe6y-flowchart-Focus-1\" data-look=\"classic\" transform=\"translate(138, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>対象PackageのTest / Typecheck</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-n4oe6y-flowchart-Related-2\" data-look=\"classic\" transform=\"translate(138, 279)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>関連するIntegration / Appを確認</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-n4oe6y-flowchart-Check-3\" data-look=\"classic\" transform=\"translate(138, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1328125\" y=\"-27\" width=\"146.265625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1328125, -12)\"><rect></rect><foreignObject width=\"86.265625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>pnpm check</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-n4oe6y-flowchart-Build-4\" data-look=\"classic\" transform=\"translate(138, 499)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>pnpm build</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-n4oe6y-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-n4oe6y-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Change[\"コードを変更\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Focus[\"対象PackageのTest / Typecheck\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Related[\"関連するIntegration / Appを確認\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Check[\"pnpm check\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Build[\"pnpm build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Change --> Focus</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Focus --> Related</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Related --> Check</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Check --> Build</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>たとえば Plugin を変更した場合は、まずその Plugin の test を実行します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"bash\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">bash</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"bash\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"bash\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --filter</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> &#x3C;</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">plugin-packag</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">e</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">></span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> test</span></span></code></pre>\n  </div>\n</figure>\n<p>問題がなければ、必要に応じて型検査や参照アプリを確認し、最後に repository 全体の検証を行います。</p>\n<p>変更のたびに最初から最も重い command を実行する必要はありません。</p>\n<h1 id=\"どこを変更するか\">どこを変更するか</h1>\n<p>機能を追加するときは、まず責務に合った package を選びます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-fhojlr\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1658.0625px;\" viewBox=\"0 0 1658.0625 282\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-fhojlr{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-fhojlr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-fhojlr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-fhojlr .error-icon{fill:#552222;}#rr-mermaid-fhojlr .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-fhojlr .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-fhojlr .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-fhojlr .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-fhojlr .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-fhojlr .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-fhojlr .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-fhojlr .marker{fill:#333333;stroke:#333333;}#rr-mermaid-fhojlr .marker.cross{stroke:#333333;}#rr-mermaid-fhojlr svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-fhojlr p{margin:0;}#rr-mermaid-fhojlr .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-fhojlr .cluster-label text{fill:#333;}#rr-mermaid-fhojlr .cluster-label span{color:#333;}#rr-mermaid-fhojlr .cluster-label span p{background-color:transparent;}#rr-mermaid-fhojlr .label text,#rr-mermaid-fhojlr span{fill:#333;color:#333;}#rr-mermaid-fhojlr .node rect,#rr-mermaid-fhojlr .node circle,#rr-mermaid-fhojlr .node ellipse,#rr-mermaid-fhojlr .node polygon,#rr-mermaid-fhojlr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-fhojlr .rough-node .label text,#rr-mermaid-fhojlr .node .label text,#rr-mermaid-fhojlr .image-shape .label,#rr-mermaid-fhojlr .icon-shape .label{text-anchor:middle;}#rr-mermaid-fhojlr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-fhojlr .rough-node .label,#rr-mermaid-fhojlr .node .label,#rr-mermaid-fhojlr .image-shape .label,#rr-mermaid-fhojlr .icon-shape .label{text-align:center;}#rr-mermaid-fhojlr .node.clickable{cursor:pointer;}#rr-mermaid-fhojlr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-fhojlr .arrowheadPath{fill:#333333;}#rr-mermaid-fhojlr .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-fhojlr .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-fhojlr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-fhojlr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-fhojlr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-fhojlr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-fhojlr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-fhojlr .cluster text{fill:#333;}#rr-mermaid-fhojlr .cluster span{color:#333;}#rr-mermaid-fhojlr .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-fhojlr .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-fhojlr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-fhojlr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-fhojlr rect.text{fill:none;stroke-width:0;}#rr-mermaid-fhojlr .icon-shape,#rr-mermaid-fhojlr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-fhojlr .icon-shape p,#rr-mermaid-fhojlr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-fhojlr .icon-shape .label rect,#rr-mermaid-fhojlr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-fhojlr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-fhojlr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-fhojlr .node .neo-node{stroke:#9370DB;}#rr-mermaid-fhojlr [data-look=\"neo\"].node rect,#rr-mermaid-fhojlr [data-look=\"neo\"].cluster rect,#rr-mermaid-fhojlr [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fhojlr [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-fhojlr [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-fhojlr [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fhojlr [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-fhojlr [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fhojlr [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-fhojlr [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fhojlr [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-fhojlr :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-fhojlr_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-fhojlr_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M737.169,86.005L629.461,102.171C521.753,118.336,306.338,150.668,198.63,172.334C90.922,194,90.922,205,90.922,210.5L90.922,216\" id=\"rr-mermaid-fhojlr-L_Q_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Core_0\" data-points=\"W3sieCI6NzM3LjE2ODc2NTkxNTUwNjgsInkiOjg2LjAwNDcwMzQxNTUwNjg0fSx7IngiOjkwLjkyMTg3NSwieSI6MTgzfSx7IngiOjkwLjkyMTg3NSwieSI6MjIwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M740.23,89.066L666.354,104.721C592.479,120.377,444.728,151.689,370.852,172.844C296.977,194,296.977,205,296.977,210.5L296.977,216\" id=\"rr-mermaid-fhojlr-L_Q_CLI_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_CLI_0\" data-points=\"W3sieCI6NzQwLjIyOTYzNjI3MDQ5MTgsInkiOjg5LjA2NTU3Mzc3MDQ5MTgxfSx7IngiOjI5Ni45NzY1NjI1LCJ5IjoxODN9LHsieCI6Mjk2Ljk3NjU2MjUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M747.161,95.997L708.994,110.498C670.826,124.998,594.491,153.999,556.324,174C518.156,194,518.156,205,518.156,210.5L518.156,216\" id=\"rr-mermaid-fhojlr-L_Q_Plugin_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Plugin_0\" data-points=\"W3sieCI6NzQ3LjE2MTA3OTYwNTk4NCwieSI6OTUuOTk3MDE3MTA1OTg0MDZ9LHsieCI6NTE4LjE1NjI1LCJ5IjoxODN9LHsieCI6NTE4LjE1NjI1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M797.164,146L797.164,152.167C797.164,158.333,797.164,170.667,797.164,182.333C797.164,194,797.164,205,797.164,210.5L797.164,216\" id=\"rr-mermaid-fhojlr-L_Q_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Integration_0\" data-points=\"W3sieCI6Nzk3LjE2NDA2MjUsInkiOjE0Nn0seyJ4Ijo3OTcuMTY0MDYyNSwieSI6MTgzfSx7IngiOjc5Ny4xNjQwNjI1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M847.211,95.954L885.518,110.461C923.825,124.969,1000.44,153.985,1038.747,173.992C1077.055,194,1077.055,205,1077.055,210.5L1077.055,216\" id=\"rr-mermaid-fhojlr-L_Q_Theme_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Theme_0\" data-points=\"W3sieCI6ODQ3LjIxMDUwNTM4NzgwMDEsInkiOjk1Ljk1MzU1NzExMjE5OTg2fSx7IngiOjEwNzcuMDU0Njg3NSwieSI6MTgzfSx7IngiOjEwNzcuMDU0Njg3NSwieSI6MjIwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M853.937,89.227L926.505,104.856C999.073,120.485,1144.208,151.742,1216.776,172.871C1289.344,194,1289.344,205,1289.344,210.5L1289.344,216\" id=\"rr-mermaid-fhojlr-L_Q_App_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_App_0\" data-points=\"W3sieCI6ODUzLjkzNjk2NzI3NjIwOTEsInkiOjg5LjIyNzA5NTIyMzc5MDkzfSx7IngiOjEyODkuMzQzNzUsInkiOjE4M30seyJ4IjoxMjg5LjM0Mzc1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path><path d=\"M857.412,85.752L968.981,101.96C1080.551,118.168,1303.689,150.584,1415.259,172.292C1526.828,194,1526.828,205,1526.828,210.5L1526.828,216\" id=\"rr-mermaid-fhojlr-L_Q_Scaffold_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Scaffold_0\" data-points=\"W3sieCI6ODU3LjQxMTc0MTY0NzM4NDcsInkiOjg1Ljc1MjMyMDg1MjYxNTM0fSx7IngiOjE1MjYuODI4MTI1LCJ5IjoxODN9LHsieCI6MTUyNi44MjgxMjUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-fhojlr_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(90.921875, 183)\"><g class=\"label\" data-id=\"L_Q_Core_0\" transform=\"translate(-82.921875, -12)\"><foreignObject width=\"165.84375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>共通のContent / Contract</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(296.9765625, 183)\"><g class=\"label\" data-id=\"L_Q_CLI_0\" transform=\"translate(-51.578125, -12)\"><foreignObject width=\"103.15625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>CLI Command</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(518.15625, 183)\"><g class=\"label\" data-id=\"L_Q_Plugin_0\" transform=\"translate(-48, -12)\"><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>再利用可能な機能</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(797.1640625, 183)\"><g class=\"label\" data-id=\"L_Q_Integration_0\" transform=\"translate(-68.7734375, -12)\"><foreignObject width=\"137.546875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>HonoX / Viteとの接続</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1077.0546875, 183)\"><g class=\"label\" data-id=\"L_Q_Theme_0\" transform=\"translate(-41.1171875, -12)\"><foreignObject width=\"82.234375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>見た目 / CSS</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1289.34375, 183)\"><g class=\"label\" data-id=\"L_Q_App_0\" transform=\"translate(-80.0390625, -12)\"><foreignObject width=\"160.078125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Route / Island / Site UI</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1526.828125, 183)\"><g class=\"label\" data-id=\"L_Q_Scaffold_0\" transform=\"translate(-25.7890625, -12)\"><foreignObject width=\"51.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Site生成</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(797.1640625, 77)\"><polygon points=\"69,0 138,-69 69,-138 0,-69\" class=\"label-container\" transform=\"translate(-68.5, 69)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-42, -12)\"><rect></rect><foreignObject width=\"84\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何を変更する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Core-2\" data-look=\"classic\" transform=\"translate(90.921875, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.03125\" y=\"-27\" width=\"164.0625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.03125, -12)\"><rect></rect><foreignObject width=\"104.0625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>packages/core</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-CLI-4\" data-look=\"classic\" transform=\"translate(296.9765625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.0234375\" y=\"-27\" width=\"148.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.0234375, -12)\"><rect></rect><foreignObject width=\"88.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>packages/cli</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Plugin-6\" data-look=\"classic\" transform=\"translate(518.15625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.15625\" y=\"-27\" width=\"194.3125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.15625, -12)\"><rect></rect><foreignObject width=\"134.3125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>packages/plugins/*</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Integration-8\" data-look=\"classic\" transform=\"translate(797.1640625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-131.8515625\" y=\"-27\" width=\"263.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-101.8515625, -12)\"><rect></rect><foreignObject width=\"203.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>packages/integrations/honox</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Theme-10\" data-look=\"classic\" transform=\"translate(1077.0546875, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.0390625\" y=\"-27\" width=\"196.078125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.0390625, -12)\"><rect></rect><foreignObject width=\"136.078125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>packages/themes/*</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-App-12\" data-look=\"classic\" transform=\"translate(1289.34375, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.25\" y=\"-27\" width=\"128.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.25, -12)\"><rect></rect><foreignObject width=\"68.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>apps/web</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-fhojlr-flowchart-Scaffold-14\" data-look=\"classic\" transform=\"translate(1526.828125, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-123.234375\" y=\"-27\" width=\"246.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-93.234375, -12)\"><rect></rect><foreignObject width=\"186.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>create-riebeckite / scaffold</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-fhojlr-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-fhojlr-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"何を変更する？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"共通のContent / Contract\"| Core[\"packages/core\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"CLI Command\"| CLI[\"packages/cli\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Q -->|\"再利用可能な機能\"| Plugin[\"packages/plugins/*\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Q -->|\"HonoX / Viteとの接続\"| Integration[\"packages/integrations/honox\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Q -->|\"見た目 / CSS\"| Theme[\"packages/themes/*\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Q -->|\"Route / Island / Site UI\"| App[\"apps/web\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Q -->|\"Site生成\"| Scaffold[\"create-riebeckite / scaffold\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>判断に迷う場合は、<a href=\"/docs/framework/architecture\">Architecture</a> の責務分離を基準にしてください。</p>\n<h1 id=\"package-の境界\">Package の境界</h1>\n<p>Framework を変更するときは package 間の依存方向を維持してください。</p>\n<p>大まかな依存関係は次のようになります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-te1zes\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 544.6796875px;\" viewBox=\"0 0 544.6796875 278\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-te1zes{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-te1zes .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-te1zes .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-te1zes .error-icon{fill:#552222;}#rr-mermaid-te1zes .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-te1zes .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-te1zes .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-te1zes .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-te1zes .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-te1zes .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-te1zes .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-te1zes .marker{fill:#333333;stroke:#333333;}#rr-mermaid-te1zes .marker.cross{stroke:#333333;}#rr-mermaid-te1zes svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-te1zes p{margin:0;}#rr-mermaid-te1zes .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-te1zes .cluster-label text{fill:#333;}#rr-mermaid-te1zes .cluster-label span{color:#333;}#rr-mermaid-te1zes .cluster-label span p{background-color:transparent;}#rr-mermaid-te1zes .label text,#rr-mermaid-te1zes span{fill:#333;color:#333;}#rr-mermaid-te1zes .node rect,#rr-mermaid-te1zes .node circle,#rr-mermaid-te1zes .node ellipse,#rr-mermaid-te1zes .node polygon,#rr-mermaid-te1zes .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-te1zes .rough-node .label text,#rr-mermaid-te1zes .node .label text,#rr-mermaid-te1zes .image-shape .label,#rr-mermaid-te1zes .icon-shape .label{text-anchor:middle;}#rr-mermaid-te1zes .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-te1zes .rough-node .label,#rr-mermaid-te1zes .node .label,#rr-mermaid-te1zes .image-shape .label,#rr-mermaid-te1zes .icon-shape .label{text-align:center;}#rr-mermaid-te1zes .node.clickable{cursor:pointer;}#rr-mermaid-te1zes .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-te1zes .arrowheadPath{fill:#333333;}#rr-mermaid-te1zes .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-te1zes .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-te1zes .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-te1zes .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-te1zes .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-te1zes .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-te1zes .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-te1zes .cluster text{fill:#333;}#rr-mermaid-te1zes .cluster span{color:#333;}#rr-mermaid-te1zes .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-te1zes .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-te1zes div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-te1zes .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-te1zes rect.text{fill:none;stroke-width:0;}#rr-mermaid-te1zes .icon-shape,#rr-mermaid-te1zes .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-te1zes .icon-shape p,#rr-mermaid-te1zes .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-te1zes .icon-shape .label rect,#rr-mermaid-te1zes .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-te1zes .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-te1zes .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-te1zes .node .neo-node{stroke:#9370DB;}#rr-mermaid-te1zes [data-look=\"neo\"].node rect,#rr-mermaid-te1zes [data-look=\"neo\"].cluster rect,#rr-mermaid-te1zes [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-te1zes [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-te1zes [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-te1zes [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-te1zes [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-te1zes [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-te1zes [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-te1zes [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-te1zes [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-te1zes :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-te1zes_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-te1zes_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M77.141,216L77.141,211.833C77.141,207.667,77.141,199.333,77.816,191.655C78.491,183.976,79.842,176.952,80.518,173.44L81.193,169.928\" id=\"rr-mermaid-te1zes-L_App_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_App_Integration_0\" data-points=\"W3sieCI6NzcuMTQwNjI1LCJ5IjoyMTZ9LHsieCI6NzcuMTQwNjI1LCJ5IjoxOTF9LHsieCI6ODEuOTQ4MzE3MzA3NjkyMywieSI6MTY2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path><path d=\"M87.141,112L87.141,107.833C87.141,103.667,87.141,95.333,120.034,84.287C152.927,73.24,218.713,59.481,251.606,52.601L284.499,45.721\" id=\"rr-mermaid-te1zes-L_Integration_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Core_0\" data-points=\"W3sieCI6ODcuMTQwNjI1LCJ5IjoxMTJ9LHsieCI6ODcuMTQwNjI1LCJ5Ijo4N30seyJ4IjoyODguNDE0MDYyNSwieSI6NDQuOTAyMjcxOTQxNjc3NDA1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path><path d=\"M257.188,112L257.188,107.833C257.188,103.667,257.188,95.333,262.927,87.368C268.667,79.403,280.147,71.805,285.886,68.006L291.626,64.208\" id=\"rr-mermaid-te1zes-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6MjU3LjE4NzUsInkiOjExMn0seyJ4IjoyNTcuMTg3NSwieSI6ODd9LHsieCI6Mjk0Ljk2MTY4ODcwMTkyMzEsInkiOjYyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path><path d=\"M414.328,112L414.328,107.833C414.328,103.667,414.328,95.333,408.588,87.368C402.849,79.403,391.369,71.805,385.629,68.006L379.89,64.208\" id=\"rr-mermaid-te1zes-L_Theme_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Core_0\" data-points=\"W3sieCI6NDE0LjMyODEyNSwieSI6MTEyfSx7IngiOjQxNC4zMjgxMjUsInkiOjg3fSx7IngiOjM3Ni41NTM5MzYyOTgwNzY5LCJ5Ijo2Mn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path><path d=\"M499.419,216L500.22,211.833C501.021,207.667,502.624,199.333,503.425,186.5C504.227,173.667,504.227,156.333,504.227,139C504.227,121.667,504.227,104.333,484.676,89.632C465.126,74.931,426.025,62.862,406.474,56.827L386.924,50.793\" id=\"rr-mermaid-te1zes-L_CLI_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_CLI_Core_0\" data-points=\"W3sieCI6NDk5LjQxODg3MDE5MjMwNzcsInkiOjIxNn0seyJ4Ijo1MDQuMjI2NTYyNSwieSI6MTkxfSx7IngiOjUwNC4yMjY1NjI1LCJ5IjoxMzl9LHsieCI6NTA0LjIyNjU2MjUsInkiOjg3fSx7IngiOjM4My4xMDE1NjI1LCJ5Ijo0OS42MTMyNDQyOTYwNDg5N31d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path><path d=\"M451.773,232.414L424.092,225.512C396.41,218.61,341.047,204.805,292.22,192.364C243.394,179.924,201.104,168.848,179.96,163.31L158.815,157.772\" id=\"rr-mermaid-te1zes-L_CLI_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_CLI_Integration_0\" data-points=\"W3sieCI6NDUxLjc3MzQzNzUsInkiOjIzMi40MTQzNTE4MDg0OTI3fSx7IngiOjI4NS42ODM1OTM3NSwieSI6MTkxfSx7IngiOjE1NC45NDUzMTI1LCJ5IjoxNTYuNzU4NTkyODczODY2MjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-te1zes_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_App_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_CLI_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_CLI_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-App-0\" data-look=\"classic\" transform=\"translate(77.140625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-Integration-1\" data-look=\"classic\" transform=\"translate(87.140625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.8046875\" y=\"-27\" width=\"135.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.8046875, -12)\"><rect></rect><foreignObject width=\"75.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-Plugin-2\" data-look=\"classic\" transform=\"translate(257.1875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-Theme-3\" data-look=\"classic\" transform=\"translate(414.328125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.8984375\" y=\"-27\" width=\"109.796875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.8984375, -12)\"><rect></rect><foreignObject width=\"49.796875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-CLI-4\" data-look=\"classic\" transform=\"translate(494.2265625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-42.453125\" y=\"-27\" width=\"84.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12.453125, -12)\"><rect></rect><foreignObject width=\"24.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>CLI</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-te1zes-flowchart-Core-5\" data-look=\"classic\" transform=\"translate(335.7578125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.34375\" y=\"-27\" width=\"94.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.34375, -12)\"><rect></rect><foreignObject width=\"34.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-te1zes-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-te1zes-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart BT</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    App[\"Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Integration[\"Integration\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Theme[\"Theme\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    CLI[\"CLI\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Core[\"Core\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    App --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Integration --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Theme --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    CLI --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    CLI --> Integration</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>特に Core から外側への逆依存を作らないことが重要です。</p>\n<p>たとえば Core から、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>apps/web</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>packages/plugins/*</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>HonoX</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>Vite</span></span></code></pre>\n  </div>\n</figure>\n<p>などの具体的な実装へ依存させてはいけません。</p>\n<p>Framework に依存しない contract は Core に置き、その contract を Integration や Plugin が利用します。</p>\n<h1 id=\"public-api-を使う\">Public API を使う</h1>\n<p>外部 Plugin / Theme と同じ条件で利用できる API は、公開 export から参照してください。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { ... } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span></code></pre>\n  </div>\n</figure>\n<p>のような公開 entrypoint を使用します。</p>\n<p>次のように package 内部へ直接依存することは避けてください。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { ... } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core/src/...\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>src/**</span></span></code></span> は内部実装であり、安定した Public API ではありません。</p>\n<p>公式 Plugin や Theme も可能な限り Public API の consumer として実装することで、外部 package から実際に利用できる contract になっていることを確認できます。</p>\n<h1 id=\"scaffold-は独立した-site-として扱う\">Scaffold は独立した Site として扱う</h1>\n<p>Scaffold は Riebeckite monorepo 内でしか動かない構成にしてはいけません。</p>\n<p>生成された Site は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>create-riebeckite</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>       ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>Generated Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>       ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>npm packages</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>       ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>build</span></span></code></pre>\n  </div>\n</figure>\n<p>という形で、monorepo の内部 source に依存せず動作する必要があります。</p>\n<p>そのため scaffold を変更した場合は、workspace 内で動くだけではなく、外部 Site として成立することも確認してください。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check:scaffold</span></span></code></span> や external-site E2E は、この境界を検証するためにあります。</p>\n<h1 id=\"documentation-の境界\">Documentation の境界</h1>\n<p>一般ユーザー向け Documentation では、Riebeckite monorepo の clone や workspace setup を前提にしません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-caiq8a\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 783.328125px;\" viewBox=\"0 0 783.328125 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-caiq8a{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-caiq8a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-caiq8a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-caiq8a .error-icon{fill:#552222;}#rr-mermaid-caiq8a .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-caiq8a .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-caiq8a .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-caiq8a .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-caiq8a .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-caiq8a .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-caiq8a .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-caiq8a .marker{fill:#333333;stroke:#333333;}#rr-mermaid-caiq8a .marker.cross{stroke:#333333;}#rr-mermaid-caiq8a svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-caiq8a p{margin:0;}#rr-mermaid-caiq8a .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-caiq8a .cluster-label text{fill:#333;}#rr-mermaid-caiq8a .cluster-label span{color:#333;}#rr-mermaid-caiq8a .cluster-label span p{background-color:transparent;}#rr-mermaid-caiq8a .label text,#rr-mermaid-caiq8a span{fill:#333;color:#333;}#rr-mermaid-caiq8a .node rect,#rr-mermaid-caiq8a .node circle,#rr-mermaid-caiq8a .node ellipse,#rr-mermaid-caiq8a .node polygon,#rr-mermaid-caiq8a .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-caiq8a .rough-node .label text,#rr-mermaid-caiq8a .node .label text,#rr-mermaid-caiq8a .image-shape .label,#rr-mermaid-caiq8a .icon-shape .label{text-anchor:middle;}#rr-mermaid-caiq8a .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-caiq8a .rough-node .label,#rr-mermaid-caiq8a .node .label,#rr-mermaid-caiq8a .image-shape .label,#rr-mermaid-caiq8a .icon-shape .label{text-align:center;}#rr-mermaid-caiq8a .node.clickable{cursor:pointer;}#rr-mermaid-caiq8a .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-caiq8a .arrowheadPath{fill:#333333;}#rr-mermaid-caiq8a .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-caiq8a .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-caiq8a .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-caiq8a .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-caiq8a .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-caiq8a .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-caiq8a .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-caiq8a .cluster text{fill:#333;}#rr-mermaid-caiq8a .cluster span{color:#333;}#rr-mermaid-caiq8a .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-caiq8a .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-caiq8a div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-caiq8a .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-caiq8a rect.text{fill:none;stroke-width:0;}#rr-mermaid-caiq8a .icon-shape,#rr-mermaid-caiq8a .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-caiq8a .icon-shape p,#rr-mermaid-caiq8a .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-caiq8a .icon-shape .label rect,#rr-mermaid-caiq8a .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-caiq8a .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-caiq8a .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-caiq8a .node .neo-node{stroke:#9370DB;}#rr-mermaid-caiq8a [data-look=\"neo\"].node rect,#rr-mermaid-caiq8a [data-look=\"neo\"].cluster rect,#rr-mermaid-caiq8a [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-caiq8a [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-caiq8a [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-caiq8a [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-caiq8a [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-caiq8a [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-caiq8a [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-caiq8a [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-caiq8a [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-caiq8a :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-caiq8a_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-caiq8a_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M179.594,35L191.393,35C203.193,35,226.792,35,248.017,35C269.242,35,288.094,35,297.52,35L306.945,35\" id=\"rr-mermaid-caiq8a-L_User_Getting_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_User_Getting_0\" data-points=\"W3sieCI6MTc5LjU5Mzc1LCJ5IjozNX0seyJ4IjoyNTAuMzkwNjI1LCJ5IjozNX0seyJ4IjozMTAuOTQ1MzEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-caiq8a_flowchart-v2-pointEnd)\"></path><path d=\"M478.57,35L488.663,35C498.755,35,518.94,35,536.164,35C553.388,35,567.651,35,574.783,35L581.914,35\" id=\"rr-mermaid-caiq8a-L_Getting_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Getting_Site_0\" data-points=\"W3sieCI6NDc4LjU3MDMxMjUsInkiOjM1fSx7IngiOjUzOS4xMjUsInkiOjM1fSx7IngiOjU4NS45MTQwNjI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-caiq8a_flowchart-v2-pointEnd)\"></path><path d=\"M225.391,139L229.557,139C233.724,139,242.057,139,249.724,139C257.391,139,264.391,139,267.891,139L271.391,139\" id=\"rr-mermaid-caiq8a-L_Dev_Framework_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Dev_Framework_0\" data-points=\"W3sieCI6MjI1LjM5MDYyNSwieSI6MTM5fSx7IngiOjI1MC4zOTA2MjUsInkiOjEzOX0seyJ4IjoyNzUuMzkwNjI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-caiq8a_flowchart-v2-pointEnd)\"></path><path d=\"M514.125,139L518.292,139C522.458,139,530.792,139,538.458,139C546.125,139,553.125,139,556.625,139L560.125,139\" id=\"rr-mermaid-caiq8a-L_Framework_Repo_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Framework_Repo_0\" data-points=\"W3sieCI6NTE0LjEyNSwieSI6MTM5fSx7IngiOjUzOS4xMjUsInkiOjEzOX0seyJ4Ijo1NjQuMTI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-caiq8a_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_User_Getting_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Getting_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Dev_Framework_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Framework_Repo_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-User-0\" data-look=\"classic\" transform=\"translate(116.6953125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.8984375\" y=\"-27\" width=\"125.796875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.8984375, -12)\"><rect></rect><foreignObject width=\"65.796875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site User</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-Getting-1\" data-look=\"classic\" transform=\"translate(394.7578125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Getting Started</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-Site-2\" data-look=\"classic\" transform=\"translate(669.7265625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Generated Site</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-Dev-3\" data-look=\"classic\" transform=\"translate(116.6953125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.6953125\" y=\"-27\" width=\"217.390625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.6953125, -12)\"><rect></rect><foreignObject width=\"157.390625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework Developer</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-Framework-4\" data-look=\"classic\" transform=\"translate(394.7578125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.3671875\" y=\"-27\" width=\"238.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.3671875, -12)\"><rect></rect><foreignObject width=\"178.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Framework Development</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-caiq8a-flowchart-Repo-5\" data-look=\"classic\" transform=\"translate(669.7265625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.6015625\" y=\"-27\" width=\"211.203125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.6015625, -12)\"><rect></rect><foreignObject width=\"151.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Monorepo</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-caiq8a-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-caiq8a-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    User[\"Site User\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Getting[\"Getting Started\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Site[\"Generated Site\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Dev[\"Framework Developer\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Framework[\"Framework Development\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Repo[\"Riebeckite Monorepo\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    User --> Getting --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Dev --> Framework --> Repo</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Site を作るユーザーと Framework を開発するユーザーでは、必要な環境が異なるためです。</p>\n<p>monorepo 固有の command、内部 package 構成、Framework の build 方法などは、この Framework Development セクションで扱います。</p>\n<h1 id=\"開発時に守る境界\">開発時に守る境界</h1>\n<p>Framework の変更では、特に次の点を維持してください。</p>\n<ul>\n  <li>Core から Application、Plugin 内部、Framework 固有実装へ逆依存しない</li>\n  <li>外部 Plugin / Theme が <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>src/**</span></span></code></span> を import しなくても実装できる Public API を維持する</li>\n  <li>一般ユーザー向け Documentation に monorepo setup を要求しない</li>\n  <li>Scaffold を monorepo から独立して動作できる Site として維持する</li>\n  <li>変更した範囲から検証し、必要に応じて repository 全体へ検証範囲を広げる</li>\n</ul>\n<p>Framework 全体の責務については <a href=\"/docs/framework/architecture\">Architecture</a>、テスト方針については <a href=\"/docs/framework/testing\">Testing</a>、CLI については <a href=\"/docs/reference/cli\">CLI</a>、HonoX との接続については <a href=\"/docs/framework/honox-integration\">HonoX Integration</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Framework Development このページは、 Riebeckite 本体を開発する人向け のガイドです。 次のような変更を行う場合に、この monorepo を使用します。 Core の機能を追加・変更する CLI を変更する HonoX Integration を変更する 公式 Plugin / The","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/diagnostics","url":"https://riebeckite.dev/en/docs/framework/diagnostics","title":"diagnostics.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"diagnostics\">Diagnostics</h1>\n<p>Diagnostics are structured findings emitted by Core, plugins, and tooling. They make invalid configuration, content issues, capability problems, and environmental health visible without turning every issue into an unstructured console string.</p>\n<h2 id=\"producers-and-consumers\">Producers and consumers</h2>\n<p>Plugins can provide diagnostics through <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>addDiagnostics</span></span></code></span>; Core and integrations combine them for commands such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span>. A plugin should name the actionable condition, identify the relevant content/configuration when available, and make severity proportionate to whether output can remain correct.</p>\n<p>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> for configuration/plugin validity and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> for broader health. Doctor checks independent areas where possible, so one broken optional area should not conceal another finding. A failing doctor result exits unsuccessfully.</p>\n<p>The doctor build-state check verifies that the incremental state is readable and that its stored fingerprints still match the current content source. When entries were added, changed, or removed since the last build, it reports a warning with counts and samples; the next build refreshes the state.</p>\n<h2 id=\"content-id-integrity\">Content ID integrity</h2>\n<p>Stable content IDs come from the optional source-authored <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> frontmatter field and are the identity key for per-content consumers such as the analytics plugin's page-view tracking. The diagnostics plugin reports two content-level invariants around them:</p>\n<table>\n  <thead>\n    <tr>\n      <th>Code</th>\n      <th>Default severity</th>\n      <th>Condition</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>duplicate-content-id</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>error</span></span></code></span></td>\n      <td>multiple published notes share a stable content ID, which would silently merge per-content metrics</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>invalid-content-id</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>error</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> frontmatter violates the stable content ID contract, which breaks the build</td>\n    </tr>\n  </tbody>\n</table>\n<p>These checks are generic content diagnostics; the diagnostics plugin does not hardcode an analytics-specific requirement into its check abstraction.</p>\n<h2 id=\"site-wide-content-integrity\">Site-wide content integrity</h2>\n<p>The diagnostics plugin also reports manifest-level reference integrity for the published site. It checks resolved public entries and plugin-provided public routes rather than creating a parallel filesystem scanner. This covers missing internal links, unresolved WikiLinks, missing local assets, duplicate final public locations, and redirect problems (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content-integrity:*</span></span></code></span>). Page-local HTML quality remains the responsibility of <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-quality</span></span></code></span>.</p>\n<p>Generated pages and generated assets should be registered through Page Types, generated outputs, or plugin assets. Registered paths are treated as valid public targets and should not be reported as broken links.</p>\n<h2 id=\"authoring-rules\">Authoring rules</h2>\n<ul>\n  <li>Validate options with a pure validator; do not read files, mutate state, or start work while validating.</li>\n  <li>Report uncertainty rather than silently choosing unsafe output.</li>\n  <li>Do not leak internal stack traces, tokens, or absolute local details into user-facing messages.</li>\n  <li>Prefer stable identifiers and clear remediation over brittle text matching.</li>\n  <li>Keep diagnostics read-only; they must not auto-fix, build, or mutate cache/state.</li>\n</ul>\n<p>Use <a href=\"/en/docs/framework/inspector\">Inspector</a> to inspect facts and <a href=\"/en/docs/framework/observability\">Observability</a> for logs and traces.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Diagnostics Diagnostics are structured findings emitted by Core, plugins, and tooling. They make invalid configuration, content issues, capability problems, and","tags":[]},{"id":"https://riebeckite.dev/docs/framework/diagnostics","url":"https://riebeckite.dev/docs/framework/diagnostics","title":"diagnostics","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"diagnostics\">Diagnostics</h1>\n<p>Diagnostics は、Riebeckite の設定やコンテンツ、プラグイン、実行環境に問題がないかを検査し、開発者に報告するための仕組みです。</p>\n<p>単にエラーメッセージを <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>console.log</span></span></code></span> へ出すのではなく、</p>\n<ul>\n  <li>何が問題なのか</li>\n  <li>どこで問題が起きているのか</li>\n  <li>どの程度重要なのか</li>\n  <li>どう直せばよいのか</li>\n</ul>\n<p>といった情報を、Riebeckite が扱える共通形式の診断情報（diagnostic）として表現します。</p>\n<p>これにより、Core や各プラグインが見つけた問題を <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> や <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> からまとめて確認できます。</p>\n<h2 id=\"diagnostics-の流れ\">Diagnostics の流れ</h2>\n<p>プラグインは <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>addDiagnostics</span></span></code></span> を使って独自の診断を追加できます。</p>\n<p>追加された診断は Core や integration によって集約され、主に <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> や <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> から利用されます。</p>\n<p>診断を追加するときは、可能な限り次の情報を明確にしてください。</p>\n<ul>\n  <li>問題が発生する条件</li>\n  <li>問題のあるコンテンツや設定</li>\n  <li>問題の重要度（severity）</li>\n  <li>修正方法（remediation）</li>\n</ul>\n<p>たとえば「設定が不正です」とだけ報告するのではなく、「どの設定が不正で、どのように変更すればよいか」まで分かる診断を推奨します。</p>\n<h2 id=\"check-と-doctor\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span></h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> は役割が少し異なります。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> は主に設定やプラグインの構成が正しいかを検査します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> はそれに加えて、Riebeckite が正常に動作できる状態かをより広く検査します。</p>\n<p>Doctor では、1つの検査に失敗しても、可能な限り他の独立した検査を続行します。そのため、複数の問題がある場合でも一度の実行でまとめて確認できます。</p>\n<p>問題が見つかった場合、コマンドは non-zero exit code で終了します。</p>\n<h3 id=\"build-state-の検査\">Build state の検査</h3>\n<p>Doctor は incremental build で使用する build state も検査します。</p>\n<p>主に次の状態を確認します。</p>\n<ul>\n  <li>保存されている state を正常に読み込めるか</li>\n  <li>保存された fingerprint と現在のコンテンツが一致しているか</li>\n</ul>\n<p>前回の build 以降にコンテンツが追加・変更・削除されている場合は、変更件数と一部のサンプルを warning として報告します。</p>\n<p>これは state の破損を意味するものではありません。次回の build が完了すると、現在のコンテンツに合わせて state が更新されます。</p>\n<h2 id=\"コンテンツ-id-の検査\">コンテンツ ID の検査</h2>\n<p>Riebeckite では、コンテンツを継続的に識別するための「安定コンテンツ ID」を設定できます。</p>\n<p>通常はフロントマターの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> を使用します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"yaml\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">yaml</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"yaml\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"yaml\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--remove\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">---</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">id</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">my-article</span></span>\n<span class=\"rr-code__line rr-code__line--remove\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">---</span></span></code></pre>\n  </div>\n</figure>\n<p>この ID は、たとえば analytics プラグインがページごとの閲覧数を記録するときなど、URLとは別にコンテンツそのものを識別したい場合に利用されます。</p>\n<p>Diagnostics プラグインは、コンテンツ ID について次の問題を検査します。</p>\n<table>\n  <thead>\n    <tr>\n      <th>コード</th>\n      <th>重要度</th>\n      <th>意味</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>duplicate-content-id</span></span></code></span></td>\n      <td>error</td>\n      <td>複数の公開コンテンツが同じ ID を使用している</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>invalid-content-id</span></span></code></span></td>\n      <td>error</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span> がコンテンツ ID のルールを満たしていない</td>\n    </tr>\n  </tbody>\n</table>\n<p>たとえば、2つの記事が同じ ID を持っていると、analytics などで別の記事のデータが同じコンテンツとして扱われる可能性があります。</p>\n<p>これらは analytics 専用の検査ではありません。コンテンツ ID を利用するすべての機能に共通する整合性チェックとして Diagnostics が担当します。</p>\n<h2 id=\"サイト全体のコンテンツ整合性\">サイト全体のコンテンツ整合性</h2>\n<p>Diagnostics プラグインは、公開サイト内のリンクや参照が正しく解決できるかも検査します。</p>\n<p>たとえば、次のような問題を検出します。</p>\n<ul>\n  <li>存在しないページへのリンク</li>\n  <li>解決できない Wikiリンク</li>\n  <li>存在しない画像や添付ファイルへの参照</li>\n  <li>複数のコンテンツによる公開パスの重複</li>\n  <li>存在しない転送先へのリダイレクト</li>\n  <li>循環しているリダイレクト</li>\n</ul>\n<p>これらは <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content-integrity:*</span></span></code></span> の診断として報告されます。</p>\n<h3 id=\"どの情報を使って検査するのか\">どの情報を使って検査するのか</h3>\n<p>整合性検査では、Riebeckite がすでに解決した公開コンテンツや公開パスの情報を使用します。</p>\n<p>そのため、Diagnostics のためだけに Markdown をもう一度解析したり、コンテンツを最初から読み直したりすることはありません。</p>\n<p>また、permalink、alias、rename、多言語化、公開・除外設定などによって最終的な公開先が変わっている場合も、Riebeckite が解決した結果を基準に検査します。</p>\n<h3 id=\"html-の品質検査との違い\">HTML の品質検査との違い</h3>\n<p>Diagnostics が担当するのは、主にサイト全体の参照や構成の整合性です。</p>\n<p>一方で、</p>\n<ul>\n  <li>画像に適切な <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>alt</span></span></code></span> があるか</li>\n  <li>見出し構造が適切か</li>\n  <li>生成された HTML に問題がないか</li>\n</ul>\n<p>といった個々のページの HTML 品質は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-quality</span></span></code></span> が担当します。</p>\n<h2 id=\"プラグインからページやアセットを公開する場合\">プラグインからページやアセットを公開する場合</h2>\n<p>プラグインが独自のページ、生成ファイル、アセットなどを公開する場合は、Riebeckite が提供する対応する仕組みを使って登録してください。</p>\n<p>正しく登録された公開先は Diagnostics からも認識されます。</p>\n<p>そのため、たとえばプラグインが <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/explore</span></span></code></span> というページを正式に公開していれば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/explore</span></span></code></pre>\n  </div>\n</figure>\n<p>へのリンクが「存在しないページ」として誤って報告されることはありません。</p>\n<h2 id=\"diagnostics-を実装するときのルール\">Diagnostics を実装するときのルール</h2>\n<p>Diagnostics を追加するときは、次の原則に従ってください。</p>\n<ul>\n  <li>option validation ではファイルの読み込みや状態変更を行わない</li>\n  <li>安全な結果を判断できない場合は、推測して処理を続けず診断として報告する</li>\n  <li>stack trace、token、不要な絶対パスをユーザー向けメッセージへ含めない</li>\n  <li>メッセージ文字列ではなく、安定した diagnostic identifier を使って問題を識別する</li>\n  <li>可能な限り具体的な修正方法を示す</li>\n  <li>diagnostic の生成中に auto-fix、build、cache 更新、state 更新を行わない</li>\n</ul>\n<p>Diagnostics は問題を<strong>発見して説明する仕組み</strong>です。問題を自動的に修正したり、ビルド状態を変更したりする仕組みではありません。</p>\n<p>現在の状態そのものを確認したい場合は <a href=\"/docs/framework/inspector\">Inspector</a>、ログやトレースを確認したい場合は <a href=\"/docs/framework/observability\">Observability</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Diagnostics Diagnostics は、Riebeckite の設定やコンテンツ、プラグイン、実行環境に問題がないかを検査し、開発者に報告するための仕組みです。 単にエラーメッセージを console.log へ出すのではなく、 何が問題なのか どこで問題が起きているのか どの程度重要なのか どう直せばよい","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/honox-integration","url":"https://riebeckite.dev/en/docs/framework/honox-integration","title":"honox-integration.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"honox-integration\">HonoX Integration</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> connects portable Core behavior to HonoX and Vite. It owns application-root/config resolution, Vite development and build integration, SSG extension mapping, generated plugin/theme style entries, and the HonoX application build workflow.</p>\n<h2 id=\"public-api\">Public API</h2>\n<p>\n  Register the integration with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite()</span></span></code></span> from <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>vite.config.ts</span></span></code></span>. It is\n  the higher-level helper for a normal site: it appends the Riebeckite plugins,\n  applies the SSG entry and extension-map defaults, and contributes the SSR\n  externals the runtime needs, so the site does not restate Vite/HonoX internals.\n  Combine it with the site's own plugins (the HonoX plugin, a deployment build\n  plugin, Tailwind, and so on):\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { riebeckiteVite } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { defineConfig } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"vite\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> defineConfig</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  plugins: [</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">honox</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">...</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }), </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">...</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckiteVite</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(), </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">build</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">()],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite</span></span></code></span> accepts the same optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configFile</span></span></code></span>,\n  and monorepo-only <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>workspaceRoot</span></span></code></span> as the lower-level plugin. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span> defaults\n  to the Vite root, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span> defaults to <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span>. A config path is\n  imported relative to <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span>; <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content.directory</span></span></code></span> is resolved relative to\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span>. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxApplication</span></span></code></span> returns these roots together with the\n  resolved config, so CLI and Vite use the same model. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>workspaceRoot</span></span></code></span> is only for\n  source-package aliases during monorepo development; installed npm consumers use\n  their own <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>node_modules</span></span></code></span> without it. The integration creates generated import\n  entries below <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/.riebeckite/</span></span></code></span>, and exposes the required client module as a\n  virtual module rather than writing it into that directory. Generated files are\n  integration output: do not edit them as application source.\n</p>\n<h2 id=\"bootstrap-modules\">Bootstrap modules</h2>\n<p>\n  A generated site imports framework-owned bootstrap modules instead of keeping\n  resolved config and content-manager code in the application: the resolved\n  config is <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>virtual:riebeckite/config</span></span></code></span>, and the configured content runtime is\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>virtual:riebeckite/content</span></span></code></span>. This is why <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/config.ts</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/content.ts</span></span></code></span>, and\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/constants/paths.ts</span></span></code></span> are not generated. The SSG entry <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/server.ts</span></span></code></span>\n  re-exports both, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span> finds the manifest through them.\n</p>\n<p>\n  A script that runs outside Vite (for example a Node script started with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tsx</span></span></code></span>)\n  can resolve the same config with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxConfig</span></span></code></span> from\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/runtime</span></span></code></span>.\n</p>\n<p>\n  The lower-level pieces remain exported for callers that need full control:\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite</span></span></code></span> (the Vite plugin), <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span> (static generation),\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsgExtensionMap</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>createRiebeckiteSsg</span></span></code></span> (the SSG wrapper that\n  fills in Riebeckite's defaults). <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span> starts its internal Vite server\n  with the resolved application root and define values, so invoking\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite build</span></span></code></span> from a subdirectory yields the same output as invoking it\n  from the application root. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>defaultSsgEntry</span></span></code></span> is the root-relative\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>./app/server.ts</span></span></code></span> entry, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>defaultSsrExternals</span></span></code></span> is the SSR externals list\n  both helpers use. The SSG entry must re-export the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>config</span></span></code></span> and\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>export { config, content }</span></span></code></span>): that is how <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span> finds the\n  manifest to emit plugin-generated outputs and to run the per-page HTML\n  inspections. Other exports are <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>loadRiebeckiteConfig</span></span></code></span>,\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxApplication</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxApplicationRoot</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildHonoxApplication</span></span></code></span>,\n  and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>startHonoxDevServer</span></span></code></span>.\n</p>\n<p>\n  Catch-all routes need two small helpers so runtime routing and static\n  generation agree. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentRouteSsgParams(routePath, params)</span></span></code></span> is a drop-in\n  replacement for <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ssgParams</span></span></code></span> from <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hono/ssg</span></span></code></span>: it emits params only for the\n  route's own enumeration request, so a shallow catch-all such as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/:slug{.+}</span></span></code></span>\n  does not capture the enumeration of a deeper sibling like <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/tags/:slug{.+}</span></span></code></span>.\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ssgEnumerableHandler(handler)</span></span></code></span> keeps a route handler visible to SSG\n  enumeration while it still calls <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>next()</span></span></code></span> to defer to those siblings; Hono\n  otherwise skips middleware-shaped handlers.\n</p>\n<p>\n  When plugins provide Page Types, use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteRoute(content, path)</span></span></code></span>\n  instead of <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentRoute(manifest, path)</span></span></code></span> and merge\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pluginPageSsgParams(content)</span></span></code></span> with the content parameters. The resolver first\n  returns a plugin page, then falls through to content and redirects. Its page\n  body is intentionally a string: render it inside the site's existing document\n  frame and pass <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>page.headTags</span></span></code></span> to that frame. The scaffolded catch-all route\n  wraps this in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest(c, content)</span></span></code></span>, which resolves\n  content, plugin pages, redirects, and not-found and sets the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>htmlLanguage</span></span></code></span> and\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> context, so the site only composes the returned result. The root <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span>\n  is resolved by <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest(c, content)</span></span></code></span>, which shares the same\n  mechanics. Plugin packages never need to add HonoX route files.\n</p>\n<h2 id=\"ui-primitives\">UI primitives</h2>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> is deliberately a small structural contract, not a\n  component framework. Its complete public component surface is:\n</p>\n<ul>\n  <li>\n    <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Article</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleLayout</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleHeader</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent</span></span></code></span>,\n    <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PageBody</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleMeta</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleFooter</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span>\n    for an article page;\n  </li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Sidebar</span></span></code></span> for complementary content.</li>\n</ul>\n<p>\n  The corresponding <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>*Props</span></span></code></span> types are public. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> is paired with the\n  pure <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hasSlot(slots, name)</span></span></code></span> helper, and the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ARTICLE_SLOT</span></span></code></span> constant provides\n  the standard slot names. These stable styling hooks are the only classes\n  supplied by the contract: <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-layout</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-header</span></span></code></span>,\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-body</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-content</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-meta</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-footer</span></span></code></span>,\n  and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-sidebar</span></span></code></span>, in the component order above. Primitives provide semantic\n  HTML, those hooks, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>class</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>className</span></span></code></span> composition, and the structural CSS that\n  makes the hooks work. That structural CSS ships in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/style.css</span></span></code></span>\n  and reaches the site through the generated <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/framework-styles.css</span></span></code></span>.\n  Primitives do not own article copy, metadata formatting, navigation placement,\n  cards, page-layout composition, islands, or site visual design and overrides.\n  Those belong to the site application. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleHeader</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent</span></span></code></span>\n  accept either children or their HTML input prop, never both. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span>\n  renders rendered Markdown as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.rb-article-content</span></span></code></span>, and Markdown typography is\n  scoped to that wrapper, so plugin components keep their own headings wherever\n  they are placed. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> looks a slot up by name in the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slots</span></span></code></span> map and\n  renders it with a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-slot</span></span></code></span> attribute; a missing, empty, or whitespace-only\n  slot renders nothing, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>class</span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>className</span></span></code></span> add site classes. It never infers\n  a semantic element from the slot name.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  Article,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleBody,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleContent,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleLayout,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ContentSlot,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.aside\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article__aside\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.metadata\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>;</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Use the primitives as composition points, then style them from the site. Pass\n  rendered Markdown to <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span>; <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent html={...}</span></span></code></span> remains for\n  backward compatibility but is deprecated. Do not import files below\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/src/</span></span></code></span> or rely on any unlisted component.\n</p>\n<h2 id=\"site-application-contract\">Site application contract</h2>\n<p>\n  A Riebeckite site is a normal HonoX application. The integration supplies\n  content and build wiring; the application owns every user-facing decision.\n  Keep the following source directories in the site, rather than in an\n  integration, theme, or plugin. For a walkthrough of editing them with ordinary\n  HonoX, see <a href=\"/en/docs/guides/customizing-your-site\">Customizing Your Site</a>.\n</p>\n<table>\n  <thead>\n    <tr>\n      <th>Directory</th>\n      <th>Site-owned responsibility</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/</span></span></code></span></td>\n      <td>URL handling, page composition, redirects, and response metadata</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/components/</span></span></code></span></td>\n      <td>Reusable site presentation and composition of the public UI primitives</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/islands/</span></span></code></span></td>\n      <td>Optional interactive UI and its client-side state</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/style.css</span></span></code></span> and local CSS</td>\n      <td>Visual tokens, layout, typography, and imports of generated extension styles</td>\n    </tr>\n  </tbody>\n</table>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_renderer.tsx</span></span></code></span> is the site shell. It owns the document head,\n  navigation, page chrome, and the application client entry. A route resolves a\n  request with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest(c, content)</span></span></code></span> — which also sets the\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>htmlLanguage</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> context — then chooses its own component tree.\n  The reference application in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> is one implementation, not a required\n  layout.\n</p>\n<h3 id=\"head-tag-handoff\">Head tag handoff</h3>\n<p>\n  When a plugin provides document head tags, the shell still belongs to the\n  site. A plugin only describes <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>meta</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>link</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>script</span></span></code></span> on\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.headTags</span></span></code></span>; it never renders them.\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest</span></span></code></span> set the\n  resolved entry's tags into the route context, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_renderer.tsx</span></span></code></span>\n  decides whether to render them. A plugin does not own the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> or the tag\n  order.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// app/routes/_renderer.tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PluginHeadTags } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"headTags\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> [];</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PluginHeadTags</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> tags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{headTags} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>;</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  For example, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-discord-embed</span></span></code></span>, which aligns the Discord embed\n  color, supplies <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>theme-color</span></span></code></span> through this contract.\n</p>\n<h3 id=\"riebeckitehead-and-pluginheadtags\">RiebeckiteHead and PluginHeadTags</h3>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> provides two primitives that clarify the separation of\n  responsibilities between the framework and the site for head composition.\n</p>\n<h4 id=\"riebeckitehead\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span></h4>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { RiebeckiteHead } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">RiebeckiteHead</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> title</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"My Site\"</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{[]} /></span></span></code></pre>\n  </div>\n</figure>\n<p>The framework renders the standard head contents:</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;meta charset=\"utf-8\"></span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;title></span></span></code></span> (the value provided by the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>title</span></span></code></span> prop)</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;link rel=\"icon\" href=\"/favicon.ico\"></span></span></code></span> (overridable via the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>faviconHref</span></span></code></span> prop; pass <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>null</span></span></code></span> to omit)</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;ColorModeScript /></span></span></code></span> (controlled by the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>colorModeScript</span></span></code></span> prop, default <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>true</span></span></code></span>)</li>\n  <li>stylesheet entries (via the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>stylesheets</span></span></code></span> prop, default <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>[\"/app/style.css\"]</span></span></code></span>)</li>\n  <li>client script entry (via the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>clientSrc</span></span></code></span> prop, default <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>\"/app/client.ts\"</span></span></code></span>; <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>null</span></span></code></span> omits it)</li>\n  <li>conversion of <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTag</span></span></code></span> values (via the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> prop)</li>\n  <li>child elements (via the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>children</span></span></code></span> prop) appended after the standard ones</li>\n</ul>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> does <strong>not</strong> render the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> element itself. The site retains\n  ownership of <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> and can add custom meta/link/script alongside it.\n</p>\n<h4 id=\"pluginheadtags\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTags</span></span></code></span></h4>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PluginHeadTags } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PluginHeadTags</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> tags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{headTagsFromManifest} /></span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Converts <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTag</span></span></code></span> values (meta / link / script) into JSX elements. Use this\n  when the site composes its own head and does not use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span>.\n</p>\n<p>For example, a site that keeps <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> ownership and uses <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span>:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { RiebeckiteHead, ThemeRoot } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> jsxRenderer</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(({ </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">children</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }, </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ThemeRoot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    theme</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{config.theme}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    lang</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"htmlLanguage\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> config.site.locale}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">RiebeckiteHead</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">        title</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{config.site.title}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">        headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"headTags\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> []}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">meta</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"custom-site-value\"</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> content</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"...\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">body</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"riebeckite-page rb-site\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>{children}&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">body</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ThemeRoot</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">));</span></span></code></pre>\n  </div>\n</figure>\n<p>The framework owns the standard head rendering mechanics (charset, viewport, default title, favicon wiring, color-mode bootstrap, stylesheet/client entry wiring, PluginHeadTag conversion) and theme-root attribute derivation. The site still owns <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;body></span></span></code></span> composition and can add custom meta/link/script. The favicon FILE (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/public/favicon.ico</span></span></code></span>) remains site-owned; only the default link wiring is framework-owned.</p>\n<p>Plugin-provided head tags continue to work through the existing <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> mechanism. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> can be used together.</p>\n<h3 id=\"body-slot-handoff\">Body slot handoff</h3>\n<p>\n  When a plugin contributes HTML that belongs inside the note body, the site still\n  owns where it is rendered. A plugin only writes an HTML fragment into\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManifestEntry.bodySlots</span></span></code></span> under a slot name; it never changes a route,\n  the shell, or the render order. A site route passes the slot object to its\n  article component, which decides whether and where to render each slot.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// app/routes/[slug{.+}].tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  content</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  bodySlots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{route.entry.bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">/>;</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  The <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Article</span></span></code></span> here is the site's own article component, not the\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> primitive of the same name. The scaffolded starter\n  renders the standard slots at fixed positions: <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.aside</span></span></code></span>,\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.header</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.metadata</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.before-content</span></span></code></span>,\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.after-content</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.footer</span></span></code></span>. A plugin author picks one of\n  those, or asks the site to render a custom name; a custom slot renders nothing\n  until the site chooses to render it.\n</p>\n<p>\n  The site chooses which slot goes where and delegates the rendering mechanics to\n  the public <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> primitive.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.metadata\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article__metadata\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span></code></pre>\n  </div>\n</figure>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> owns the slot lookup, missing and empty handling, HTML fragment\n  rendering, and the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-slot</span></span></code></span> attribute, so the site never writes\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dangerouslySetInnerHTML</span></span></code></span> for a standard slot. Order, visibility, site classes,\n  and custom slot names still belong to the site. The escape hatches remain:\n  read <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slots</span></span></code></span> directly, wrap a slot in any element, and render the same slot more\n  than once.\n</p>\n<p>\n  For example, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-properties</span></span></code></span> publishes its property panel on\n  the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>properties</span></span></code></span> slot when configured with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>render: \"slot\"</span></span></code></span>. The default\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>render: \"html\"</span></span></code></span> keeps inserting the panel at the start or end of the note HTML.\n  A plugin never owns routes or the shell.\n</p>\n<p>\n  Article-end plugin sections share <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.footer</span></span></code></span>. Render that slot once in\n  the article component; the resolved plugin <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span> determines the fragment\n  sequence, and an empty contribution does not create a DOM node.\n</p>\n<p>\n  For example, an external site can compose an article with the stable primitive\n  contract while retaining all presentation ownership:\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// app/components/article.tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> type</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { ContentBodySlots, PostContent } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  Article,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleBody,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleContent,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleLayout,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ContentSlot,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> SiteArticle</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  post</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  bodySlots</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  post</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> PostContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  bodySlots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">?:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ContentBodySlots</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"23\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"24\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.footer\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"25\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"26\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"27\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"28\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  );</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"29\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Import generated extension styles from the site's stylesheet, but never edit\n  the generated files themselves:\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"css\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">css</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"css\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"css\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">/* app/style.css */</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/framework-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/plugin-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/theme-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">.site-article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">max-width</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">48</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">rem</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">; </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">margin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">0</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> auto</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">; }</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Islands are also ordinary application modules. Place a HonoX island under\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/islands/</span></span></code></span>, import it from the route or component that owns it, and keep\n  its hydration and client state local to the site. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/client.ts</span></span></code></span> must continue\n  to initialize both <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>createClient()</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>initRiebeckiteClient()</span></span></code></span>; the latter\n  starts browser entries contributed by installed plugins and themes. A plugin\n  may contribute its own client entry, but it must not take ownership of a\n  site's routes, shell, components, islands, or CSS decisions.\n</p>\n<p>\n  The external-site E2E fixture contains this minimal arrangement: a site shell,\n  a local article component built from <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span>, a local island,\n  and site CSS. It is built from packed npm artifacts, so it is the supported\n  example for copying and overriding these boundaries.\n</p>\n<h3 id=\"not-found-and-error-surface\">Not-found and error surface</h3>\n<p>\n  Not-found handling is HonoX's standard <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_404.tsx</span></span></code></span>. Riebeckite decides\n  that a request is not found; HonoX re-renders that response through the site's\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>_renderer.tsx</span></span></code></span>, so the status stays <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>404</span></span></code></span> while the not-found screen belongs to\n  the site.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// app/routes/_404.tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> type</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { NotFoundHandler } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"hono\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> handler</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> NotFoundHandler</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">status</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">404</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">main</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"not-found\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>Page not found&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">main</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">};</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> handler;</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  The route resolver (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest</span></span></code></span>,\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest</span></span></code></span>, and plugin page resolution) and the extension\n  guard that keeps asset-like paths out of the content route stay in\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span>; the site never reimplements them. Only public, routable\n  content resolves, so a not-found response never carries draft, future-dated, or\n  private metadata.\n</p>\n<p>\n  Runtime errors use Hono's own error handling. Without an <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_error.tsx</span></span></code></span>\n  the default handler logs the error and returns a plain <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>500 Internal Server Error</span></span></code></span>; a site may add <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>_error.tsx</span></span></code></span> (an <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ErrorHandler</span></span></code></span>) when it wants a\n  visitor-facing screen. Configuration, plugin, and build failures are\n  developer-facing and must not be turned into a successful page.\n</p>\n<h2 id=\"boundary-rules\">Boundary rules</h2>\n<p>Article routing resolves a request against the manifest's already-resolved public locations (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>byPermalink</span></span></code></span>, then <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>redirects</span></span></code></span>), never by inferring a URL from a filesystem path, directory layout, or slug. A slug remains an internal content lookup key; the public URL is the resolved <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span>.</p>\n<p>Keep HonoX, Vite, Cloudflare, and route APIs in this package or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span>; Core remains portable. A plugin can expose assets, client entries, endpoints, and renderers, but Core does not become a HonoX router. The application decides concrete route composition and islands.</p>\n<p>Use <a href=\"/en/docs/framework/build-system\">Build system</a> for state behavior and <a href=\"/en/docs/framework/architecture\">Architecture</a> for package ownership.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"HonoX Integration @riebeckite/honox connects portable Core behavior to HonoX and Vite. It owns application-root/config resolution, Vite development and build in","tags":[]},{"id":"https://riebeckite.dev/docs/framework/honox-integration","url":"https://riebeckite.dev/docs/framework/honox-integration","title":"honox-integration","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"honox-integration\">HonoX Integration</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> は、Riebeckite Core と HonoX / Vite を接続する integration です。</p>\n<p>Core はコンテンツやプラグインの処理を担当しますが、HonoX の route や Vite の build 方法については知りません。</p>\n<p>その間を接続するのが <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> です。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-pj3qrx\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 705.96875px;\" viewBox=\"0 0 705.96875 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-pj3qrx{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-pj3qrx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-pj3qrx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-pj3qrx .error-icon{fill:#552222;}#rr-mermaid-pj3qrx .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-pj3qrx .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-pj3qrx .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-pj3qrx .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-pj3qrx .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-pj3qrx .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-pj3qrx .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-pj3qrx .marker{fill:#333333;stroke:#333333;}#rr-mermaid-pj3qrx .marker.cross{stroke:#333333;}#rr-mermaid-pj3qrx svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-pj3qrx p{margin:0;}#rr-mermaid-pj3qrx .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-pj3qrx .cluster-label text{fill:#333;}#rr-mermaid-pj3qrx .cluster-label span{color:#333;}#rr-mermaid-pj3qrx .cluster-label span p{background-color:transparent;}#rr-mermaid-pj3qrx .label text,#rr-mermaid-pj3qrx span{fill:#333;color:#333;}#rr-mermaid-pj3qrx .node rect,#rr-mermaid-pj3qrx .node circle,#rr-mermaid-pj3qrx .node ellipse,#rr-mermaid-pj3qrx .node polygon,#rr-mermaid-pj3qrx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-pj3qrx .rough-node .label text,#rr-mermaid-pj3qrx .node .label text,#rr-mermaid-pj3qrx .image-shape .label,#rr-mermaid-pj3qrx .icon-shape .label{text-anchor:middle;}#rr-mermaid-pj3qrx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-pj3qrx .rough-node .label,#rr-mermaid-pj3qrx .node .label,#rr-mermaid-pj3qrx .image-shape .label,#rr-mermaid-pj3qrx .icon-shape .label{text-align:center;}#rr-mermaid-pj3qrx .node.clickable{cursor:pointer;}#rr-mermaid-pj3qrx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-pj3qrx .arrowheadPath{fill:#333333;}#rr-mermaid-pj3qrx .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-pj3qrx .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-pj3qrx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-pj3qrx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-pj3qrx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-pj3qrx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-pj3qrx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-pj3qrx .cluster text{fill:#333;}#rr-mermaid-pj3qrx .cluster span{color:#333;}#rr-mermaid-pj3qrx .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-pj3qrx .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-pj3qrx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-pj3qrx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-pj3qrx rect.text{fill:none;stroke-width:0;}#rr-mermaid-pj3qrx .icon-shape,#rr-mermaid-pj3qrx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-pj3qrx .icon-shape p,#rr-mermaid-pj3qrx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-pj3qrx .icon-shape .label rect,#rr-mermaid-pj3qrx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-pj3qrx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-pj3qrx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-pj3qrx .node .neo-node{stroke:#9370DB;}#rr-mermaid-pj3qrx [data-look=\"neo\"].node rect,#rr-mermaid-pj3qrx [data-look=\"neo\"].cluster rect,#rr-mermaid-pj3qrx [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pj3qrx [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-pj3qrx [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-pj3qrx [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pj3qrx [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-pj3qrx [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pj3qrx [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-pj3qrx [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pj3qrx [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pj3qrx :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-pj3qrx_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M255.656,47L259.823,47C263.99,47,272.323,47,279.99,47C287.656,47,294.656,47,298.156,47L301.656,47\" id=\"rr-mermaid-pj3qrx-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjU1LjY1NjI1LCJ5Ijo0N30seyJ4IjoyODAuNjU2MjUsInkiOjQ3fSx7IngiOjMwNS42NTYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pj3qrx_flowchart-v2-pointEnd)\"></path><path d=\"M498.422,47L502.589,47C506.755,47,515.089,47,522.755,47C530.422,47,537.422,47,540.922,47L544.422,47\" id=\"rr-mermaid-pj3qrx-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDk4LjQyMTg3NSwieSI6NDd9LHsieCI6NTIzLjQyMTg3NSwieSI6NDd9LHsieCI6NTQ4LjQyMTg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pj3qrx_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-pj3qrx-flowchart-A-0\" data-look=\"classic\" transform=\"translate(131.828125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-123.828125\" y=\"-39\" width=\"247.65625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-93.828125, -24)\"><rect></rect><foreignObject width=\"187.65625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Core<br>Content / Plugin / Manifest</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pj3qrx-flowchart-B-1\" data-look=\"classic\" transform=\"translate(402.0390625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.3828125\" y=\"-39\" width=\"192.765625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.3828125, -24)\"><rect></rect><foreignObject width=\"132.765625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>@riebeckite/honox<br>Integration</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pj3qrx-flowchart-C-2\" data-look=\"classic\" transform=\"translate(623.1953125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.7734375\" y=\"-39\" width=\"149.546875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.7734375, -24)\"><rect></rect><foreignObject width=\"89.546875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>HonoX / Vite<br>Application</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-pj3qrx-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-pj3qrx-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Riebeckite Core&#x3C;br/>Content / Plugin / Manifest\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"@riebeckite/honox&#x3C;br/>Integration\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"HonoX / Vite&#x3C;br/>Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    A --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    B --> C</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>主に次の処理を担当します。</p>\n<ul>\n  <li>application root / config の解決</li>\n  <li>Vite の development / build</li>\n  <li>SSG の設定</li>\n  <li>plugin / theme の style entry 生成</li>\n  <li>client entry の生成</li>\n  <li>Riebeckite のコンテンツと HonoX application の接続</li>\n</ul>\n<p>これにより、通常の Site は Riebeckite 内部の Vite / HonoX 設定を毎回組み立てる必要がありません。</p>\n<h2 id=\"基本的な使い方\">基本的な使い方</h2>\n<p>通常は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>vite.config.ts</span></span></code></span> で <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite()</span></span></code></span> を登録します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { riebeckiteVite } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { defineConfig } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"vite\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> defineConfig</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  plugins: [</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">honox</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">...</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }), </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">...</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckiteVite</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(), </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">build</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">()],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite()</span></span></code></span> は通常の Site 向けの higher-level helper です。</p>\n<p>Riebeckite の Vite plugin を追加するだけでなく、次の設定もまとめて行います。</p>\n<ul>\n  <li>SSG entry の設定</li>\n  <li>extension mapping</li>\n  <li>SSR に必要な external dependency の設定</li>\n  <li>plugin / theme の生成 entry の接続</li>\n</ul>\n<p>HonoX plugin、deployment 用 build plugin、Tailwind など、Site 自身が必要とする Vite plugin と組み合わせて利用できます。</p>\n<h2 id=\"root-と-config\">Root と Config</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite()</span></span></code></span> では、必要に応じて次の場所を指定できます。</p>\n<table>\n  <thead>\n    <tr>\n      <th>Option</th>\n      <th>意味</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span></td>\n      <td>Site application の基準ディレクトリ</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span></td>\n      <td>Riebeckite config を探す基準</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configFile</span></span></code></span></td>\n      <td>使用する config file</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>workspaceRoot</span></span></code></span></td>\n      <td>monorepo 開発時の workspace root</td>\n    </tr>\n  </tbody>\n</table>\n<p>通常は指定する必要はありません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span> の既定値は Vite root、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span> の既定値は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span> です。</p>\n<p>Riebeckite config は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>configRoot</span></span></code></span> を基準に読み込みます。</p>\n<p>一方、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">content</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  directory</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"./content\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>のような content directory は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>appRoot</span></span></code></span> を基準に解決します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxApplication()</span></span></code></span> は、これらの root と解決済み config をまとめて返します。</p>\n<p>CLI と Vite がこの共通モデルを利用することで、それぞれが異なる方法で application を解決しないようにしています。</p>\n<h3 id=\"workspaceroot\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>workspaceRoot</span></span></code></span></h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>workspaceRoot</span></span></code></span> は、Riebeckite 自体を monorepo で開発するときに source package alias を利用するための設定です。</p>\n<p>npm から Riebeckite をインストールした通常の Site では必要ありません。</p>\n<p>その場合は Site 自身の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>node_modules</span></span></code></span> から package が解決されます。</p>\n<h2 id=\"riebeckite-に生成されるファイル\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> に生成されるファイル</h2>\n<p>Integration は application 内の</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>app/.riebeckite/</span></span></code></pre>\n  </div>\n</figure>\n<p>へ、plugin や theme を接続するためのファイルを生成します。</p>\n<p>たとえば plugin style や theme style です。client module は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> には生成されず、virtual module として提供されます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-awoc4c\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1068.578125px;\" viewBox=\"0 0 1068.578125 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-awoc4c{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-awoc4c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-awoc4c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-awoc4c .error-icon{fill:#552222;}#rr-mermaid-awoc4c .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-awoc4c .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-awoc4c .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-awoc4c .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-awoc4c .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-awoc4c .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-awoc4c .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-awoc4c .marker{fill:#333333;stroke:#333333;}#rr-mermaid-awoc4c .marker.cross{stroke:#333333;}#rr-mermaid-awoc4c svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-awoc4c p{margin:0;}#rr-mermaid-awoc4c .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-awoc4c .cluster-label text{fill:#333;}#rr-mermaid-awoc4c .cluster-label span{color:#333;}#rr-mermaid-awoc4c .cluster-label span p{background-color:transparent;}#rr-mermaid-awoc4c .label text,#rr-mermaid-awoc4c span{fill:#333;color:#333;}#rr-mermaid-awoc4c .node rect,#rr-mermaid-awoc4c .node circle,#rr-mermaid-awoc4c .node ellipse,#rr-mermaid-awoc4c .node polygon,#rr-mermaid-awoc4c .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-awoc4c .rough-node .label text,#rr-mermaid-awoc4c .node .label text,#rr-mermaid-awoc4c .image-shape .label,#rr-mermaid-awoc4c .icon-shape .label{text-anchor:middle;}#rr-mermaid-awoc4c .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-awoc4c .rough-node .label,#rr-mermaid-awoc4c .node .label,#rr-mermaid-awoc4c .image-shape .label,#rr-mermaid-awoc4c .icon-shape .label{text-align:center;}#rr-mermaid-awoc4c .node.clickable{cursor:pointer;}#rr-mermaid-awoc4c .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-awoc4c .arrowheadPath{fill:#333333;}#rr-mermaid-awoc4c .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-awoc4c .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-awoc4c .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-awoc4c .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-awoc4c .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-awoc4c .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-awoc4c .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-awoc4c .cluster text{fill:#333;}#rr-mermaid-awoc4c .cluster span{color:#333;}#rr-mermaid-awoc4c .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-awoc4c .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-awoc4c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-awoc4c .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-awoc4c rect.text{fill:none;stroke-width:0;}#rr-mermaid-awoc4c .icon-shape,#rr-mermaid-awoc4c .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-awoc4c .icon-shape p,#rr-mermaid-awoc4c .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-awoc4c .icon-shape .label rect,#rr-mermaid-awoc4c .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-awoc4c .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-awoc4c .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-awoc4c .node .neo-node{stroke:#9370DB;}#rr-mermaid-awoc4c [data-look=\"neo\"].node rect,#rr-mermaid-awoc4c [data-look=\"neo\"].cluster rect,#rr-mermaid-awoc4c [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-awoc4c [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-awoc4c [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-awoc4c [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-awoc4c [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-awoc4c [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-awoc4c [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-awoc4c [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-awoc4c [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-awoc4c :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-awoc4c_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-awoc4c_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M255.359,35L259.526,35C263.693,35,272.026,35,279.693,35C287.359,35,294.359,35,297.859,35L301.359,35\" id=\"rr-mermaid-awoc4c-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjU1LjM1OTM3NSwieSI6MzV9LHsieCI6MjgwLjM1OTM3NSwieSI6MzV9LHsieCI6MzA1LjM1OTM3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-awoc4c_flowchart-v2-pointEnd)\"></path><path d=\"M498.125,35L512.669,35C527.214,35,556.302,35,584.724,35C613.146,35,640.901,35,654.779,35L668.656,35\" id=\"rr-mermaid-awoc4c-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDk4LjEyNSwieSI6MzV9LHsieCI6NTg1LjM5MDYyNSwieSI6MzV9LHsieCI6NjcyLjY1NjI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-awoc4c_flowchart-v2-pointEnd)\"></path><path d=\"M841.172,35L845.339,35C849.505,35,857.839,35,865.505,35C873.172,35,880.172,35,883.672,35L887.172,35\" id=\"rr-mermaid-awoc4c-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6ODQxLjE3MTg3NSwieSI6MzV9LHsieCI6ODY2LjE3MTg3NSwieSI6MzV9LHsieCI6ODkxLjE3MTg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-awoc4c_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(585.390625, 35)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-62.265625, -12)\"><foreignObject width=\"124.53125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>generated entries</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-awoc4c-flowchart-A-0\" data-look=\"classic\" transform=\"translate(131.6796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-123.6796875\" y=\"-27\" width=\"247.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-93.6796875, -12)\"><rect></rect><foreignObject width=\"187.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Installed Plugins / Themes</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-awoc4c-flowchart-B-1\" data-look=\"classic\" transform=\"translate(401.7421875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.3828125\" y=\"-27\" width=\"192.765625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.3828125, -12)\"><rect></rect><foreignObject width=\"132.765625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>@riebeckite/honox</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-awoc4c-flowchart-C-2\" data-look=\"classic\" transform=\"translate(756.9140625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.2578125\" y=\"-27\" width=\"168.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.2578125, -12)\"><rect></rect><foreignObject width=\"108.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>app/.riebeckite/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-awoc4c-flowchart-D-3\" data-look=\"classic\" transform=\"translate(975.875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.703125\" y=\"-27\" width=\"169.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Application</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-awoc4c-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-awoc4c-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Installed Plugins / Themes\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"@riebeckite/honox\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"app/.riebeckite/\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    D[\"Site Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    A --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    B -->|\"generated entries\"| C</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    C --> D</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> は integration が管理する生成物です。</p>\n<p><strong>Site の source code として直接編集しないでください。</strong></p>\n<h2 id=\"bootstrap-module\">Bootstrap module</h2>\n<p>generated Site は Framework 所有の bootstrap module を import します。解決済み config は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>virtual:riebeckite/config</span></span></code></span>、構成済みの content runtime は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>virtual:riebeckite/content</span></span></code></span> です。そのため <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/config.ts</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/content.ts</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/constants/paths.ts</span></span></code></span> は生成されません。SSG entry の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/server.ts</span></span></code></span> はこの2つを re-export し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span> はそこから manifest を見つけます。</p>\n<p>Vite の外で動く script（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tsx</span></span></code></span> で起動する Node script など）は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/runtime</span></span></code></span> の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveHonoxConfig</span></span></code></span> で同じ config を解決できます。</p>\n<h2 id=\"lower-level-api\">Lower-level API</h2>\n<p>より細かく integration を制御したい場合は、lower-level API も利用できます。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsg</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteSsgExtensionMap</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>createRiebeckiteSsg</span></span></code></span></li>\n</ul>\n<p>通常の Site では <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckiteVite()</span></span></code></span> を利用し、独自の build integration が必要な場合のみ lower-level API を利用してください。</p>\n<h2 id=\"routing-と-ssg\">Routing と SSG</h2>\n<p>HonoX の runtime routing と静的生成では、同じ URL が同じページとして扱われる必要があります。</p>\n<p>特に catch-all route がある場合、SSG の route 列挙に注意が必要です。</p>\n<p>Riebeckite はこのために2つの helper を提供します。</p>\n<h3 id=\"contentroutessgparams\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>contentRouteSsgParams</span></span></code></span></h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">contentRouteSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(routePath, params)</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hono/ssg</span></span></code></span> の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ssgParams</span></span></code></span> の代わりとして使用します。</p>\n<p>この helper は、その route 自身に属する params だけを返します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/:slug{.+}</span></span></code></pre>\n  </div>\n</figure>\n<p>という catch-all route があっても、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/tags/:slug{.+}</span></span></code></pre>\n  </div>\n</figure>\n<p>に属するページまで横取りしません。</p>\n<h3 id=\"ssgenumerablehandler\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ssgEnumerableHandler</span></span></code></span></h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">ssgEnumerableHandler</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(handler)</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>next()</span></span></code></span> を使って sibling route に処理を渡す handler を、SSG の列挙対象として残すための helper です。</p>\n<p>Hono は middleware 形式の handler を通常 SSG の列挙対象から外すため、この差を補います。</p>\n<h2 id=\"plugin-page\">Plugin Page</h2>\n<p>Plugin は通常の content とは別に、独自のページを提供できます。</p>\n<p>その場合は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">resolveContentRoute</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(manifest, path)</span></span></code></pre>\n  </div>\n</figure>\n<p>ではなく、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">resolveRiebeckiteRoute</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(content, path)</span></span></code></pre>\n  </div>\n</figure>\n<p>を使用します。</p>\n<p>SSG params には、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">pluginPageSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(content)</span></span></code></pre>\n  </div>\n</figure>\n<p>を追加します。</p>\n<p>生成された Site の catch-all route は、これらをまとめた <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest(c, content)</span></span></code></span> を使用します。この helper が content / Plugin Page / redirect / not-found を解決し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>htmlLanguage</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> を context へ設定するため、Site は返された結果を自身の composition に渡すだけで済みます。root <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span> も同じ mechanics を共有する <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest(c, content)</span></span></code></span> で解決します。</p>\n<p>Route resolver は次の順序で URL を解決します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-4a76ss\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 512.33203125px;\" viewBox=\"0 0 512.33203125 786.609375\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-4a76ss{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-4a76ss .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-4a76ss .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-4a76ss .error-icon{fill:#552222;}#rr-mermaid-4a76ss .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-4a76ss .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-4a76ss .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-4a76ss .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-4a76ss .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-4a76ss .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-4a76ss .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-4a76ss .marker{fill:#333333;stroke:#333333;}#rr-mermaid-4a76ss .marker.cross{stroke:#333333;}#rr-mermaid-4a76ss svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-4a76ss p{margin:0;}#rr-mermaid-4a76ss .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-4a76ss .cluster-label text{fill:#333;}#rr-mermaid-4a76ss .cluster-label span{color:#333;}#rr-mermaid-4a76ss .cluster-label span p{background-color:transparent;}#rr-mermaid-4a76ss .label text,#rr-mermaid-4a76ss span{fill:#333;color:#333;}#rr-mermaid-4a76ss .node rect,#rr-mermaid-4a76ss .node circle,#rr-mermaid-4a76ss .node ellipse,#rr-mermaid-4a76ss .node polygon,#rr-mermaid-4a76ss .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-4a76ss .rough-node .label text,#rr-mermaid-4a76ss .node .label text,#rr-mermaid-4a76ss .image-shape .label,#rr-mermaid-4a76ss .icon-shape .label{text-anchor:middle;}#rr-mermaid-4a76ss .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-4a76ss .rough-node .label,#rr-mermaid-4a76ss .node .label,#rr-mermaid-4a76ss .image-shape .label,#rr-mermaid-4a76ss .icon-shape .label{text-align:center;}#rr-mermaid-4a76ss .node.clickable{cursor:pointer;}#rr-mermaid-4a76ss .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-4a76ss .arrowheadPath{fill:#333333;}#rr-mermaid-4a76ss .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-4a76ss .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-4a76ss .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-4a76ss .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-4a76ss .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-4a76ss .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-4a76ss .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-4a76ss .cluster text{fill:#333;}#rr-mermaid-4a76ss .cluster span{color:#333;}#rr-mermaid-4a76ss .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-4a76ss .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-4a76ss div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-4a76ss .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-4a76ss rect.text{fill:none;stroke-width:0;}#rr-mermaid-4a76ss .icon-shape,#rr-mermaid-4a76ss .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-4a76ss .icon-shape p,#rr-mermaid-4a76ss .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-4a76ss .icon-shape .label rect,#rr-mermaid-4a76ss .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-4a76ss .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-4a76ss .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-4a76ss .node .neo-node{stroke:#9370DB;}#rr-mermaid-4a76ss [data-look=\"neo\"].node rect,#rr-mermaid-4a76ss [data-look=\"neo\"].cluster rect,#rr-mermaid-4a76ss [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4a76ss [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-4a76ss [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-4a76ss [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4a76ss [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-4a76ss [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4a76ss [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-4a76ss [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4a76ss [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-4a76ss :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-4a76ss_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-4a76ss_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M172.457,62L172.457,66.167C172.457,70.333,172.457,78.667,172.457,86.333C172.457,94,172.457,101,172.457,104.5L172.457,108\" id=\"rr-mermaid-4a76ss-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTcyLjQ1NzAzMTI1LCJ5Ijo2Mn0seyJ4IjoxNzIuNDU3MDMxMjUsInkiOjg3fSx7IngiOjE3Mi40NTcwMzEyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M138.889,227.619L129.265,239.381C119.642,251.142,100.395,274.665,90.772,297.338C81.148,320.01,81.148,341.833,81.148,352.745L81.148,363.656\" id=\"rr-mermaid-4a76ss-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4Ljg4ODkxMDMwNDkyNTYsInkiOjIyNy42MTkzNzkwNTQ5MjU2fSx7IngiOjgxLjE0ODQzNzUsInkiOjI5OC4xODc1fSx7IngiOjgxLjE0ODQzNzUsInkiOjM2Ny42NTYyNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M206.025,227.619L215.649,239.381C225.272,251.142,244.519,274.665,254.142,291.926C263.766,309.188,263.766,320.188,263.766,325.688L263.766,331.188\" id=\"rr-mermaid-4a76ss-L_B_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6MjA2LjAyNTE1MjE5NTA3NDQsInkiOjIyNy42MTkzNzkwNTQ5MjU2fSx7IngiOjI2My43NjU2MjUsInkiOjI5OC4xODc1fSx7IngiOjI2My43NjU2MjUsInkiOjMzNS4xODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M235.975,426.334L226.501,437.132C217.027,447.931,198.08,469.528,188.606,491.534C179.133,513.539,179.133,535.953,179.133,547.16L179.133,558.367\" id=\"rr-mermaid-4a76ss-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MjM1Ljk3NDU0NzQ0NzI2Mjg0LCJ5Ijo0MjYuMzMzOTIyNDQ3MjYyODZ9LHsieCI6MTc5LjEzMjgxMjUsInkiOjQ5MS4xMjV9LHsieCI6MTc5LjEzMjgxMjUsInkiOjU2Mi4zNjcxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M291.557,426.334L301.03,437.132C310.504,447.931,329.451,469.528,338.925,485.826C348.398,502.125,348.398,513.125,348.398,518.625L348.398,524.125\" id=\"rr-mermaid-4a76ss-L_D_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6MjkxLjU1NjcwMjU1MjczNzE0LCJ5Ijo0MjYuMzMzOTIyNDQ3MjYyODZ9LHsieCI6MzQ4LjM5ODQzNzUsInkiOjQ5MS4xMjV9LHsieCI6MzQ4LjM5ODQzNzUsInkiOjUyOC4xMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M319.362,621.573L309.439,632.579C299.516,643.585,279.67,665.597,269.747,682.103C259.824,698.609,259.824,709.609,259.824,715.109L259.824,720.609\" id=\"rr-mermaid-4a76ss-L_F_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6MzE5LjM2MjAyMTM2Njk2MjksInkiOjYyMS41NzI5NTg4NjY5NjI4fSx7IngiOjI1OS44MjQyMTg3NSwieSI6Njg3LjYwOTM3NX0seyJ4IjoyNTkuODI0MjE4NzUsInkiOjcyNC42MDkzNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path><path d=\"M377.435,621.573L387.358,632.579C397.281,643.585,417.127,665.597,427.05,682.103C436.973,698.609,436.973,709.609,436.973,715.109L436.973,720.609\" id=\"rr-mermaid-4a76ss-L_F_H_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_H_0\" data-points=\"W3sieCI6Mzc3LjQzNDg1MzYzMzAzNzEsInkiOjYyMS41NzI5NTg4NjY5NjI4fSx7IngiOjQzNi45NzI2NTYyNSwieSI6Njg3LjYwOTM3NX0seyJ4Ijo0MzYuOTcyNjU2MjUsInkiOjcyNC42MDkzNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-4a76ss_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(81.1484375, 298.1875)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(263.765625, 298.1875)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(179.1328125, 491.125)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(348.3984375, 491.125)\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(259.82421875, 687.609375)\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(436.97265625, 687.609375)\"><g class=\"label\" data-id=\"L_F_H_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-A-0\" data-look=\"classic\" transform=\"translate(172.45703125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-78.4765625\" y=\"-27\" width=\"156.953125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48.4765625, -12)\"><rect></rect><foreignObject width=\"96.953125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Request Path</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-B-1\" data-look=\"classic\" transform=\"translate(172.45703125, 186.59375)\"><polygon points=\"74.59375,0 149.1875,-74.59375 74.59375,-149.1875 0,-74.59375\" class=\"label-container\" transform=\"translate(-74.09375, 74.59375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-47.59375, -12)\"><rect></rect><foreignObject width=\"95.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page?</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-C-2\" data-look=\"classic\" transform=\"translate(81.1484375, 394.65625)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1484375\" y=\"-27\" width=\"146.296875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1484375, -12)\"><rect></rect><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-D-3\" data-look=\"classic\" transform=\"translate(263.765625, 394.65625)\"><polygon points=\"59.46875,0 118.9375,-59.46875 59.46875,-118.9375 0,-59.46875\" class=\"label-container\" transform=\"translate(-58.96875, 59.46875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-32.46875, -12)\"><rect></rect><foreignObject width=\"64.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content?</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-E-4\" data-look=\"classic\" transform=\"translate(179.1328125, 589.3671875)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0234375\" y=\"-27\" width=\"116.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0234375, -12)\"><rect></rect><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-F-5\" data-look=\"classic\" transform=\"translate(348.3984375, 589.3671875)\"><polygon points=\"61.2421875,0 122.484375,-61.2421875 61.2421875,-122.484375 0,-61.2421875\" class=\"label-container\" transform=\"translate(-60.7421875, 61.2421875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-34.2421875, -12)\"><rect></rect><foreignObject width=\"68.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Redirect?</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-G-6\" data-look=\"classic\" transform=\"translate(259.82421875, 751.609375)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.7890625\" y=\"-27\" width=\"119.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.7890625, -12)\"><rect></rect><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Redirect</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-4a76ss-flowchart-H-7\" data-look=\"classic\" transform=\"translate(436.97265625, 751.609375)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.359375\" y=\"-27\" width=\"134.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.359375, -12)\"><rect></rect><foreignObject width=\"74.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Not Found</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-4a76ss-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-4a76ss-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Request Path\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B{\"Plugin Page?\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"Plugin Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    D{\"Content?\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    E[\"Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    F{\"Redirect?\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    G[\"Redirect\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    H[\"Not Found\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    A --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    B -->|Yes| C</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    B -->|No| D</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    D -->|Yes| E</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span>    D -->|No| F</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>    F -->|Yes| G</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span>    F -->|No| H</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin Page の body は意図的に文字列として扱います。</p>\n<p>Site が持つ既存の document frame 内へ描画し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>page.headTags</span></span></code></span> も Site の frame へ渡します。</p>\n<p>この仕組みにより、Plugin が独自ページを提供するためだけに HonoX の route file を追加する必要はありません。</p>\n<h1 id=\"ui-primitive\">UI Primitive</h1>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> は UI framework ではありません。</p>\n<p>Site が独自のデザインを作りながら、Riebeckite と共通の HTML 構造を利用するための小さな primitive set です。</p>\n<p>公開されている主な component は次のとおりです。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Article</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleLayout</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleHeader</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PageBody</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleMeta</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleFooter</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Sidebar</span></span></code></span></li>\n</ul>\n<p>対応する <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>*Props</span></span></code></span> 型も公開されています。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> には <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>hasSlot(slots, name)</span></span></code></span> という純粋 helper が対応し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ARTICLE_SLOT</span></span></code></span> 定数が標準 slot 名を提供します。</p>\n<h2 id=\"stable-styling-hooks\">Stable Styling Hooks</h2>\n<p>各 primitive は次の class を stable styling hook として提供します。</p>\n<table>\n  <thead>\n    <tr>\n      <th>Component</th>\n      <th>Class</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Article</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleLayout</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-layout</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleHeader</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-header</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-body</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-content</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleMeta</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-meta</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleFooter</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-article-footer</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Sidebar</span></span></code></span></td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-sidebar</span></span></code></span></td>\n    </tr>\n  </tbody>\n</table>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span> はレンダリング済み Markdown 本文を <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.rb-article-content</span></span></code></span> として描画し、Markdown typography はこの wrapper にのみ適用されます。plugin component の見出しは plugin 自身が所有します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slots</span></span></code></span> map から slot 名で HTML fragment を取り出し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-slot</span></span></code></span> を付けて描画します。存在しない slot、空文字、whitespace のみの slot は何も描画しません。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>class</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>className</span></span></code></span> で Site 固有 class を追加できます。slot 名から semantic 要素を推測するような暗黙の mapping は行いません。</p>\n<p>Primitive が担当するのは主に、</p>\n<ul>\n  <li>semantic HTML</li>\n  <li>stable styling hook</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>class</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>className</span></span></code></span> の合成</li>\n  <li>hook を成立させる構造 CSS</li>\n</ul>\n<p>です。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-*</span></span></code></span> hook を成立させる構造 CSS は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/style.css</span></span></code></span> にあり、生成された <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite/framework-styles.css</span></span></code></span> 経由で Site に読み込まれます。</p>\n<p>一方、</p>\n<ul>\n  <li>記事本文の見た目</li>\n  <li>metadata の表示形式</li>\n  <li>navigation の配置</li>\n  <li>card</li>\n  <li>page layout の composition</li>\n  <li>island</li>\n  <li>Site 固有の visual design と override</li>\n</ul>\n<p>は Site Application が管理します。</p>\n<h2 id=\"使用例\">使用例</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  Article,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleBody,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleContent,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleLayout,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ContentSlot,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.aside\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article__aside\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.metadata\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>;</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleHeader</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent</span></span></code></span> は、children と HTML input prop のどちらか一方だけを受け取ります。レンダリング済み Markdown 本文は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleBody</span></span></code></span> に渡してください。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ArticleContent html={...}</span></span></code></span> は後方互換のために残っていますが非推奨です。</p>\n<p>Primitive は composition point として使用し、構造は Framework の hook CSS が、見た目は Site 側が定義してください。</p>\n<p>また、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>@riebeckite/honox/src/</span></span></code></pre>\n  </div>\n</figure>\n<p>以下を直接 import しないでください。</p>\n<p>公開 API として記載されていない内部 component に依存することも避けてください。</p>\n<h1 id=\"site-application-の責務\">Site Application の責務</h1>\n<p>Riebeckite Site は、最終的には通常の HonoX application です。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> は content と build を接続しますが、実際にユーザーが見る UI の設計は Site が管理します。通常の HonoX で編集する手順は <a href=\"/docs/guides/customizing-your-site\">サイトのカスタマイズ</a> を参照してください。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-nxafm8\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 890.734375px;\" viewBox=\"0 0 890.734375 454\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-nxafm8{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-nxafm8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-nxafm8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-nxafm8 .error-icon{fill:#552222;}#rr-mermaid-nxafm8 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-nxafm8 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-nxafm8 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-nxafm8 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-nxafm8 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-nxafm8 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-nxafm8 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-nxafm8 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-nxafm8 .marker.cross{stroke:#333333;}#rr-mermaid-nxafm8 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-nxafm8 p{margin:0;}#rr-mermaid-nxafm8 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-nxafm8 .cluster-label text{fill:#333;}#rr-mermaid-nxafm8 .cluster-label span{color:#333;}#rr-mermaid-nxafm8 .cluster-label span p{background-color:transparent;}#rr-mermaid-nxafm8 .label text,#rr-mermaid-nxafm8 span{fill:#333;color:#333;}#rr-mermaid-nxafm8 .node rect,#rr-mermaid-nxafm8 .node circle,#rr-mermaid-nxafm8 .node ellipse,#rr-mermaid-nxafm8 .node polygon,#rr-mermaid-nxafm8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-nxafm8 .rough-node .label text,#rr-mermaid-nxafm8 .node .label text,#rr-mermaid-nxafm8 .image-shape .label,#rr-mermaid-nxafm8 .icon-shape .label{text-anchor:middle;}#rr-mermaid-nxafm8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-nxafm8 .rough-node .label,#rr-mermaid-nxafm8 .node .label,#rr-mermaid-nxafm8 .image-shape .label,#rr-mermaid-nxafm8 .icon-shape .label{text-align:center;}#rr-mermaid-nxafm8 .node.clickable{cursor:pointer;}#rr-mermaid-nxafm8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-nxafm8 .arrowheadPath{fill:#333333;}#rr-mermaid-nxafm8 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-nxafm8 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-nxafm8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-nxafm8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-nxafm8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-nxafm8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-nxafm8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-nxafm8 .cluster text{fill:#333;}#rr-mermaid-nxafm8 .cluster span{color:#333;}#rr-mermaid-nxafm8 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-nxafm8 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-nxafm8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-nxafm8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-nxafm8 rect.text{fill:none;stroke-width:0;}#rr-mermaid-nxafm8 .icon-shape,#rr-mermaid-nxafm8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-nxafm8 .icon-shape p,#rr-mermaid-nxafm8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-nxafm8 .icon-shape .label rect,#rr-mermaid-nxafm8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-nxafm8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-nxafm8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-nxafm8 .node .neo-node{stroke:#9370DB;}#rr-mermaid-nxafm8 [data-look=\"neo\"].node rect,#rr-mermaid-nxafm8 [data-look=\"neo\"].cluster rect,#rr-mermaid-nxafm8 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nxafm8 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-nxafm8 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-nxafm8 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nxafm8 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-nxafm8 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nxafm8 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-nxafm8 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nxafm8 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nxafm8 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-nxafm8_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-nxafm8_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M404.098,303.044L357.262,309.703C310.427,316.362,216.757,329.681,169.921,339.841C123.086,350,123.086,357,123.086,360.5L123.086,364\" id=\"rr-mermaid-nxafm8-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6NDA0LjA5NzY1NjI1LCJ5IjozMDMuMDQzNzA3MjA4Njk4N30seyJ4IjoxMjMuMDg1OTM3NSwieSI6MzQzfSx7IngiOjEyMy4wODU5Mzc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path><path d=\"M432.073,318L423.318,322.167C414.564,326.333,397.056,334.667,388.301,342.333C379.547,350,379.547,357,379.547,360.5L379.547,364\" id=\"rr-mermaid-nxafm8-L_C_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6NDMyLjA3Mjc5MTQ2NjM0NjEzLCJ5IjozMTh9LHsieCI6Mzc5LjU0Njg3NSwieSI6MzQzfSx7IngiOjM3OS41NDY4NzUsInkiOjM2OH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path><path d=\"M545.529,318L554.283,322.167C563.037,326.333,580.546,334.667,589.3,342.333C598.055,350,598.055,357,598.055,360.5L598.055,364\" id=\"rr-mermaid-nxafm8-L_C_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_F_0\" data-points=\"W3sieCI6NTQ1LjUyODc3MTAzMzY1MzgsInkiOjMxOH0seyJ4Ijo1OTguMDU0Njg3NSwieSI6MzQzfSx7IngiOjU5OC4wNTQ2ODc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path><path d=\"M573.504,304.976L611.913,311.313C650.323,317.65,727.142,330.325,765.551,340.163C803.961,350,803.961,357,803.961,360.5L803.961,364\" id=\"rr-mermaid-nxafm8-L_C_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_G_0\" data-points=\"W3sieCI6NTczLjUwMzkwNjI1LCJ5IjozMDQuOTc1NjMyNDI4OTQ4Nn0seyJ4Ijo4MDMuOTYwOTM3NSwieSI6MzQzfSx7IngiOjgwMy45NjA5Mzc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path><path d=\"M488.801,86L488.801,90.167C488.801,94.333,488.801,102.667,488.801,110.333C488.801,118,488.801,125,488.801,128.5L488.801,132\" id=\"rr-mermaid-nxafm8-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6NDg4LjgwMDc4MTI1LCJ5Ijo4Nn0seyJ4Ijo0ODguODAwNzgxMjUsInkiOjExMX0seyJ4Ijo0ODguODAwNzgxMjUsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path><path d=\"M488.801,214L488.801,218.167C488.801,222.333,488.801,230.667,488.801,238.333C488.801,246,488.801,253,488.801,256.5L488.801,260\" id=\"rr-mermaid-nxafm8-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDg4LjgwMDc4MTI1LCJ5IjoyMTR9LHsieCI6NDg4LjgwMDc4MTI1LCJ5IjoyMzl9LHsieCI6NDg4LjgwMDc4MTI1LCJ5IjoyNjR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nxafm8_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-A-0\" data-look=\"classic\" transform=\"translate(488.80078125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-121.1640625\" y=\"-39\" width=\"242.328125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-91.1640625, -24)\"><rect></rect><foreignObject width=\"182.328125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Core<br>content / manifest / plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-B-1\" data-look=\"classic\" transform=\"translate(488.80078125, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-117.6171875\" y=\"-39\" width=\"235.234375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-87.6171875, -24)\"><rect></rect><foreignObject width=\"175.234375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>@riebeckite/honox<br>build / routing integration</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-C-2\" data-look=\"classic\" transform=\"translate(488.80078125, 291)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.703125\" y=\"-27\" width=\"169.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-D-4\" data-look=\"classic\" transform=\"translate(123.0859375, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-115.0859375\" y=\"-39\" width=\"230.171875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-85.0859375, -24)\"><rect></rect><foreignObject width=\"170.171875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>app/routes/<br>URL / page composition</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-E-6\" data-look=\"classic\" transform=\"translate(379.546875, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.375\" y=\"-39\" width=\"182.75\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.375, -24)\"><rect></rect><foreignObject width=\"122.75\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>app/components/<br>Site UI</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-F-8\" data-look=\"classic\" transform=\"translate(598.0546875, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.1328125\" y=\"-39\" width=\"154.265625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.1328125, -24)\"><rect></rect><foreignObject width=\"94.265625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>app/islands/<br>Interactive UI</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nxafm8-flowchart-G-10\" data-look=\"classic\" transform=\"translate(803.9609375, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-78.7734375\" y=\"-39\" width=\"157.546875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48.7734375, -24)\"><rect></rect><foreignObject width=\"97.546875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>app/style.css<br>Visual Design</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-nxafm8-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-nxafm8-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Riebeckite Core&#x3C;br/>content / manifest / plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"@riebeckite/honox&#x3C;br/>build / routing integration\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"Site Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    C --> D[\"app/routes/&#x3C;br/>URL / page composition\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    C --> E[\"app/components/&#x3C;br/>Site UI\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    C --> F[\"app/islands/&#x3C;br/>Interactive UI\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    C --> G[\"app/style.css&#x3C;br/>Visual Design\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    A --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    B --> C</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>主なディレクトリの責務は次のとおりです。</p>\n<table>\n  <thead>\n    <tr>\n      <th>ディレクトリ</th>\n      <th>Site が持つ責務</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/</span></span></code></span></td>\n      <td>URL処理、ページ構成、redirect、response metadata</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/components/</span></span></code></span></td>\n      <td>Site 固有の UI</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/islands/</span></span></code></span></td>\n      <td>対話 UI と client-side state</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/style.css</span></span></code></span></td>\n      <td>色、layout、typography、extension style</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"site-shell\">Site Shell</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>app/routes/_renderer.tsx</span></span></code></pre>\n  </div>\n</figure>\n<p>は Site 全体の shell です。</p>\n<p>ここでは主に、</p>\n<ul>\n  <li>document head</li>\n  <li>navigation</li>\n  <li>page chrome</li>\n  <li>application client entry</li>\n</ul>\n<p>などを管理します。</p>\n<p>Route は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span> からコンテンツを取得し、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">resolveRiebeckiteRoute</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(content, c.req.path)</span></span></code></pre>\n  </div>\n</figure>\n<p>で request URL を解決します。</p>\n<p>その結果をどの component tree で表示するかは Site が決定します。</p>\n<p>Riebeckite repository にある <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span> は実装例の1つであり、外部 Site が同じ layout を使う必要はありません。</p>\n<h2 id=\"not-found-と-error\">Not-found と Error</h2>\n<p>not-found の処理は HonoX 標準の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_404.tsx</span></span></code></span> です。Riebeckite が「見つからない」と判断し、HonoX がその response を Site の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>_renderer.tsx</span></span></code></span> を通して描画し直すため、status は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>404</span></span></code></span> のまま、not-found 画面の見た目は Site が所有します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// app/routes/_404.tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> type</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { NotFoundHandler } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"hono\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> handler</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> NotFoundHandler</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">status</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">404</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">main</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"not-found\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>Page not found&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">main</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">};</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> handler;</span></span></code></pre>\n  </div>\n</figure>\n<p>route resolver（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest</span></span></code></span>、Plugin Page の解決）と、asset-like な path を content route に入れない extension guard は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox</span></span></code></span> に残ります。Site がこれらを再実装することはありません。解決されるのは公開済みで routable な content だけなので、not-found response に draft・未来公開・非公開 content の metadata が載ることもありません。</p>\n<p>runtime error は Hono の error 処理を使います。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/routes/_error.tsx</span></span></code></span> が無ければ、標準の handler が error をログに記録し、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>500 Internal Server Error</span></span></code></span> を返します。visitor 向けの画面が必要な場合に限り、Site は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>_error.tsx</span></span></code></span>（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ErrorHandler</span></span></code></span>）を追加できます。config、plugin、build の失敗は開発者向けであり、成功したページに変換してはいけません。</p>\n<h1 id=\"plugin-と-site-の境界\">Plugin と Site の境界</h1>\n<p>Plugin は Site に情報や UI fragment を提供できます。</p>\n<p>ただし、<strong>最終的にどこへ描画するかは Site が決定します。</strong></p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-2fe23g\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1023.15625px;\" viewBox=\"0 0 1023.15625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-2fe23g{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-2fe23g .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-2fe23g .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-2fe23g .error-icon{fill:#552222;}#rr-mermaid-2fe23g .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-2fe23g .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-2fe23g .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-2fe23g .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-2fe23g .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-2fe23g .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-2fe23g .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-2fe23g .marker{fill:#333333;stroke:#333333;}#rr-mermaid-2fe23g .marker.cross{stroke:#333333;}#rr-mermaid-2fe23g svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-2fe23g p{margin:0;}#rr-mermaid-2fe23g .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-2fe23g .cluster-label text{fill:#333;}#rr-mermaid-2fe23g .cluster-label span{color:#333;}#rr-mermaid-2fe23g .cluster-label span p{background-color:transparent;}#rr-mermaid-2fe23g .label text,#rr-mermaid-2fe23g span{fill:#333;color:#333;}#rr-mermaid-2fe23g .node rect,#rr-mermaid-2fe23g .node circle,#rr-mermaid-2fe23g .node ellipse,#rr-mermaid-2fe23g .node polygon,#rr-mermaid-2fe23g .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2fe23g .rough-node .label text,#rr-mermaid-2fe23g .node .label text,#rr-mermaid-2fe23g .image-shape .label,#rr-mermaid-2fe23g .icon-shape .label{text-anchor:middle;}#rr-mermaid-2fe23g .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-2fe23g .rough-node .label,#rr-mermaid-2fe23g .node .label,#rr-mermaid-2fe23g .image-shape .label,#rr-mermaid-2fe23g .icon-shape .label{text-align:center;}#rr-mermaid-2fe23g .node.clickable{cursor:pointer;}#rr-mermaid-2fe23g .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-2fe23g .arrowheadPath{fill:#333333;}#rr-mermaid-2fe23g .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-2fe23g .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-2fe23g .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2fe23g .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-2fe23g .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2fe23g .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-2fe23g .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-2fe23g .cluster text{fill:#333;}#rr-mermaid-2fe23g .cluster span{color:#333;}#rr-mermaid-2fe23g .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-2fe23g .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-2fe23g div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-2fe23g .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-2fe23g rect.text{fill:none;stroke-width:0;}#rr-mermaid-2fe23g .icon-shape,#rr-mermaid-2fe23g .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2fe23g .icon-shape p,#rr-mermaid-2fe23g .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-2fe23g .icon-shape .label rect,#rr-mermaid-2fe23g .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2fe23g .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-2fe23g .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-2fe23g .node .neo-node{stroke:#9370DB;}#rr-mermaid-2fe23g [data-look=\"neo\"].node rect,#rr-mermaid-2fe23g [data-look=\"neo\"].cluster rect,#rr-mermaid-2fe23g [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2fe23g [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-2fe23g [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2fe23g [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2fe23g [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-2fe23g [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2fe23g [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-2fe23g [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2fe23g [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2fe23g :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-2fe23g_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-2fe23g_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M112.484,35L133.318,35C154.151,35,195.818,35,236.818,35C277.818,35,318.151,35,338.318,35L358.484,35\" id=\"rr-mermaid-2fe23g-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTEyLjQ4NDM3NSwieSI6MzV9LHsieCI6MjM3LjQ4NDM3NSwieSI6MzV9LHsieCI6MzYyLjQ4NDM3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2fe23g_flowchart-v2-pointEnd)\"></path><path d=\"M482.953,35L487.12,35C491.286,35,499.62,35,507.286,35C514.953,35,521.953,35,525.453,35L528.953,35\" id=\"rr-mermaid-2fe23g-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDgyLjk1MzEyNSwieSI6MzV9LHsieCI6NTA3Ljk1MzEyNSwieSI6MzV9LHsieCI6NTMyLjk1MzEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2fe23g_flowchart-v2-pointEnd)\"></path><path d=\"M667.672,35L677.991,35C688.31,35,708.948,35,728.919,35C748.891,35,768.195,35,777.848,35L787.5,35\" id=\"rr-mermaid-2fe23g-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6NjY3LjY3MTg3NSwieSI6MzV9LHsieCI6NzI5LjU4NTkzNzUsInkiOjM1fSx7IngiOjc5MS41LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2fe23g_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(237.484375, 35)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-100, -24)\"><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel\"><p>headTags / bodySlots / page</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(729.5859375, 35)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-36.9140625, -12)\"><foreignObject width=\"73.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>placement</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-2fe23g-flowchart-A-0\" data-look=\"classic\" transform=\"translate(60.2421875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2fe23g-flowchart-B-1\" data-look=\"classic\" transform=\"translate(422.71875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-60.234375\" y=\"-27\" width=\"120.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-30.234375, -12)\"><rect></rect><foreignObject width=\"60.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Manifest</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2fe23g-flowchart-C-2\" data-look=\"classic\" transform=\"translate(600.3125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.359375\" y=\"-27\" width=\"134.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.359375, -12)\"><rect></rect><foreignObject width=\"74.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Route</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2fe23g-flowchart-D-3\" data-look=\"classic\" transform=\"translate(903.328125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.828125\" y=\"-27\" width=\"223.65625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.828125, -12)\"><rect></rect><foreignObject width=\"163.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Shell / Component</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-2fe23g-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-2fe23g-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"Manifest\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"Site Route\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    D[\"Site Shell / Component\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    A -->|\"headTags / bodySlots / page\"| B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    B --> C</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    C -->|\"placement\"| D</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"head-tags\">Head Tags</h2>\n<p>Plugin が document head に情報を追加したい場合は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">ContentManifestEntry.headTags</span></span></code></pre>\n  </div>\n</figure>\n<p>へ <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>meta</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>link</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>script</span></span></code></span> を記述します。</p>\n<p>Plugin 自身が <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> を描画するわけではありません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteContentRequest</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest</span></span></code></span> が、解決した entry の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> を route context へ設定します。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>_renderer.tsx</span></span></code></span> がそれを読み取って描画します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PluginHeadTags } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"headTags\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> [];</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PluginHeadTags</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> tags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{headTags} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>;</span></span></code></pre>\n  </div>\n</figure>\n<p>つまり、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Plugin</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  ↓ headTags を提供</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>Framework resolver</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>  ↓ context へ設定</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>_renderer.tsx</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>  ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>&#x3C;head> に描画</span></span></code></pre>\n  </div>\n</figure>\n<p>という関係です。</p>\n<p>たとえば <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-discord-embed</span></span></code></span> は、この仕組みを使って <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>theme-color</span></span></code></span> を提供します。</p>\n<p>Plugin は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> 自体や tag の並び順を所有しません。</p>\n<h2 id=\"riebeckitehead-と-pluginheadtags\">RiebeckiteHead と PluginHeadTags</h2>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> より公開される 2 つの primitive は、head composition の責務分離を明確にします。</p>\n<h3 id=\"riebeckitehead\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span></h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { RiebeckiteHead } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">RiebeckiteHead</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> title</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"My Site\"</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{[]} /></span></span></code></pre>\n  </div>\n</figure>\n<p>Framework が次の標準的な head contents を描画します。</p>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;meta charset=\"utf-8\"></span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></span></span></code></span></li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;title></span></span></code></span>（title prop が提供する値）</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;link rel=\"icon\" href=\"/favicon.ico\"></span></span></code></span>（faviconHref プロップで上書き可能、null で省略可）</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;ColorModeScript /></span></span></code></span>（colorModeScript プロップで制御、default true）</li>\n  <li>stylesheet entries（stylesheets プロップ、default <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>[\"/app/style.css\"]</span></span></code></span>）</li>\n  <li>client script entry（clientSrc プロップ、default <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>\"/app/client.ts\"</span></span></code></span>、null で省略可）</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTag</span></span></code></span> values の変換（headTags プロップ）</li>\n  <li>子要素（children prop）は標準の後に追加</li>\n</ul>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> 要素自身を描画しません。Site は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> の ownership を保持し、その中に <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> を配置できます。</p>\n<h3 id=\"pluginheadtags\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTags</span></span></code></span></h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PluginHeadTags } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PluginHeadTags</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> tags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{headTagsFromManifest} /></span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginHeadTag</span></span></code></span> values (meta / link / script) を JSX 要素に変換します。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> を使わず、Site が自分で head を組み立てる際に使用します。</p>\n<h3 id=\"使用例-1\">使用例</h3>\n<p>Site が <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span> 所有権を維持しつつ標準 head をFrameworkに任せる場合：</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { RiebeckiteHead, ThemeRoot } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> jsxRenderer</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(({ </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">children</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }, </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ThemeRoot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    theme</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{config.theme}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    lang</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"htmlLanguage\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> config.site.locale}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">RiebeckiteHead</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">        title</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{config.site.title}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">        headTags</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">get</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"headTags\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> []}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">meta</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"custom-site-value\"</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> content</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"...\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">body</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"riebeckite-page rb-site\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>{children}&#x3C;/</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">body</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ThemeRoot</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span></code></pre>\n  </div>\n</figure>\n<p>Frameworkは標準 head rendering メカニクス（charset、viewport、default title、favicon wiring、color-mode bootstrap、stylesheet/client entry wiring、PluginHeadTag 変換）と theme-root attribute 導出を担当し、Site は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;head></span></span></code></span>/<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>&#x3C;body></span></span></code></span> 構成とカスタム meta/link/script の所有権を保持します。favicon FILE (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/public/favicon.ico</span></span></code></span>) は Site-owned のまま、default link wiring にのみ Framework が所有権を持ちます。</p>\n<p>Plugin が head tags を提供する場合は、既存の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> メカニズムはそのまま機能します。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckiteHead</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span> は併用可能です。</p>\n<h2 id=\"body-slots\">Body Slots</h2>\n<p>本文の途中へ Plugin の HTML を表示したい場合は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">ContentManifestEntry.bodySlots</span></span></code></pre>\n  </div>\n</figure>\n<p>を使用します。</p>\n<p>Plugin は slot 名と HTML fragment を提供します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>properties</span></span></code></pre>\n  </div>\n</figure>\n<p>という slot があれば、Route は slot object を article component へ渡し、Site は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  content</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  bodySlots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{route.entry.bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">/></span></span></code></pre>\n  </div>\n</figure>\n<p>のように article component 内の任意の位置へ配置できます。</p>\n<p>ここでの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>Article</span></span></code></span> は Site 自身の article component であり、同名の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/honox/ui</span></span></code></span> primitive ではありません。scaffold の starter は標準 slot を決まった位置へ描画します(<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.aside</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.header</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.metadata</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.before-content</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.after-content</span></span></code></span>、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.footer</span></span></code></span>)。plugin 作者はこれらから選ぶか、Site に独自名の描画を依頼します。独自 slot は Site が描画を選ぶまで何も表示しません。</p>\n<p>Site はどの slot をどこへ置くかを選び、描画の仕組みは公開 <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> primitive に任せます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.metadata\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article__metadata\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentSlot</span></span></code></span> は slot lookup、存在しない slot や空 slot の扱い、HTML fragment の描画、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-slot</span></span></code></span> の付与を担当します。Site が <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dangerouslySetInnerHTML</span></span></code></span> を直接書く必要はありません。順序、可視性、Site 固有 class、独自 slot 名は引き続き Site が所有します。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slots</span></span></code></span> を直接読んだり、任意の wrapper で包んだり、同じ slot を複数回描画する escape hatch も残っています。</p>\n<p>Plugin が route や shell の構造を書き換える必要はありません。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-properties</span></span></code></span> では、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"slot\"</span></span></code></pre>\n  </div>\n</figure>\n<p>を指定すると <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>properties</span></span></code></span> slot を提供します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>render: \"html\"</span></span></code></span> は従来どおり、生成 HTML の先頭または末尾へ直接挿入します。</p>\n<p>記事末尾の Plugin section は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>article.footer</span></span></code></span> に集約します。article component ではこの slot を一度だけ描画し、fragment の順序は解決済み Plugin の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span> で決めます。空の contribution は DOM node を生成しません。</p>\n<h1 id=\"独自-site-を作る\">独自 Site を作る</h1>\n<p>外部 Site でも、公開 primitive を使いながら自由に component を構成できます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> type</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { ContentBodySlots, PostContent } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  Article,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleBody,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleContent,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ArticleLayout,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ContentSlot,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> SiteArticle</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  post</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  bodySlots</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  post</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> PostContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  bodySlots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">?:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ContentBodySlots</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> class</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-article\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.header\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{post.html </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"23\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          &#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ContentSlot</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> slots</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{bodySlots} </span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">name</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"article.footer\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> /></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"24\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleContent</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"25\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">ArticleLayout</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"26\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;/</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">Article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"27\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  );</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"28\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>見た目は Site の CSS で定義します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"css\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">css</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"css\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"css\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/framework-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/plugin-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">@import</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"./.riebeckite/theme-styles.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">.site-article</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">  max-width</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">48</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">rem</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">  margin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">0</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> auto</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>.riebeckite</span></span></code></span> 内の生成 CSS 自体を直接編集しないでください。</p>\n<h2 id=\"islands\">Islands</h2>\n<p>Island も通常の Site module として管理します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>app/islands/</span></span></code></pre>\n  </div>\n</figure>\n<p>へ HonoX island を配置し、それを利用する route または component から import します。</p>\n<p>hydration や client-side state は Site 内で管理します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>app/client.ts</span></span></code></span> では、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">createClient</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">initRiebeckiteClient</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();</span></span></code></pre>\n  </div>\n</figure>\n<p>の両方を初期化します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>initRiebeckiteClient()</span></span></code></span> は、インストールされている Plugin や Theme が提供する browser entry を起動するために使用されます。</p>\n<p>Plugin は client entry を提供できますが、</p>\n<ul>\n  <li>Site route</li>\n  <li>shell</li>\n  <li>component</li>\n  <li>island</li>\n  <li>CSS design</li>\n</ul>\n<p>そのものを所有してはいけません。</p>\n<h1 id=\"integration-の境界\">Integration の境界</h1>\n<p>Riebeckite の routing では、すでに解決された公開 URL を使用します。</p>\n<p>基本的には、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>byPermalink</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    ↓</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>redirects</span></span></code></pre>\n  </div>\n</figure>\n<p>の順で request を解決します。</p>\n<p>filesystem path やディレクトリ構造から公開 URL を逆算しません。</p>\n<p>また、<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slug</span></span></code></span> はコンテンツを内部で検索するためのキーです。</p>\n<p>実際に公開される URL は、解決済みの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>permalink</span></span></code></span> です。</p>\n<h2 id=\"責務のまとめ\">責務のまとめ</h2>\n<p>Riebeckite 全体では、次のように責務を分離します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-w5mzg7\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1290px;\" viewBox=\"0 0 1290 177\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-w5mzg7{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-w5mzg7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-w5mzg7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-w5mzg7 .error-icon{fill:#552222;}#rr-mermaid-w5mzg7 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-w5mzg7 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-w5mzg7 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-w5mzg7 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-w5mzg7 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-w5mzg7 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-w5mzg7 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-w5mzg7 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-w5mzg7 .marker.cross{stroke:#333333;}#rr-mermaid-w5mzg7 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-w5mzg7 p{margin:0;}#rr-mermaid-w5mzg7 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-w5mzg7 .cluster-label text{fill:#333;}#rr-mermaid-w5mzg7 .cluster-label span{color:#333;}#rr-mermaid-w5mzg7 .cluster-label span p{background-color:transparent;}#rr-mermaid-w5mzg7 .label text,#rr-mermaid-w5mzg7 span{fill:#333;color:#333;}#rr-mermaid-w5mzg7 .node rect,#rr-mermaid-w5mzg7 .node circle,#rr-mermaid-w5mzg7 .node ellipse,#rr-mermaid-w5mzg7 .node polygon,#rr-mermaid-w5mzg7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-w5mzg7 .rough-node .label text,#rr-mermaid-w5mzg7 .node .label text,#rr-mermaid-w5mzg7 .image-shape .label,#rr-mermaid-w5mzg7 .icon-shape .label{text-anchor:middle;}#rr-mermaid-w5mzg7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-w5mzg7 .rough-node .label,#rr-mermaid-w5mzg7 .node .label,#rr-mermaid-w5mzg7 .image-shape .label,#rr-mermaid-w5mzg7 .icon-shape .label{text-align:center;}#rr-mermaid-w5mzg7 .node.clickable{cursor:pointer;}#rr-mermaid-w5mzg7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-w5mzg7 .arrowheadPath{fill:#333333;}#rr-mermaid-w5mzg7 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-w5mzg7 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-w5mzg7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-w5mzg7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-w5mzg7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-w5mzg7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-w5mzg7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-w5mzg7 .cluster text{fill:#333;}#rr-mermaid-w5mzg7 .cluster span{color:#333;}#rr-mermaid-w5mzg7 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-w5mzg7 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-w5mzg7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-w5mzg7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-w5mzg7 rect.text{fill:none;stroke-width:0;}#rr-mermaid-w5mzg7 .icon-shape,#rr-mermaid-w5mzg7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-w5mzg7 .icon-shape p,#rr-mermaid-w5mzg7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-w5mzg7 .icon-shape .label rect,#rr-mermaid-w5mzg7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-w5mzg7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-w5mzg7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-w5mzg7 .node .neo-node{stroke:#9370DB;}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node rect,#rr-mermaid-w5mzg7 [data-look=\"neo\"].cluster rect,#rr-mermaid-w5mzg7 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-w5mzg7 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-w5mzg7 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-w5mzg7 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-w5mzg7 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-w5mzg7 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-w5mzg7_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M578,59L589.167,59C600.333,59,622.667,59,644.333,59C666,59,687,59,697.5,59L708,59\" id=\"rr-mermaid-w5mzg7-L_Core_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Core_Integration_0\" data-points=\"W3sieCI6NTc4LCJ5Ijo1OX0seyJ4Ijo2NDUsInkiOjU5fSx7IngiOjcxMiwieSI6NTl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-w5mzg7_flowchart-v2-pointEnd)\"></path><path d=\"M268,65.935L272.167,64.78C276.333,63.624,284.667,61.312,292.333,60.156C300,59,307,59,310.5,59L314,59\" id=\"rr-mermaid-w5mzg7-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6MjY4LCJ5Ijo2NS45MzU0ODM4NzA5Njc3NH0seyJ4IjoyOTMsInkiOjU5fSx7IngiOjMxOCwieSI6NTl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-w5mzg7_flowchart-v2-pointEnd)\"></path><path d=\"M972,59L976.167,59C980.333,59,988.667,59,996.358,59.978C1004.049,60.955,1011.097,62.911,1014.621,63.888L1018.146,64.866\" id=\"rr-mermaid-w5mzg7-L_Integration_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Site_0\" data-points=\"W3sieCI6OTcyLCJ5Ijo1OX0seyJ4Ijo5OTcsInkiOjU5fSx7IngiOjEwMjIsInkiOjY1LjkzNTQ4Mzg3MDk2Nzc0fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-w5mzg7_flowchart-v2-pointEnd)\"></path><path d=\"M268,138.065L272.167,139.22C276.333,140.376,284.667,142.688,314.667,143.844C344.667,145,396.333,145,455,145C513.667,145,579.333,145,645,145C710.667,145,776.333,145,835,145C893.667,145,945.333,145,974.691,144.022C1004.049,143.045,1011.097,141.089,1014.621,140.112L1018.146,139.134\" id=\"rr-mermaid-w5mzg7-L_Plugin_Site_0\" class=\"edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Site_0\" data-points=\"W3sieCI6MjY4LCJ5IjoxMzguMDY0NTE2MTI5MDMyMjZ9LHsieCI6MjkzLCJ5IjoxNDV9LHsieCI6NDQ4LCJ5IjoxNDV9LHsieCI6NjQ1LCJ5IjoxNDV9LHsieCI6ODQyLCJ5IjoxNDV9LHsieCI6OTk3LCJ5IjoxNDV9LHsieCI6MTAyMiwieSI6MTM4LjA2NDUxNjEyOTAzMjI2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-w5mzg7_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Core_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(645, 145)\"><g class=\"label\" data-id=\"L_Plugin_Site_0\" transform=\"translate(-42, -24)\"><foreignObject width=\"84\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>提供した情報を<br>Site が配置</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-w5mzg7-flowchart-Core-0\" data-look=\"classic\" transform=\"translate(448, 59)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-51\" width=\"260\" height=\"102\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -36)\"><rect></rect><foreignObject width=\"200\" height=\"72\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Core<br>Content / Manifest / Plugin API</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-w5mzg7-flowchart-Integration-1\" data-look=\"classic\" transform=\"translate(842, 59)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-51\" width=\"260\" height=\"102\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -36)\"><rect></rect><foreignObject width=\"200\" height=\"72\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>HonoX Integration<br>Vite / SSG / Route Resolution</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-w5mzg7-flowchart-Plugin-2\" data-look=\"classic\" transform=\"translate(138, 102)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-51\" width=\"260\" height=\"102\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -36)\"><rect></rect><foreignObject width=\"200\" height=\"72\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Plugin<br>Content Extension / Page / Asset / Client Entry</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-w5mzg7-flowchart-Site-3\" data-look=\"classic\" transform=\"translate(1152, 102)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-51\" width=\"260\" height=\"102\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -36)\"><rect></rect><foreignObject width=\"200\" height=\"72\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Site Application<br>Route / Shell / UI / Island / CSS</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-w5mzg7-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-w5mzg7-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Core[\"Core&#x3C;br/>Content / Manifest / Plugin API\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Integration[\"HonoX Integration&#x3C;br/>Vite / SSG / Route Resolution\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Plugin[\"Plugin&#x3C;br/>Content Extension / Page / Asset / Client Entry\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Site[\"Site Application&#x3C;br/>Route / Shell / UI / Island / CSS\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Core --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Integration --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Plugin -. \"提供した情報を&#x3C;br/>Site が配置\" .-> Site</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>HonoX / Vite / Cloudflare 固有の処理は integration または Site Application に閉じます。</p>\n<p>Core は HonoX routing を所有しません。</p>\n<p>Plugin はページ、アセット、client entry などを提供できますが、Site 全体の route composition や UI 構造は所有しません。</p>\n<p><strong>Core はコンテンツを扱い、Integration は HonoX と接続し、Plugin は機能を提供し、Site が最終的な表示を決める</strong>、という境界を維持してください。</p>\n<p>build state の扱いについては <a href=\"/docs/framework/build-system\">Build system</a>、package ごとの責務については <a href=\"/docs/framework/architecture\">Architecture</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"HonoX Integration @riebeckite/honox は、Riebeckite Core と HonoX / Vite を接続する integration です。 Core はコンテンツやプラグインの処理を担当しますが、HonoX の route や Vite の build 方法については知りません","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/inspector","url":"https://riebeckite.dev/en/docs/framework/inspector","title":"inspector.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"inspector\">Inspector</h1>\n<p>Inspector answers questions about already-resolved state. Use it through the CLI:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> config</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> plugins</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> content</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --list</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> graph</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<h2 id=\"read-only-guarantee\">Read-only guarantee</h2>\n<p>Inspection is factual and non-mutating. It must not run a build, write incremental state or plugin cache, emit assets, render special artifacts merely for display, invoke Vite/HonoX build work, or auto-fix configuration. If the requested information does not exist because no build has completed, report that condition plainly.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect content --list</span></span></code></span> reports each entry's resolved canonical permalink. When a public-location plugin records identity metadata, it also shows the ID and the ID source.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect build</span></span></code></span> reports the incremental state status. When the state is invalid, it also reports the reason: malformed JSON, an unsupported state version, or an unrecognized structure.</p>\n<h2 id=\"when-to-use-each-tool\">When to use each tool</h2>\n<ul>\n  <li>Use <strong>Inspector</strong> to understand resolved configuration, enabled plugins, content, relationships, or existing build state.</li>\n  <li>Use <strong>check</strong> to validate configuration and plugin resolution.</li>\n  <li>Use <strong>doctor</strong> to diagnose environment and health.</li>\n  <li>Use <strong>build</strong> to intentionally create or update build output.</li>\n</ul>\n<p>Separating these commands makes automated tooling safe: a CI diagnostic command cannot accidentally modify cache or deployment output. See <a href=\"/en/docs/reference/cli\">CLI</a> and <a href=\"/en/docs/framework/diagnostics\">Diagnostics</a>.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Inspector Inspector answers questions about already-resolved state. Use it through the CLI: sh Wrap Copy riebeckite inspect config riebeckite inspect plugins ri","tags":[]},{"id":"https://riebeckite.dev/docs/framework/inspector","url":"https://riebeckite.dev/docs/framework/inspector","title":"inspector","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"inspector\">Inspector</h1>\n<p>Inspector は、Riebeckite がすでに解決した設定やコンテンツ、Plugin、Build State を確認するための機能です。</p>\n<p>簡単に言えば、<strong>「Riebeckite から今どう見えているか」を調べるための読み取り専用ツール</strong>です。</p>\n<p>たとえば、</p>\n<ul>\n  <li>実際にどの設定が使われているか</li>\n  <li>どの Plugin が有効になっているか</li>\n  <li>記事の最終的な URL は何か</li>\n  <li>コンテンツ同士がどうつながっているか</li>\n  <li>incremental build の state は正常か</li>\n</ul>\n<p>といった情報を確認できます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-iryojd\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 574.765625px;\" viewBox=\"0 0 574.765625 486\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-iryojd{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-iryojd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-iryojd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-iryojd .error-icon{fill:#552222;}#rr-mermaid-iryojd .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-iryojd .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-iryojd .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-iryojd .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-iryojd .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-iryojd .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-iryojd .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-iryojd .marker{fill:#333333;stroke:#333333;}#rr-mermaid-iryojd .marker.cross{stroke:#333333;}#rr-mermaid-iryojd svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-iryojd p{margin:0;}#rr-mermaid-iryojd .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-iryojd .cluster-label text{fill:#333;}#rr-mermaid-iryojd .cluster-label span{color:#333;}#rr-mermaid-iryojd .cluster-label span p{background-color:transparent;}#rr-mermaid-iryojd .label text,#rr-mermaid-iryojd span{fill:#333;color:#333;}#rr-mermaid-iryojd .node rect,#rr-mermaid-iryojd .node circle,#rr-mermaid-iryojd .node ellipse,#rr-mermaid-iryojd .node polygon,#rr-mermaid-iryojd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-iryojd .rough-node .label text,#rr-mermaid-iryojd .node .label text,#rr-mermaid-iryojd .image-shape .label,#rr-mermaid-iryojd .icon-shape .label{text-anchor:middle;}#rr-mermaid-iryojd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-iryojd .rough-node .label,#rr-mermaid-iryojd .node .label,#rr-mermaid-iryojd .image-shape .label,#rr-mermaid-iryojd .icon-shape .label{text-align:center;}#rr-mermaid-iryojd .node.clickable{cursor:pointer;}#rr-mermaid-iryojd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-iryojd .arrowheadPath{fill:#333333;}#rr-mermaid-iryojd .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-iryojd .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-iryojd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-iryojd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-iryojd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-iryojd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-iryojd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-iryojd .cluster text{fill:#333;}#rr-mermaid-iryojd .cluster span{color:#333;}#rr-mermaid-iryojd .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-iryojd .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-iryojd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-iryojd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-iryojd rect.text{fill:none;stroke-width:0;}#rr-mermaid-iryojd .icon-shape,#rr-mermaid-iryojd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-iryojd .icon-shape p,#rr-mermaid-iryojd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-iryojd .icon-shape .label rect,#rr-mermaid-iryojd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-iryojd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-iryojd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-iryojd .node .neo-node{stroke:#9370DB;}#rr-mermaid-iryojd [data-look=\"neo\"].node rect,#rr-mermaid-iryojd [data-look=\"neo\"].cluster rect,#rr-mermaid-iryojd [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-iryojd [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-iryojd [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-iryojd [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-iryojd [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-iryojd [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-iryojd [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-iryojd [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-iryojd [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-iryojd :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-iryojd_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-iryojd_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M143.602,35L152.66,35C161.719,35,179.836,35,201.384,64.553C222.933,94.105,247.912,153.21,260.402,182.763L272.891,212.316\" id=\"rr-mermaid-iryojd-L_A_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_I_0\" data-points=\"W3sieCI6MTQzLjYwMTU2MjUsInkiOjM1fSx7IngiOjE5Ny45NTMxMjUsInkiOjM1fSx7IngiOjI3NC40NDg0Njc1NDgwNzY5LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path><path d=\"M146.719,139L155.258,139C163.797,139,180.875,139,199.831,151.324C218.787,163.648,239.621,188.297,250.038,200.621L260.455,212.945\" id=\"rr-mermaid-iryojd-L_B_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_I_0\" data-points=\"W3sieCI6MTQ2LjcxODc1LCJ5IjoxMzl9LHsieCI6MTk3Ljk1MzEyNSwieSI6MTM5fSx7IngiOjI2My4wMzc1NjAwOTYxNTM4NywieSI6MjE2fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path><path d=\"M148.5,243L156.742,243C164.984,243,181.469,243,193.211,243C204.953,243,211.953,243,215.453,243L218.953,243\" id=\"rr-mermaid-iryojd-L_C_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_I_0\" data-points=\"W3sieCI6MTQ4LjUsInkiOjI0M30seyJ4IjoxOTcuOTUzMTI1LCJ5IjoyNDN9LHsieCI6MjIyLjk1MzEyNSwieSI6MjQzfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path><path d=\"M172.953,347L177.12,347C181.286,347,189.62,347,204.204,334.676C218.787,322.352,239.621,297.703,250.038,285.379L260.455,273.055\" id=\"rr-mermaid-iryojd-L_D_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_I_0\" data-points=\"W3sieCI6MTcyLjk1MzEyNSwieSI6MzQ3fSx7IngiOjE5Ny45NTMxMjUsInkiOjM0N30seyJ4IjoyNjMuMDM3NTYwMDk2MTUzODcsInkiOjI3MH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path><path d=\"M159.172,451L165.635,451C172.099,451,185.026,451,203.979,421.447C222.933,391.895,247.912,332.79,260.402,303.237L272.891,273.684\" id=\"rr-mermaid-iryojd-L_E_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_I_0\" data-points=\"W3sieCI6MTU5LjE3MTg3NSwieSI6NDUxfSx7IngiOjE5Ny45NTMxMjUsInkiOjQ1MX0seyJ4IjoyNzQuNDQ4NDY3NTQ4MDc2OSwieSI6MjcwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path><path d=\"M348.766,243L352.932,243C357.099,243,365.432,243,373.099,243C380.766,243,387.766,243,391.266,243L394.766,243\" id=\"rr-mermaid-iryojd-L_I_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_I_F_0\" data-points=\"W3sieCI6MzQ4Ljc2NTYyNSwieSI6MjQzfSx7IngiOjM3My43NjU2MjUsInkiOjI0M30seyJ4IjozOTguNzY1NjI1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-iryojd_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_I_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_I_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_I_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_I_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_I_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_I_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-A-0\" data-look=\"classic\" transform=\"translate(90.4765625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.125\" y=\"-27\" width=\"106.25\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.125, -12)\"><rect></rect><foreignObject width=\"46.25\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Config</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-B-1\" data-look=\"classic\" transform=\"translate(90.4765625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-56.2421875\" y=\"-27\" width=\"112.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.2421875, -12)\"><rect></rect><foreignObject width=\"52.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugins</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-C-2\" data-look=\"classic\" transform=\"translate(90.4765625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0234375\" y=\"-27\" width=\"116.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0234375, -12)\"><rect></rect><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-D-3\" data-look=\"classic\" transform=\"translate(90.4765625, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.4765625\" y=\"-27\" width=\"164.953125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.4765625, -12)\"><rect></rect><foreignObject width=\"104.953125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content Graph</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-E-4\" data-look=\"classic\" transform=\"translate(90.4765625, 451)\"><rect class=\"basic label-container\" style=\"\" x=\"-68.6953125\" y=\"-27\" width=\"137.390625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38.6953125, -12)\"><rect></rect><foreignObject width=\"77.390625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build State</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-I-6\" data-look=\"classic\" transform=\"translate(285.859375, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.90625\" y=\"-27\" width=\"125.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.90625, -12)\"><rect></rect><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Inspector</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-iryojd-flowchart-F-16\" data-look=\"classic\" transform=\"translate(482.765625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-84\" y=\"-27\" width=\"168\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54, -12)\"><rect></rect><foreignObject width=\"108\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>情報を表示するだけ</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-iryojd-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-iryojd-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Config\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"Plugins\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C[\"Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    D[\"Content Graph\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    E[\"Build State\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    A --> I[\"Inspector\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    B --> I</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    C --> I</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    D --> I</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    E --> I</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    I --> F[\"情報を表示するだけ\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Inspector はこれらの情報を<strong>確認するだけ</strong>で、build や設定の変更は行いません。</p>\n<h2 id=\"基本的な使い方\">基本的な使い方</h2>\n<p>Inspector には、確認したい対象ごとにコマンドがあります。</p>\n<table>\n  <thead>\n    <tr>\n      <th>コマンド</th>\n      <th>確認できるもの</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite inspect config</span></span></code></span></td>\n      <td>解決済みの設定</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite inspect plugins</span></span></code></span></td>\n      <td>有効になっている Plugin</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite inspect content --list</span></span></code></span></td>\n      <td>公開コンテンツと URL</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite inspect graph</span></span></code></span></td>\n      <td>コンテンツ同士の関係</td>\n    </tr>\n    <tr>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite inspect build</span></span></code></span></td>\n      <td>incremental build の state</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"config-を確認する\">Config を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> config</span></span></code></pre>\n  </div>\n</figure>\n<p>Riebeckite が実際に使用する <strong>解決済みの config</strong> を確認します。</p>\n<p>設定ファイルに書いた値そのものではなく、既定値なども適用された後の「Riebeckite が最終的に認識している設定」を確認したいときに使用します。</p>\n<p>たとえば、</p>\n<blockquote>\n  <p>設定したはずなのに期待した動作にならない</p>\n</blockquote>\n<p>という場合に、まず実際の設定値を確認できます。</p>\n<h2 id=\"plugin-を確認する\">Plugin を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> plugins</span></span></code></pre>\n  </div>\n</figure>\n<p>現在有効になっている Plugin を確認します。</p>\n<p>「Plugin を追加したつもりだけれど、本当に読み込まれているのか」を調べるときなどに利用できます。</p>\n<h2 id=\"content-を確認する\">Content を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> content</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --list</span></span></code></pre>\n  </div>\n</figure>\n<p>Riebeckite が認識しているコンテンツを一覧表示します。</p>\n<p>各 entry について、解決済みの <strong>canonical permalink</strong> を確認できます。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>content/posts/hello.md</span></span></code></pre>\n  </div>\n</figure>\n<p>というファイルがあっても、実際の公開 URL が</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/blog/hello/</span></span></code></pre>\n  </div>\n</figure>\n<p>であれば、Inspector では最終的に解決された <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/blog/hello/</span></span></code></span> を確認できます。</p>\n<p>つまり、filesystem 上の場所ではなく、<strong>実際にサイトで使われる URL</strong> を確認するための情報です。</p>\n<p>Public Location Plugin が identity metadata を提供している場合は、コンテンツ ID とその ID がどこから取得されたかも表示します。</p>\n<h2 id=\"content-graph-を確認する\">Content Graph を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> graph</span></span></code></pre>\n  </div>\n</figure>\n<p>コンテンツ同士の関係を確認します。</p>\n<p>たとえば、</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-2i7x2n\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 465.828125px;\" viewBox=\"0 -4 465.828125 105\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-2i7x2n{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-2i7x2n .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-2i7x2n .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-2i7x2n .error-icon{fill:#552222;}#rr-mermaid-2i7x2n .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-2i7x2n .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-2i7x2n .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-2i7x2n .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-2i7x2n .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-2i7x2n .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-2i7x2n .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-2i7x2n .marker{fill:#333333;stroke:#333333;}#rr-mermaid-2i7x2n .marker.cross{stroke:#333333;}#rr-mermaid-2i7x2n svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-2i7x2n p{margin:0;}#rr-mermaid-2i7x2n .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-2i7x2n .cluster-label text{fill:#333;}#rr-mermaid-2i7x2n .cluster-label span{color:#333;}#rr-mermaid-2i7x2n .cluster-label span p{background-color:transparent;}#rr-mermaid-2i7x2n .label text,#rr-mermaid-2i7x2n span{fill:#333;color:#333;}#rr-mermaid-2i7x2n .node rect,#rr-mermaid-2i7x2n .node circle,#rr-mermaid-2i7x2n .node ellipse,#rr-mermaid-2i7x2n .node polygon,#rr-mermaid-2i7x2n .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2i7x2n .rough-node .label text,#rr-mermaid-2i7x2n .node .label text,#rr-mermaid-2i7x2n .image-shape .label,#rr-mermaid-2i7x2n .icon-shape .label{text-anchor:middle;}#rr-mermaid-2i7x2n .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-2i7x2n .rough-node .label,#rr-mermaid-2i7x2n .node .label,#rr-mermaid-2i7x2n .image-shape .label,#rr-mermaid-2i7x2n .icon-shape .label{text-align:center;}#rr-mermaid-2i7x2n .node.clickable{cursor:pointer;}#rr-mermaid-2i7x2n .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-2i7x2n .arrowheadPath{fill:#333333;}#rr-mermaid-2i7x2n .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-2i7x2n .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-2i7x2n .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2i7x2n .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-2i7x2n .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2i7x2n .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-2i7x2n .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-2i7x2n .cluster text{fill:#333;}#rr-mermaid-2i7x2n .cluster span{color:#333;}#rr-mermaid-2i7x2n .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-2i7x2n .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-2i7x2n div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-2i7x2n .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-2i7x2n rect.text{fill:none;stroke-width:0;}#rr-mermaid-2i7x2n .icon-shape,#rr-mermaid-2i7x2n .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-2i7x2n .icon-shape p,#rr-mermaid-2i7x2n .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-2i7x2n .icon-shape .label rect,#rr-mermaid-2i7x2n .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-2i7x2n .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-2i7x2n .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-2i7x2n .node .neo-node{stroke:#9370DB;}#rr-mermaid-2i7x2n [data-look=\"neo\"].node rect,#rr-mermaid-2i7x2n [data-look=\"neo\"].cluster rect,#rr-mermaid-2i7x2n [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2i7x2n [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-2i7x2n [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-2i7x2n [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2i7x2n [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-2i7x2n [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2i7x2n [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-2i7x2n [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2i7x2n [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-2i7x2n :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-2i7x2n_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M124.906,13.287L129.073,11.739C133.24,10.191,141.573,7.096,159.574,5.548C177.576,4,205.245,4,232.914,4C260.583,4,288.253,4,305.629,5.316C323.005,6.631,330.089,9.263,333.63,10.578L337.172,11.894\" id=\"rr-mermaid-2i7x2n-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTI0LjkwNjI1LCJ5IjoxMy4yODY2NTA0Mzk5OTI1MX0seyJ4IjoxNDkuOTA2MjUsInkiOjR9LHsieCI6MjMyLjkxNDA2MjUsInkiOjR9LHsieCI6MzE1LjkyMTg3NSwieSI6NH0seyJ4IjozNDAuOTIxODc1LCJ5IjoxMy4yODY2NTA0Mzk5OTI1MX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2i7x2n_flowchart-v2-pointEnd)\"></path><path d=\"M124.906,56.713L129.073,58.261C133.24,59.809,141.573,62.904,149.24,64.452C156.906,66,163.906,66,167.406,66L170.906,66\" id=\"rr-mermaid-2i7x2n-L_A_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MTI0LjkwNjI1LCJ5Ijo1Ni43MTMzNDk1NjAwMDc0OX0seyJ4IjoxNDkuOTA2MjUsInkiOjY2fSx7IngiOjE3NC45MDYyNSwieSI6NjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2i7x2n_flowchart-v2-pointEnd)\"></path><path d=\"M290.922,66L295.089,66C299.255,66,307.589,66,315.297,64.684C323.005,63.369,330.089,60.737,333.63,59.422L337.172,58.106\" id=\"rr-mermaid-2i7x2n-L_C_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_B_0\" data-points=\"W3sieCI6MjkwLjkyMTg3NSwieSI6NjZ9LHsieCI6MzE1LjkyMTg3NSwieSI6NjZ9LHsieCI6MzQwLjkyMTg3NSwieSI6NTYuNzEzMzQ5NTYwMDA3NDl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-2i7x2n_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-2i7x2n-flowchart-A-0\" data-look=\"classic\" transform=\"translate(66.453125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.453125\" y=\"-27\" width=\"116.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.453125, -12)\"><rect></rect><foreignObject width=\"56.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>article-a</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2i7x2n-flowchart-B-1\" data-look=\"classic\" transform=\"translate(399.375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.453125\" y=\"-27\" width=\"116.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.453125, -12)\"><rect></rect><foreignObject width=\"56.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>article-b</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-2i7x2n-flowchart-C-3\" data-look=\"classic\" transform=\"translate(232.9140625, 66)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0078125\" y=\"-27\" width=\"116.015625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0078125, -12)\"><rect></rect><foreignObject width=\"56.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>article-c</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-2i7x2n-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-2i7x2n-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>graph LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"article-a\"] --> B[\"article-b\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    A --> C[\"article-c\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C --> B</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>のようなリンク関係を、Riebeckite がどのように認識しているか調べるために利用します。</p>\n<p>リンク、backlink、graph を利用する Plugin を開発するときの確認にも使えます。</p>\n<h2 id=\"build-state-を確認する\">Build State を確認する</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span></span></code></pre>\n  </div>\n</figure>\n<p>incremental build で利用する state の状態を確認します。</p>\n<p>正常な state が存在する場合は、その情報を表示します。</p>\n<p>state が利用できない場合は、その理由も確認できます。</p>\n<p>たとえば、</p>\n<ul>\n  <li>state file が存在しない</li>\n  <li>JSON が壊れている</li>\n  <li>state version が現在の Riebeckite に対応していない</li>\n  <li>state の構造を認識できない</li>\n</ul>\n<p>といった状態です。</p>\n<p>Inspector はこれらを<strong>修復しません</strong>。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-555q1e\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 643.625px;\" viewBox=\"0 0 643.625 777.640625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-555q1e{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-555q1e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-555q1e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-555q1e .error-icon{fill:#552222;}#rr-mermaid-555q1e .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-555q1e .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-555q1e .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-555q1e .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-555q1e .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-555q1e .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-555q1e .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-555q1e .marker{fill:#333333;stroke:#333333;}#rr-mermaid-555q1e .marker.cross{stroke:#333333;}#rr-mermaid-555q1e svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-555q1e p{margin:0;}#rr-mermaid-555q1e .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-555q1e .cluster-label text{fill:#333;}#rr-mermaid-555q1e .cluster-label span{color:#333;}#rr-mermaid-555q1e .cluster-label span p{background-color:transparent;}#rr-mermaid-555q1e .label text,#rr-mermaid-555q1e span{fill:#333;color:#333;}#rr-mermaid-555q1e .node rect,#rr-mermaid-555q1e .node circle,#rr-mermaid-555q1e .node ellipse,#rr-mermaid-555q1e .node polygon,#rr-mermaid-555q1e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-555q1e .rough-node .label text,#rr-mermaid-555q1e .node .label text,#rr-mermaid-555q1e .image-shape .label,#rr-mermaid-555q1e .icon-shape .label{text-anchor:middle;}#rr-mermaid-555q1e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-555q1e .rough-node .label,#rr-mermaid-555q1e .node .label,#rr-mermaid-555q1e .image-shape .label,#rr-mermaid-555q1e .icon-shape .label{text-align:center;}#rr-mermaid-555q1e .node.clickable{cursor:pointer;}#rr-mermaid-555q1e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-555q1e .arrowheadPath{fill:#333333;}#rr-mermaid-555q1e .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-555q1e .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-555q1e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-555q1e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-555q1e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-555q1e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-555q1e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-555q1e .cluster text{fill:#333;}#rr-mermaid-555q1e .cluster span{color:#333;}#rr-mermaid-555q1e .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-555q1e .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-555q1e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-555q1e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-555q1e rect.text{fill:none;stroke-width:0;}#rr-mermaid-555q1e .icon-shape,#rr-mermaid-555q1e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-555q1e .icon-shape p,#rr-mermaid-555q1e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-555q1e .icon-shape .label rect,#rr-mermaid-555q1e .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-555q1e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-555q1e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-555q1e .node .neo-node{stroke:#9370DB;}#rr-mermaid-555q1e [data-look=\"neo\"].node rect,#rr-mermaid-555q1e [data-look=\"neo\"].cluster rect,#rr-mermaid-555q1e [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-555q1e [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-555q1e [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-555q1e [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-555q1e [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-555q1e [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-555q1e [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-555q1e [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-555q1e [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-555q1e :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-555q1e_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-555q1e_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M332.266,62L332.266,66.167C332.266,70.333,332.266,78.667,332.266,86.333C332.266,94,332.266,101,332.266,104.5L332.266,108\" id=\"rr-mermaid-555q1e-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MzMyLjI2NTYyNSwieSI6NjJ9LHsieCI6MzMyLjI2NTYyNSwieSI6ODd9LHsieCI6MzMyLjI2NTYyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M379.604,272.49L391.365,286.546C403.127,300.603,426.649,328.715,438.411,348.272C450.172,367.828,450.172,378.828,450.172,384.328L450.172,389.828\" id=\"rr-mermaid-555q1e-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6Mzc5LjYwMzkzOTgwNzI2ODU1LCJ5IjoyNzIuNDg5ODEwMTkyNzMxNDV9LHsieCI6NDUwLjE3MTg3NSwieSI6MzU2LjgyODEyNX0seyJ4Ijo0NTAuMTcxODc1LCJ5IjozOTMuODI4MTI1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M268.33,255.892L241.426,272.715C214.522,289.538,160.714,323.183,133.81,358.157C106.906,393.13,106.906,429.432,106.906,465.734C106.906,502.036,106.906,538.339,106.906,561.99C106.906,585.641,106.906,596.641,106.906,602.141L106.906,607.641\" id=\"rr-mermaid-555q1e-L_B_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6MjY4LjMyOTc2MjM4NzIxOTI2LCJ5IjoyNTUuODkyMjYyMzg3MjE5MjZ9LHsieCI6MTA2LjkwNjI1LCJ5IjozNTYuODI4MTI1fSx7IngiOjEwNi45MDYyNSwieSI6NDY1LjczNDM3NX0seyJ4IjoxMDYuOTA2MjUsInkiOjU3NC42NDA2MjV9LHsieCI6MTA2LjkwNjI1LCJ5Ijo2MTEuNjQwNjI1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M414.46,501.929L402.503,514.048C390.546,526.166,366.633,550.403,354.676,568.022C342.719,585.641,342.719,596.641,342.719,602.141L342.719,607.641\" id=\"rr-mermaid-555q1e-L_C_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6NDE0LjQ2MDIyMDM5OTcyNTYsInkiOjUwMS45Mjg5NzAzOTk3MjU2fSx7IngiOjM0Mi43MTg3NSwieSI6NTc0LjY0MDYyNX0seyJ4IjozNDIuNzE4NzUsInkiOjYxMS42NDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M485.884,501.929L497.84,514.048C509.797,526.166,533.711,550.403,545.668,568.022C557.625,585.641,557.625,596.641,557.625,602.141L557.625,607.641\" id=\"rr-mermaid-555q1e-L_C_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_F_0\" data-points=\"W3sieCI6NDg1Ljg4MzUyOTYwMDI3NDQsInkiOjUwMS45Mjg5NzAzOTk3MjU2fSx7IngiOjU1Ny42MjUsInkiOjU3NC42NDA2MjV9LHsieCI6NTU3LjYyNSwieSI6NjExLjY0MDYyNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M106.906,665.641L106.906,669.807C106.906,673.974,106.906,682.307,138.557,693.453C170.208,704.6,233.51,718.559,265.162,725.538L296.813,732.518\" id=\"rr-mermaid-555q1e-L_D_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_G_0\" data-points=\"W3sieCI6MTA2LjkwNjI1LCJ5Ijo2NjUuNjQwNjI1fSx7IngiOjEwNi45MDYyNSwieSI6NjkwLjY0MDYyNX0seyJ4IjozMDAuNzE4NzUsInkiOjczMy4zNzkwMjk0NTI2OTAxfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M342.719,665.641L342.719,669.807C342.719,673.974,342.719,682.307,342.719,689.974C342.719,697.641,342.719,704.641,342.719,708.141L342.719,711.641\" id=\"rr-mermaid-555q1e-L_E_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6MzQyLjcxODc1LCJ5Ijo2NjUuNjQwNjI1fSx7IngiOjM0Mi43MTg3NSwieSI6NjkwLjY0MDYyNX0seyJ4IjozNDIuNzE4NzUsInkiOjcxNS42NDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path><path d=\"M557.625,665.641L557.625,669.807C557.625,673.974,557.625,682.307,529.455,693.29C501.286,704.273,444.946,717.905,416.776,724.721L388.607,731.537\" id=\"rr-mermaid-555q1e-L_F_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6NTU3LjYyNSwieSI6NjY1LjY0MDYyNX0seyJ4Ijo1NTcuNjI1LCJ5Ijo2OTAuNjQwNjI1fSx7IngiOjM4NC43MTg3NSwieSI6NzMyLjQ3ODA1NDExMTUzMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-555q1e_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(450.171875, 356.828125)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(106.90625, 465.734375)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(342.71875, 574.640625)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(557.625, 574.640625)\"><g class=\"label\" data-id=\"L_C_F_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-A-0\" data-look=\"classic\" transform=\"translate(332.265625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.4765625\" y=\"-27\" width=\"148.953125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.4765625, -12)\"><rect></rect><foreignObject width=\"88.953125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>inspect build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-B-1\" data-look=\"classic\" transform=\"translate(332.265625, 215.9140625)\"><polygon points=\"103.9140625,0 207.828125,-103.9140625 103.9140625,-207.828125 0,-103.9140625\" class=\"label-container\" transform=\"translate(-103.4140625, 103.9140625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-76.9140625, -12)\"><rect></rect><foreignObject width=\"153.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build State は存在する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-C-5\" data-look=\"classic\" transform=\"translate(450.171875, 465.734375)\"><polygon points=\"71.90625,0 143.8125,-71.90625 71.90625,-143.8125 0,-71.90625\" class=\"label-container\" transform=\"translate(-71.40625, 71.90625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-44.90625, -12)\"><rect></rect><foreignObject width=\"89.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>State は有効？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-D-7\" data-look=\"classic\" transform=\"translate(106.90625, 638.640625)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.90625\" y=\"-27\" width=\"197.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.90625, -12)\"><rect></rect><foreignObject width=\"137.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>State がないことを表示</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-E-9\" data-look=\"classic\" transform=\"translate(342.71875, 638.640625)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.90625\" y=\"-27\" width=\"173.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.90625, -12)\"><rect></rect><foreignObject width=\"113.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>State の情報を表示</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-F-11\" data-look=\"classic\" transform=\"translate(557.625, 638.640625)\"><rect class=\"basic label-container\" style=\"\" x=\"-78\" y=\"-27\" width=\"156\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48, -12)\"><rect></rect><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>無効な理由を表示</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-555q1e-flowchart-G-13\" data-look=\"classic\" transform=\"translate(342.71875, 742.640625)\"><rect class=\"basic label-container\" style=\"\" x=\"-42\" y=\"-27\" width=\"84\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12, -12)\"><rect></rect><foreignObject width=\"24\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>終了</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-555q1e-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-555q1e-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"inspect build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B{\"Build State は存在する？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    A --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    B -->|Yes| C{\"State は有効？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    B -->|No| D[\"State がないことを表示\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    C -->|Yes| E[\"State の情報を表示\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    C -->|No| F[\"無効な理由を表示\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    D --> G[\"終了\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    E --> G</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    F --> G</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>state が壊れていても、Inspector が新しい state を作ったり、既存 state を書き換えたりすることはありません。</p>\n<h1 id=\"read-only-の保証\">Read-only の保証</h1>\n<p>Inspector は <strong>read-only</strong> です。</p>\n<p>Inspector の実行によってプロジェクトの状態が変わってはいけません。</p>\n<p>具体的には、次の処理を行いません。</p>\n<ul>\n  <li>build の開始</li>\n  <li>incremental state の書き込み</li>\n  <li>Plugin Cache の書き込み</li>\n  <li>asset の生成</li>\n  <li>artifact の生成</li>\n  <li>Vite / HonoX build</li>\n  <li>config の自動修正</li>\n</ul>\n<p>まだ一度も build しておらず、確認対象の情報が存在しない場合も、Inspector が勝手に生成することはありません。</p>\n<p>代わりに、</p>\n<blockquote>\n  <p>現在はその情報が存在しない</p>\n</blockquote>\n<p>ことを明確に表示します。</p>\n<p>この性質により、Inspector は開発中だけでなく CI でも安全に利用できます。</p>\n<h1 id=\"inspect--check--doctor--build-の違い\"><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span> / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build</span></span></code></span> の違い</h1>\n<p>Riebeckite には似た目的に見えるコマンドがありますが、それぞれ役割が異なります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-55sdiz\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 712.71875px;\" viewBox=\"0.5 0 712.71875 382\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-55sdiz{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-55sdiz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-55sdiz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-55sdiz .error-icon{fill:#552222;}#rr-mermaid-55sdiz .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-55sdiz .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-55sdiz .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-55sdiz .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-55sdiz .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-55sdiz .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-55sdiz .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-55sdiz .marker{fill:#333333;stroke:#333333;}#rr-mermaid-55sdiz .marker.cross{stroke:#333333;}#rr-mermaid-55sdiz svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-55sdiz p{margin:0;}#rr-mermaid-55sdiz .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-55sdiz .cluster-label text{fill:#333;}#rr-mermaid-55sdiz .cluster-label span{color:#333;}#rr-mermaid-55sdiz .cluster-label span p{background-color:transparent;}#rr-mermaid-55sdiz .label text,#rr-mermaid-55sdiz span{fill:#333;color:#333;}#rr-mermaid-55sdiz .node rect,#rr-mermaid-55sdiz .node circle,#rr-mermaid-55sdiz .node ellipse,#rr-mermaid-55sdiz .node polygon,#rr-mermaid-55sdiz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-55sdiz .rough-node .label text,#rr-mermaid-55sdiz .node .label text,#rr-mermaid-55sdiz .image-shape .label,#rr-mermaid-55sdiz .icon-shape .label{text-anchor:middle;}#rr-mermaid-55sdiz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-55sdiz .rough-node .label,#rr-mermaid-55sdiz .node .label,#rr-mermaid-55sdiz .image-shape .label,#rr-mermaid-55sdiz .icon-shape .label{text-align:center;}#rr-mermaid-55sdiz .node.clickable{cursor:pointer;}#rr-mermaid-55sdiz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-55sdiz .arrowheadPath{fill:#333333;}#rr-mermaid-55sdiz .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-55sdiz .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-55sdiz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-55sdiz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-55sdiz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-55sdiz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-55sdiz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-55sdiz .cluster text{fill:#333;}#rr-mermaid-55sdiz .cluster span{color:#333;}#rr-mermaid-55sdiz .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-55sdiz .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-55sdiz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-55sdiz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-55sdiz rect.text{fill:none;stroke-width:0;}#rr-mermaid-55sdiz .icon-shape,#rr-mermaid-55sdiz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-55sdiz .icon-shape p,#rr-mermaid-55sdiz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-55sdiz .icon-shape .label rect,#rr-mermaid-55sdiz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-55sdiz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-55sdiz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-55sdiz .node .neo-node{stroke:#9370DB;}#rr-mermaid-55sdiz [data-look=\"neo\"].node rect,#rr-mermaid-55sdiz [data-look=\"neo\"].cluster rect,#rr-mermaid-55sdiz [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-55sdiz [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-55sdiz [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-55sdiz [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-55sdiz [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-55sdiz [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-55sdiz [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-55sdiz [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-55sdiz [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-55sdiz :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-55sdiz_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-55sdiz_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M103.478,160.478L125.732,139.565C147.986,118.652,192.493,76.826,231.246,55.913C270,35,303,35,319.5,35L336,35\" id=\"rr-mermaid-55sdiz-L_Q_I_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_I_0\" data-points=\"W3sieCI6MTAzLjQ3ODI2MDg2OTU2NTIyLCJ5IjoxNjAuNDc4MjYwODY5NTY1MjJ9LHsieCI6MjM3LCJ5IjozNX0seyJ4IjozNDAsInkiOjM1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M118.972,175.972L138.644,169.81C158.315,163.648,197.657,151.324,234.571,145.162C271.484,139,305.969,139,323.211,139L340.453,139\" id=\"rr-mermaid-55sdiz-L_Q_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_C_0\" data-points=\"W3sieCI6MTE4Ljk3MjQ3NzA2NDIyMDE5LCJ5IjoxNzUuOTcyNDc3MDY0MjIwMn0seyJ4IjoyMzcsInkiOjEzOX0seyJ4IjozNDQuNDUzMTI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M118.972,206.028L138.644,212.19C158.315,218.352,197.657,230.676,234.348,236.838C271.039,243,305.078,243,322.098,243L339.117,243\" id=\"rr-mermaid-55sdiz-L_Q_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_D_0\" data-points=\"W3sieCI6MTE4Ljk3MjQ3NzA2NDIyMDE5LCJ5IjoyMDYuMDI3NTIyOTM1Nzc5OH0seyJ4IjoyMzcsInkiOjI0M30seyJ4IjozNDMuMTE3MTg3NSwieSI6MjQzfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M103.478,221.522L125.732,242.435C147.986,263.348,192.493,305.174,232.654,326.087C272.815,347,308.63,347,326.538,347L344.445,347\" id=\"rr-mermaid-55sdiz-L_Q_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_B_0\" data-points=\"W3sieCI6MTAzLjQ3ODI2MDg2OTU2NTIyLCJ5IjoyMjEuNTIxNzM5MTMwNDM0Nzh9LHsieCI6MjM3LCJ5IjozNDd9LHsieCI6MzQ4LjQ0NTMxMjUsInkiOjM0N31d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M450.703,35L454.87,35C459.036,35,467.37,35,479.079,35C490.789,35,505.875,35,513.418,35L520.961,35\" id=\"rr-mermaid-55sdiz-L_I_IR_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_I_IR_0\" data-points=\"W3sieCI6NDUwLjcwMzEyNSwieSI6MzV9LHsieCI6NDc1LjcwMzEyNSwieSI6MzV9LHsieCI6NTI0Ljk2MDkzNzUsInkiOjM1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M446.25,139L451.159,139C456.068,139,465.885,139,474.294,139C482.703,139,489.703,139,493.203,139L496.703,139\" id=\"rr-mermaid-55sdiz-L_C_CR_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_CR_0\" data-points=\"W3sieCI6NDQ2LjI1LCJ5IjoxMzl9LHsieCI6NDc1LjcwMzEyNSwieSI6MTM5fSx7IngiOjUwMC43MDMxMjUsInkiOjEzOX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M447.586,243L452.272,243C456.958,243,466.331,243,479.335,243C492.339,243,508.974,243,517.292,243L525.609,243\" id=\"rr-mermaid-55sdiz-L_D_DR_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_DR_0\" data-points=\"W3sieCI6NDQ3LjU4NTkzNzUsInkiOjI0M30seyJ4Ijo0NzUuNzAzMTI1LCJ5IjoyNDN9LHsieCI6NTI5LjYwOTM3NSwieSI6MjQzfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path><path d=\"M442.258,347L447.832,347C453.406,347,464.555,347,474.074,347C483.594,347,491.484,347,495.43,347L499.375,347\" id=\"rr-mermaid-55sdiz-L_B_BR_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_BR_0\" data-points=\"W3sieCI6NDQyLjI1NzgxMjUsInkiOjM0N30seyJ4Ijo0NzUuNzAzMTI1LCJ5IjozNDd9LHsieCI6NTAzLjM3NSwieSI6MzQ3fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-55sdiz_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(237, 35)\"><g class=\"label\" data-id=\"L_Q_I_0\" transform=\"translate(-54, -12)\"><foreignObject width=\"108\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>現在の状態を見たい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(237, 139)\"><g class=\"label\" data-id=\"L_Q_C_0\" transform=\"translate(-72, -12)\"><foreignObject width=\"144\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>設定が正しいか確認したい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(237, 243)\"><g class=\"label\" data-id=\"L_Q_D_0\" transform=\"translate(-78, -12)\"><foreignObject width=\"156\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>環境を含めて問題を調べたい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(237, 347)\"><g class=\"label\" data-id=\"L_Q_B_0\" transform=\"translate(-72, -12)\"><foreignObject width=\"144\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>サイトを生成・更新したい</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_I_IR_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_CR_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_DR_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_BR_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(71, 191)\"><polygon points=\"63,0 126,-63 63,-126 0,-63\" class=\"label-container\" transform=\"translate(-62.5, 63)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何をしたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-I-2\" data-look=\"classic\" transform=\"translate(395.3515625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.3515625\" y=\"-27\" width=\"110.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.3515625, -12)\"><rect></rect><foreignObject width=\"50.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>inspect</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-C-4\" data-look=\"classic\" transform=\"translate(395.3515625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-50.8984375\" y=\"-27\" width=\"101.796875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-20.8984375, -12)\"><rect></rect><foreignObject width=\"41.796875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>check</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-D-6\" data-look=\"classic\" transform=\"translate(395.3515625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.234375\" y=\"-27\" width=\"104.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.234375, -12)\"><rect></rect><foreignObject width=\"44.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>doctor</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-B-8\" data-look=\"classic\" transform=\"translate(395.3515625, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-46.90625\" y=\"-27\" width=\"93.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-16.90625, -12)\"><rect></rect><foreignObject width=\"33.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-IR-10\" data-look=\"classic\" transform=\"translate(602.9609375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-78\" y=\"-27\" width=\"156\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48, -12)\"><rect></rect><foreignObject width=\"96\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>状態を変更しない</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-CR-12\" data-look=\"classic\" transform=\"translate(602.9609375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.2578125\" y=\"-27\" width=\"204.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.2578125, -12)\"><rect></rect><foreignObject width=\"144.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Config / Plugin を検証</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-DR-14\" data-look=\"classic\" transform=\"translate(602.9609375, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.3515625\" y=\"-27\" width=\"146.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.3515625, -12)\"><rect></rect><foreignObject width=\"86.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Health を診断</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-55sdiz-flowchart-BR-16\" data-look=\"classic\" transform=\"translate(602.9609375, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.5859375\" y=\"-27\" width=\"199.171875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.5859375, -12)\"><rect></rect><foreignObject width=\"139.171875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Output / State を更新</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-55sdiz-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-55sdiz-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"何をしたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"現在の状態を見たい\"| I[\"inspect\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"設定が正しいか確認したい\"| C[\"check\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Q -->|\"環境を含めて問題を調べたい\"| D[\"doctor\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Q -->|\"サイトを生成・更新したい\"| B[\"build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    I --> IR[\"状態を変更しない\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    C --> CR[\"Config / Plugin を検証\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    D --> DR[\"Health を診断\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    B --> BR[\"Output / State を更新\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<table>\n  <thead>\n    <tr>\n      <th>やりたいこと</th>\n      <th>コマンド</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>現在の解決結果を確認する</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Config / Plugin が正しいか検証する</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Environment を含めて問題を診断する</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Site や Build State を生成・更新する</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build</span></span></code></span></td>\n    </tr>\n  </tbody>\n</table>\n<p>迷った場合は、</p>\n<p><strong>「見るだけなら <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>inspect</span></span></code></span>、検証なら <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span>、問題調査なら <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>doctor</span></span></code></span>、生成するなら <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build</span></span></code></span>」</strong></p>\n<p>と考えると分かりやすいです。</p>\n<p>この役割分担によって、状態を確認するだけのコマンドが cache や deployment output を意図せず変更することを防いでいます。</p>\n<p>各コマンドの詳細は <a href=\"/docs/reference/cli\">CLI</a>、診断の仕組みについては <a href=\"/docs/framework/diagnostics\">Diagnostics</a>、incremental state については <a href=\"/docs/framework/build-system\">Build System</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Inspector Inspector は、Riebeckite がすでに解決した設定やコンテンツ、Plugin、Build State を確認するための機能です。 簡単に言えば、 「Riebeckite から今どう見えているか」を調べるための読み取り専用ツール です。 たとえば、 実際にどの設定が使われているか どの","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/observability","url":"https://riebeckite.dev/en/docs/framework/observability","title":"observability.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"observability\">Observability</h1>\n<p>Riebeckite separates logs, traces, and profiling so each answers a different question.</p>\n<table>\n  <thead>\n    <tr>\n      <th>Signal</th>\n      <th>Answers</th>\n      <th>Contract</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Logger</td>\n      <td>What happened or failed?</td>\n      <td>structured, safe operational messages</td>\n    </tr>\n    <tr>\n      <td>Tracer / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>TraceSink</span></span></code></span></td>\n      <td>Where did work occur and how long did it take?</td>\n      <td>nested timed spans</td>\n    </tr>\n    <tr>\n      <td>Profiler</td>\n      <td>Where should build performance be investigated?</td>\n      <td>consumes trace data and reports it</td>\n    </tr>\n  </tbody>\n</table>\n<h2 id=\"trace-semantics\">Trace semantics</h2>\n<p>Create spans around meaningful build phases, plugin work, and I/O boundaries; close them on both success and failure. Trace names should be stable enough for comparison. Do not use traces to hide errors: record/propagate the actual failure according to the caller contract.</p>\n<p>For parallel work, the sum of child span durations is cumulative work, not elapsed wall-clock time. A profiler must label or otherwise preserve that distinction so concurrent activity is not misreported as a slow serial path.</p>\n<p>The profile report separates plugin-cache activity from persistent-content-cache activity. It reports content-cache hits, misses, and bypasses together with the reason for each miss (for example <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>no-entry</span></span></code></span> or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dependency-changed</span></span></code></span>) and each bypass (for example an l10n safe bypass), so a warm build that is not reusing entries can be explained without reading cache internals.</p>\n<h2 id=\"safety-and-scope\">Safety and scope</h2>\n<p>Do not log secrets, raw credentials, or unnecessarily sensitive source content. Keep tracing optional and proportional: instrumentation must not alter build results. Runtime Workers must not depend on mutable build traces or local profiling files.</p>\n<p>Run <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite profile [--full]</span></span></code></span> for CLI-driven reporting. Pair it with <a href=\"/en/docs/framework/build-system\">Build system</a> and <a href=\"/en/docs/framework/diagnostics\">Diagnostics</a> when investigating a problem.</p>\n<p>The profile report includes the diagnostics phase: the duration of the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>diagnostics.run</span></span></code></span> span and the total, error, warning, and info counts emitted when diagnostics are collected. This keeps diagnostic cost and volume visible next to the build phases that produced them.</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Observability Riebeckite separates logs, traces, and profiling so each answers a different question. Signal Answers Contract Logger What happened or failed? str","tags":[]},{"id":"https://riebeckite.dev/docs/framework/observability","url":"https://riebeckite.dev/docs/framework/observability","title":"observability","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"observability\">Observability</h1>\n<p>Observability は、Riebeckite の実行中に <strong>何が起きたのか、どこに時間がかかったのか</strong> を調べるための仕組みです。</p>\n<p>Riebeckite では目的の異なる3つの仕組みを分けています。</p>\n<ul>\n  <li><strong>Logger</strong> — 何が起きたかを知る</li>\n  <li><strong>Tracer</strong> — どの処理にどれだけ時間がかかったかを記録する</li>\n  <li><strong>Profiler</strong> — Trace をまとめて、Build のどこを調査すべきか確認する</li>\n</ul>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-a4ghlg\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1037.203125px;\" viewBox=\"0 0 1037.203125 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-a4ghlg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-a4ghlg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-a4ghlg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-a4ghlg .error-icon{fill:#552222;}#rr-mermaid-a4ghlg .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-a4ghlg .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-a4ghlg .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-a4ghlg .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-a4ghlg .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-a4ghlg .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-a4ghlg .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-a4ghlg .marker{fill:#333333;stroke:#333333;}#rr-mermaid-a4ghlg .marker.cross{stroke:#333333;}#rr-mermaid-a4ghlg svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-a4ghlg p{margin:0;}#rr-mermaid-a4ghlg .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-a4ghlg .cluster-label text{fill:#333;}#rr-mermaid-a4ghlg .cluster-label span{color:#333;}#rr-mermaid-a4ghlg .cluster-label span p{background-color:transparent;}#rr-mermaid-a4ghlg .label text,#rr-mermaid-a4ghlg span{fill:#333;color:#333;}#rr-mermaid-a4ghlg .node rect,#rr-mermaid-a4ghlg .node circle,#rr-mermaid-a4ghlg .node ellipse,#rr-mermaid-a4ghlg .node polygon,#rr-mermaid-a4ghlg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-a4ghlg .rough-node .label text,#rr-mermaid-a4ghlg .node .label text,#rr-mermaid-a4ghlg .image-shape .label,#rr-mermaid-a4ghlg .icon-shape .label{text-anchor:middle;}#rr-mermaid-a4ghlg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-a4ghlg .rough-node .label,#rr-mermaid-a4ghlg .node .label,#rr-mermaid-a4ghlg .image-shape .label,#rr-mermaid-a4ghlg .icon-shape .label{text-align:center;}#rr-mermaid-a4ghlg .node.clickable{cursor:pointer;}#rr-mermaid-a4ghlg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-a4ghlg .arrowheadPath{fill:#333333;}#rr-mermaid-a4ghlg .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-a4ghlg .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-a4ghlg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-a4ghlg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-a4ghlg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-a4ghlg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-a4ghlg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-a4ghlg .cluster text{fill:#333;}#rr-mermaid-a4ghlg .cluster span{color:#333;}#rr-mermaid-a4ghlg .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-a4ghlg .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-a4ghlg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-a4ghlg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-a4ghlg rect.text{fill:none;stroke-width:0;}#rr-mermaid-a4ghlg .icon-shape,#rr-mermaid-a4ghlg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-a4ghlg .icon-shape p,#rr-mermaid-a4ghlg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-a4ghlg .icon-shape .label rect,#rr-mermaid-a4ghlg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-a4ghlg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-a4ghlg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-a4ghlg .node .neo-node{stroke:#9370DB;}#rr-mermaid-a4ghlg [data-look=\"neo\"].node rect,#rr-mermaid-a4ghlg [data-look=\"neo\"].cluster rect,#rr-mermaid-a4ghlg [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-a4ghlg [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-a4ghlg [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-a4ghlg [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-a4ghlg [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-a4ghlg [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-a4ghlg [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-a4ghlg [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-a4ghlg [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-a4ghlg :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-a4ghlg_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M153.712,60L162.715,55.833C171.719,51.667,189.727,43.333,208.921,39.167C228.115,35,248.495,35,258.685,35L268.875,35\" id=\"rr-mermaid-a4ghlg-L_R_L_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R_L_0\" data-points=\"W3sieCI6MTUzLjcxMTY4ODcwMTkyMzEsInkiOjYwfSx7IngiOjIwNy43MzQzNzUsInkiOjM1fSx7IngiOjI3Mi44NzUsInkiOjM1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path><path d=\"M153.712,114L162.715,118.167C171.719,122.333,189.727,130.667,202.231,134.833C214.734,139,221.734,139,225.234,139L228.734,139\" id=\"rr-mermaid-a4ghlg-L_R_T_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R_T_0\" data-points=\"W3sieCI6MTUzLjcxMTY4ODcwMTkyMzEsInkiOjExNH0seyJ4IjoyMDcuNzM0Mzc1LCJ5IjoxMzl9LHsieCI6MjMyLjczNDM3NSwieSI6MTM5fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path><path d=\"M382.703,35L393.56,35C404.417,35,426.13,35,442.293,35C458.456,35,469.068,35,474.374,35L479.68,35\" id=\"rr-mermaid-a4ghlg-L_L_LO_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_L_LO_0\" data-points=\"W3sieCI6MzgyLjcwMzEyNSwieSI6MzV9LHsieCI6NDQ3Ljg0Mzc1LCJ5IjozNX0seyJ4Ijo0ODMuNjc5Njg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path><path d=\"M422.844,139L427.01,139C431.177,139,439.51,139,447.177,139C454.844,139,461.844,139,465.344,139L468.844,139\" id=\"rr-mermaid-a4ghlg-L_T_SP_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_SP_0\" data-points=\"W3sieCI6NDIyLjg0Mzc1LCJ5IjoxMzl9LHsieCI6NDQ3Ljg0Mzc1LCJ5IjoxMzl9LHsieCI6NDcyLjg0Mzc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path><path d=\"M626.516,139L630.682,139C634.849,139,643.182,139,650.849,139C658.516,139,665.516,139,669.016,139L672.516,139\" id=\"rr-mermaid-a4ghlg-L_SP_P_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_SP_P_0\" data-points=\"W3sieCI6NjI2LjUxNTYyNSwieSI6MTM5fSx7IngiOjY1MS41MTU2MjUsInkiOjEzOX0seyJ4Ijo2NzYuNTE1NjI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path><path d=\"M787.203,139L791.37,139C795.536,139,803.87,139,811.536,139C819.203,139,826.203,139,829.703,139L833.203,139\" id=\"rr-mermaid-a4ghlg-L_P_PO_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_P_PO_0\" data-points=\"W3sieCI6Nzg3LjIwMzEyNSwieSI6MTM5fSx7IngiOjgxMi4yMDMxMjUsInkiOjEzOX0seyJ4Ijo4MzcuMjAzMTI1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-a4ghlg_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R_L_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R_T_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_L_LO_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_T_SP_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_SP_P_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_P_PO_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-R-0\" data-look=\"classic\" transform=\"translate(95.3671875, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.3671875\" y=\"-27\" width=\"174.734375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.3671875, -12)\"><rect></rect><foreignObject width=\"114.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Riebeckite Build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-L-2\" data-look=\"classic\" transform=\"translate(327.7890625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.9140625\" y=\"-27\" width=\"109.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.9140625, -12)\"><rect></rect><foreignObject width=\"49.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Logger</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-T-4\" data-look=\"classic\" transform=\"translate(327.7890625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.0546875\" y=\"-27\" width=\"190.109375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.0546875, -12)\"><rect></rect><foreignObject width=\"130.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Tracer / TraceSink</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-LO-6\" data-look=\"classic\" transform=\"translate(549.6796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-27\" width=\"132\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -12)\"><rect></rect><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何が起きた？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-SP-8\" data-look=\"classic\" transform=\"translate(549.6796875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.8359375\" y=\"-27\" width=\"153.671875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.8359375, -12)\"><rect></rect><foreignObject width=\"93.671875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Timed Spans</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-P-10\" data-look=\"classic\" transform=\"translate(731.859375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.34375\" y=\"-27\" width=\"110.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.34375, -12)\"><rect></rect><foreignObject width=\"50.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Profiler</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-a4ghlg-flowchart-PO-12\" data-look=\"classic\" transform=\"translate(933.203125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-96\" y=\"-27\" width=\"192\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66, -12)\"><rect></rect><foreignObject width=\"132\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>どこに時間がかかった？</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-a4ghlg-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-a4ghlg-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    R[\"Riebeckite Build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    R --> L[\"Logger\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    R --> T[\"Tracer / TraceSink\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    L --> LO[\"何が起きた？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    T --> SP[\"Timed Spans\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    SP --> P[\"Profiler\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    P --> PO[\"どこに時間がかかった？\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h2 id=\"logger--tracer--profiler-の違い\">Logger / Tracer / Profiler の違い</h2>\n<table>\n  <thead>\n    <tr>\n      <th>機能</th>\n      <th>答える問い</th>\n      <th>主な用途</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Logger</td>\n      <td>何が起きた・失敗したか</td>\n      <td>実行状況やエラーの記録</td>\n    </tr>\n    <tr>\n      <td>Tracer / <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>TraceSink</span></span></code></span></td>\n      <td>どこで、どれだけ処理したか</td>\n      <td>処理時間を span として記録</td>\n    </tr>\n    <tr>\n      <td>Profiler</td>\n      <td>Build のどこを調査すべきか</td>\n      <td>Trace の集計と分析</td>\n    </tr>\n  </tbody>\n</table>\n<p>たとえば Build が遅い場合、Logger に大量のメッセージを追加して原因を探すのではなく、Tracer で処理時間を記録し、Profiler でその結果を確認します。</p>\n<p>逆に「Plugin の読み込みに失敗した」のような出来事を伝えるのは Logger の役割です。</p>\n<h1 id=\"trace\">Trace</h1>\n<p>Trace は、Build の処理を <strong>span</strong> という単位に分けて処理時間を記録します。</p>\n<p>たとえば Build が次のように実行されたとします。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-j1nk6v\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 793.84375px;\" viewBox=\"0 0 793.84375 278\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-j1nk6v{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-j1nk6v .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-j1nk6v .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-j1nk6v .error-icon{fill:#552222;}#rr-mermaid-j1nk6v .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-j1nk6v .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-j1nk6v .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-j1nk6v .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-j1nk6v .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-j1nk6v .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-j1nk6v .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-j1nk6v .marker{fill:#333333;stroke:#333333;}#rr-mermaid-j1nk6v .marker.cross{stroke:#333333;}#rr-mermaid-j1nk6v svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-j1nk6v p{margin:0;}#rr-mermaid-j1nk6v .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-j1nk6v .cluster-label text{fill:#333;}#rr-mermaid-j1nk6v .cluster-label span{color:#333;}#rr-mermaid-j1nk6v .cluster-label span p{background-color:transparent;}#rr-mermaid-j1nk6v .label text,#rr-mermaid-j1nk6v span{fill:#333;color:#333;}#rr-mermaid-j1nk6v .node rect,#rr-mermaid-j1nk6v .node circle,#rr-mermaid-j1nk6v .node ellipse,#rr-mermaid-j1nk6v .node polygon,#rr-mermaid-j1nk6v .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-j1nk6v .rough-node .label text,#rr-mermaid-j1nk6v .node .label text,#rr-mermaid-j1nk6v .image-shape .label,#rr-mermaid-j1nk6v .icon-shape .label{text-anchor:middle;}#rr-mermaid-j1nk6v .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-j1nk6v .rough-node .label,#rr-mermaid-j1nk6v .node .label,#rr-mermaid-j1nk6v .image-shape .label,#rr-mermaid-j1nk6v .icon-shape .label{text-align:center;}#rr-mermaid-j1nk6v .node.clickable{cursor:pointer;}#rr-mermaid-j1nk6v .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-j1nk6v .arrowheadPath{fill:#333333;}#rr-mermaid-j1nk6v .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-j1nk6v .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-j1nk6v .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-j1nk6v .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-j1nk6v .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-j1nk6v .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-j1nk6v .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-j1nk6v .cluster text{fill:#333;}#rr-mermaid-j1nk6v .cluster span{color:#333;}#rr-mermaid-j1nk6v .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-j1nk6v .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-j1nk6v div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-j1nk6v .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-j1nk6v rect.text{fill:none;stroke-width:0;}#rr-mermaid-j1nk6v .icon-shape,#rr-mermaid-j1nk6v .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-j1nk6v .icon-shape p,#rr-mermaid-j1nk6v .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-j1nk6v .icon-shape .label rect,#rr-mermaid-j1nk6v .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-j1nk6v .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-j1nk6v .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-j1nk6v .node .neo-node{stroke:#9370DB;}#rr-mermaid-j1nk6v [data-look=\"neo\"].node rect,#rr-mermaid-j1nk6v [data-look=\"neo\"].cluster rect,#rr-mermaid-j1nk6v [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-j1nk6v [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-j1nk6v [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-j1nk6v [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-j1nk6v [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-j1nk6v [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-j1nk6v [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-j1nk6v [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-j1nk6v [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-j1nk6v :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-j1nk6v_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M328.898,43.29L287.681,50.575C246.464,57.86,164.029,72.43,122.811,83.215C81.594,94,81.594,101,81.594,104.5L81.594,108\" id=\"rr-mermaid-j1nk6v-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MzI4Ljg5ODQzNzUsInkiOjQzLjI5MDM5NTM5MDIxMjE3fSx7IngiOjgxLjU5Mzc1LCJ5Ijo4N30seyJ4Ijo4MS41OTM3NSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path><path d=\"M328.898,59.036L319.803,63.697C310.708,68.358,292.518,77.679,283.423,85.839C274.328,94,274.328,101,274.328,104.5L274.328,108\" id=\"rr-mermaid-j1nk6v-L_B_P_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_P_0\" data-points=\"W3sieCI6MzI4Ljg5ODQzNzUsInkiOjU5LjAzNjMzODQ0MDIxODY0fSx7IngiOjI3NC4zMjgxMjUsInkiOjg3fSx7IngiOjI3NC4zMjgxMjUsInkiOjExMn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path><path d=\"M422.711,59.036L431.806,63.697C440.901,68.358,459.091,77.679,468.186,85.839C477.281,94,477.281,101,477.281,104.5L477.281,108\" id=\"rr-mermaid-j1nk6v-L_B_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6NDIyLjcxMDkzNzUsInkiOjU5LjAzNjMzODQ0MDIxODY0fSx7IngiOjQ3Ny4yODEyNSwieSI6ODd9LHsieCI6NDc3LjI4MTI1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path><path d=\"M422.711,42.559L468.671,49.966C514.63,57.373,606.549,72.186,652.509,83.093C698.469,94,698.469,101,698.469,104.5L698.469,108\" id=\"rr-mermaid-j1nk6v-L_B_A_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_A_0\" data-points=\"W3sieCI6NDIyLjcxMDkzNzUsInkiOjQyLjU1OTMzMjcwMzgwODYyfSx7IngiOjY5OC40Njg3NSwieSI6ODd9LHsieCI6Njk4LjQ2ODc1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path><path d=\"M230.873,166L224.167,170.167C217.461,174.333,204.049,182.667,197.343,190.333C190.637,198,190.637,205,190.637,208.5L190.637,212\" id=\"rr-mermaid-j1nk6v-L_P_P1_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_P_P1_0\" data-points=\"W3sieCI6MjMwLjg3Mjk3MTc1NDgwNzY4LCJ5IjoxNjZ9LHsieCI6MTkwLjYzNjcxODc1LCJ5IjoxOTF9LHsieCI6MTkwLjYzNjcxODc1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path><path d=\"M317.783,166L324.489,170.167C331.195,174.333,344.607,182.667,351.313,190.333C358.02,198,358.02,205,358.02,208.5L358.02,212\" id=\"rr-mermaid-j1nk6v-L_P_P2_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_P_P2_0\" data-points=\"W3sieCI6MzE3Ljc4MzI3ODI0NTE5MjMsInkiOjE2Nn0seyJ4IjozNTguMDE5NTMxMjUsInkiOjE5MX0seyJ4IjozNTguMDE5NTMxMjUsInkiOjIxNn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-j1nk6v_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_P_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_A_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_P_P1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_P_P2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-B-0\" data-look=\"classic\" transform=\"translate(375.8046875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-46.90625\" y=\"-27\" width=\"93.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-16.90625, -12)\"><rect></rect><foreignObject width=\"33.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-C-2\" data-look=\"classic\" transform=\"translate(81.59375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.59375\" y=\"-27\" width=\"147.1875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.59375, -12)\"><rect></rect><foreignObject width=\"87.1875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>content.load</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-P-4\" data-look=\"classic\" transform=\"translate(274.328125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>plugins.run</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-D-6\" data-look=\"classic\" transform=\"translate(477.28125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.8125\" y=\"-27\" width=\"167.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.8125, -12)\"><rect></rect><foreignObject width=\"107.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>diagnostics.run</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-A-8\" data-look=\"classic\" transform=\"translate(698.46875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.375\" y=\"-27\" width=\"174.75\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.375, -12)\"><rect></rect><foreignObject width=\"114.75\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>application.build</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-P1-10\" data-look=\"classic\" transform=\"translate(190.63671875, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.46875\" y=\"-27\" width=\"116.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.46875, -12)\"><rect></rect><foreignObject width=\"56.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>plugin A</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-j1nk6v-flowchart-P2-12\" data-look=\"classic\" transform=\"translate(358.01953125, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.9140625\" y=\"-27\" width=\"117.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.9140625, -12)\"><rect></rect><foreignObject width=\"57.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>plugin B</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-j1nk6v-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-j1nk6v-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    B[\"build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B --> C[\"content.load\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    B --> P[\"plugins.run\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    B --> D[\"diagnostics.run\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    B --> A[\"application.build\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    P --> P1[\"plugin A\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    P --> P2[\"plugin B\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>build</span></span></code></span> が親 span、その中で実行される処理が child span になります。</p>\n<p>これにより、</p>\n<blockquote>\n  <p>Build 全体が遅い</p>\n</blockquote>\n<p>だけではなく、</p>\n<blockquote>\n  <p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>plugins.run</span></span></code></span> の中の特定 Plugin に時間がかかっている</p>\n</blockquote>\n<p>といったところまで調べられます。</p>\n<h2 id=\"span-を作る場所\">Span を作る場所</h2>\n<p>すべての関数に span を追加する必要はありません。</p>\n<p>主に次のような、処理時間を知る意味がある境界へ追加します。</p>\n<ul>\n  <li>主要な Build phase</li>\n  <li>Plugin の処理</li>\n  <li>ファイル読み込みなどの I/O</li>\n  <li>Diagnostics</li>\n  <li>その他、独立して性能を確認したい処理</li>\n</ul>\n<p>span の名前には、Build 間で比較できる安定した名前を使用します。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>content.load</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>plugins.run</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>diagnostics.run</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>application.build</span></span></code></pre>\n  </div>\n</figure>\n<p>のような名前です。</p>\n<p>入力ファイル名などによって span 名そのものが毎回変化する設計は避けます。</p>\n<h2 id=\"span-は必ず閉じる\">Span は必ず閉じる</h2>\n<p>処理が成功した場合だけでなく、失敗した場合も span を閉じます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-6lvh8b\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 324.90625px;\" viewBox=\"0 0 324.90625 546\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-6lvh8b{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-6lvh8b .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-6lvh8b .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-6lvh8b .error-icon{fill:#552222;}#rr-mermaid-6lvh8b .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-6lvh8b .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-6lvh8b .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-6lvh8b .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-6lvh8b .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-6lvh8b .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-6lvh8b .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-6lvh8b .marker{fill:#333333;stroke:#333333;}#rr-mermaid-6lvh8b .marker.cross{stroke:#333333;}#rr-mermaid-6lvh8b svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-6lvh8b p{margin:0;}#rr-mermaid-6lvh8b .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-6lvh8b .cluster-label text{fill:#333;}#rr-mermaid-6lvh8b .cluster-label span{color:#333;}#rr-mermaid-6lvh8b .cluster-label span p{background-color:transparent;}#rr-mermaid-6lvh8b .label text,#rr-mermaid-6lvh8b span{fill:#333;color:#333;}#rr-mermaid-6lvh8b .node rect,#rr-mermaid-6lvh8b .node circle,#rr-mermaid-6lvh8b .node ellipse,#rr-mermaid-6lvh8b .node polygon,#rr-mermaid-6lvh8b .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-6lvh8b .rough-node .label text,#rr-mermaid-6lvh8b .node .label text,#rr-mermaid-6lvh8b .image-shape .label,#rr-mermaid-6lvh8b .icon-shape .label{text-anchor:middle;}#rr-mermaid-6lvh8b .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-6lvh8b .rough-node .label,#rr-mermaid-6lvh8b .node .label,#rr-mermaid-6lvh8b .image-shape .label,#rr-mermaid-6lvh8b .icon-shape .label{text-align:center;}#rr-mermaid-6lvh8b .node.clickable{cursor:pointer;}#rr-mermaid-6lvh8b .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-6lvh8b .arrowheadPath{fill:#333333;}#rr-mermaid-6lvh8b .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-6lvh8b .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-6lvh8b .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-6lvh8b .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-6lvh8b .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-6lvh8b .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-6lvh8b .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-6lvh8b .cluster text{fill:#333;}#rr-mermaid-6lvh8b .cluster span{color:#333;}#rr-mermaid-6lvh8b .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-6lvh8b .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-6lvh8b div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-6lvh8b .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-6lvh8b rect.text{fill:none;stroke-width:0;}#rr-mermaid-6lvh8b .icon-shape,#rr-mermaid-6lvh8b .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-6lvh8b .icon-shape p,#rr-mermaid-6lvh8b .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-6lvh8b .icon-shape .label rect,#rr-mermaid-6lvh8b .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-6lvh8b .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-6lvh8b .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-6lvh8b .node .neo-node{stroke:#9370DB;}#rr-mermaid-6lvh8b [data-look=\"neo\"].node rect,#rr-mermaid-6lvh8b [data-look=\"neo\"].cluster rect,#rr-mermaid-6lvh8b [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-6lvh8b [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-6lvh8b [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-6lvh8b [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-6lvh8b [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-6lvh8b [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-6lvh8b [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-6lvh8b [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-6lvh8b [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-6lvh8b :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-6lvh8b_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M159.906,62L159.906,66.167C159.906,70.333,159.906,78.667,159.906,86.333C159.906,94,159.906,101,159.906,104.5L159.906,108\" id=\"rr-mermaid-6lvh8b-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTU5LjkwNjI1LCJ5Ijo2Mn0seyJ4IjoxNTkuOTA2MjUsInkiOjg3fSx7IngiOjE1OS45MDYyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path><path d=\"M159.906,166L159.906,170.167C159.906,174.333,159.906,182.667,159.906,190.333C159.906,198,159.906,205,159.906,208.5L159.906,212\" id=\"rr-mermaid-6lvh8b-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTU5LjkwNjI1LCJ5IjoxNjZ9LHsieCI6MTU5LjkwNjI1LCJ5IjoxOTF9LHsieCI6MTU5LjkwNjI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path><path d=\"M136.485,282.579L125.555,292.649C114.626,302.719,92.766,322.86,81.836,338.43C70.906,354,70.906,365,70.906,370.5L70.906,376\" id=\"rr-mermaid-6lvh8b-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTM2LjQ4NTE5NzM2ODQyMTA0LCJ5IjoyODIuNTc4OTQ3MzY4NDIxMDR9LHsieCI6NzAuOTA2MjUsInkiOjM0M30seyJ4Ijo3MC45MDYyNSwieSI6MzgwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path><path d=\"M70.906,434L70.906,438.167C70.906,442.333,70.906,450.667,70.906,458.333C70.906,466,70.906,473,70.906,476.5L70.906,480\" id=\"rr-mermaid-6lvh8b-L_D_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6NzAuOTA2MjUsInkiOjQzNH0seyJ4Ijo3MC45MDYyNSwieSI6NDU5fSx7IngiOjcwLjkwNjI1LCJ5Ijo0ODR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path><path d=\"M183.327,282.579L194.257,292.649C205.187,302.719,227.047,322.86,237.976,338.43C248.906,354,248.906,365,248.906,370.5L248.906,376\" id=\"rr-mermaid-6lvh8b-L_C_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6MTgzLjMyNzMwMjYzMTU3ODk2LCJ5IjoyODIuNTc4OTQ3MzY4NDIxMDR9LHsieCI6MjQ4LjkwNjI1LCJ5IjozNDN9LHsieCI6MjQ4LjkwNjI1LCJ5IjozODB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path><path d=\"M248.906,434L248.906,438.167C248.906,442.333,248.906,450.667,248.906,458.333C248.906,466,248.906,473,248.906,476.5L248.906,480\" id=\"rr-mermaid-6lvh8b-L_E_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6MjQ4LjkwNjI1LCJ5Ijo0MzR9LHsieCI6MjQ4LjkwNjI1LCJ5Ijo0NTl9LHsieCI6MjQ4LjkwNjI1LCJ5Ijo0ODR9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-6lvh8b_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(70.90625, 343)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(248.90625, 343)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-A-0\" data-look=\"classic\" transform=\"translate(159.90625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.90625\" y=\"-27\" width=\"125.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.90625, -12)\"><rect></rect><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Span 開始</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-B-1\" data-look=\"classic\" transform=\"translate(159.90625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-42\" y=\"-27\" width=\"84\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12, -12)\"><rect></rect><foreignObject width=\"24\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>処理</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-C-2\" data-look=\"classic\" transform=\"translate(159.90625, 261)\"><polygon points=\"45,0 90,-45 45,-90 0,-45\" class=\"label-container\" transform=\"translate(-44.5, 45)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-18, -12)\"><rect></rect><foreignObject width=\"36\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>成功？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-D-3\" data-look=\"classic\" transform=\"translate(70.90625, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.90625\" y=\"-27\" width=\"125.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.90625, -12)\"><rect></rect><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Span 終了</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-E-4\" data-look=\"classic\" transform=\"translate(248.90625, 407)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.90625\" y=\"-27\" width=\"125.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.90625, -12)\"><rect></rect><foreignObject width=\"65.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Span 終了</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-F-5\" data-look=\"classic\" transform=\"translate(70.90625, 511)\"><rect class=\"basic label-container\" style=\"\" x=\"-60\" y=\"-27\" width=\"120\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-30, -12)\"><rect></rect><foreignObject width=\"60\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>結果を返す</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-6lvh8b-flowchart-G-6\" data-look=\"classic\" transform=\"translate(248.90625, 511)\"><rect class=\"basic label-container\" style=\"\" x=\"-68\" y=\"-27\" width=\"136\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38, -12)\"><rect></rect><foreignObject width=\"76\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Error を伝播</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-6lvh8b-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-6lvh8b-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    A[\"Span 開始\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    B[\"処理\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    C{\"成功？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    D[\"Span 終了\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    E[\"Span 終了\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    F[\"結果を返す\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    G[\"Error を伝播\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    A --> B --> C</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    C -->|Yes| D --> F</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    C -->|No| E --> G</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Trace はエラー処理の代わりではありません。</p>\n<p>処理が失敗した場合は Trace を記録したうえで、通常の caller contract に従って error を伝播します。</p>\n<p>Trace のためにエラーを握りつぶしてはいけません。</p>\n<h1 id=\"並列処理と時間\">並列処理と時間</h1>\n<p>Trace を読むときは、<strong>処理時間の合計と実際の経過時間は同じとは限らない</strong>ことに注意してください。</p>\n<p>たとえば Plugin A と Plugin B が並列に実行されたとします。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-qf8qn0\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 784 148\" style=\"max-width: 784px;\" role=\"graphics-document document\" aria-roledescription=\"gantt\"><style>#rr-mermaid-qf8qn0{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-qf8qn0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-qf8qn0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-qf8qn0 .error-icon{fill:#552222;}#rr-mermaid-qf8qn0 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-qf8qn0 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-qf8qn0 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-qf8qn0 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-qf8qn0 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-qf8qn0 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-qf8qn0 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-qf8qn0 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-qf8qn0 .marker.cross{stroke:#333333;}#rr-mermaid-qf8qn0 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-qf8qn0 p{margin:0;}#rr-mermaid-qf8qn0 .mermaid-main-font{font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#rr-mermaid-qf8qn0 .exclude-range{fill:#eeeeee;}#rr-mermaid-qf8qn0 .section{stroke:none;opacity:0.2;}#rr-mermaid-qf8qn0 .section0{fill:rgba(102, 102, 255, 0.49);}#rr-mermaid-qf8qn0 .section2{fill:#fff400;}#rr-mermaid-qf8qn0 .section1,#rr-mermaid-qf8qn0 .section3{fill:white;opacity:0.2;}#rr-mermaid-qf8qn0 .sectionTitle0{fill:#333;}#rr-mermaid-qf8qn0 .sectionTitle1{fill:#333;}#rr-mermaid-qf8qn0 .sectionTitle2{fill:#333;}#rr-mermaid-qf8qn0 .sectionTitle3{fill:#333;}#rr-mermaid-qf8qn0 .sectionTitle{text-anchor:start;font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#rr-mermaid-qf8qn0 .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#rr-mermaid-qf8qn0 .grid .tick text{font-family:\"trebuchet ms\",verdana,arial,sans-serif;fill:#333;}#rr-mermaid-qf8qn0 .grid path{stroke-width:0;}#rr-mermaid-qf8qn0 .today{fill:none;stroke:red;stroke-width:2px;}#rr-mermaid-qf8qn0 .task{stroke-width:2;}#rr-mermaid-qf8qn0 .taskText{text-anchor:middle;font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#rr-mermaid-qf8qn0 .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#rr-mermaid-qf8qn0 .taskTextOutsideLeft{fill:black;text-anchor:end;}#rr-mermaid-qf8qn0 .task.clickable{cursor:pointer;}#rr-mermaid-qf8qn0 .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#rr-mermaid-qf8qn0 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#rr-mermaid-qf8qn0 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#rr-mermaid-qf8qn0 .taskText0,#rr-mermaid-qf8qn0 .taskText1,#rr-mermaid-qf8qn0 .taskText2,#rr-mermaid-qf8qn0 .taskText3{fill:white;}#rr-mermaid-qf8qn0 .task0,#rr-mermaid-qf8qn0 .task1,#rr-mermaid-qf8qn0 .task2,#rr-mermaid-qf8qn0 .task3{fill:#8a90dd;stroke:#534fbc;}#rr-mermaid-qf8qn0 .taskTextOutside0,#rr-mermaid-qf8qn0 .taskTextOutside2{fill:black;}#rr-mermaid-qf8qn0 .taskTextOutside1,#rr-mermaid-qf8qn0 .taskTextOutside3{fill:black;}#rr-mermaid-qf8qn0 .active0,#rr-mermaid-qf8qn0 .active1,#rr-mermaid-qf8qn0 .active2,#rr-mermaid-qf8qn0 .active3{fill:#bfc7ff;stroke:#534fbc;}#rr-mermaid-qf8qn0 .activeText0,#rr-mermaid-qf8qn0 .activeText1,#rr-mermaid-qf8qn0 .activeText2,#rr-mermaid-qf8qn0 .activeText3{fill:black!important;}#rr-mermaid-qf8qn0 .done0,#rr-mermaid-qf8qn0 .done1,#rr-mermaid-qf8qn0 .done2,#rr-mermaid-qf8qn0 .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#rr-mermaid-qf8qn0 .doneText0,#rr-mermaid-qf8qn0 .doneText1,#rr-mermaid-qf8qn0 .doneText2,#rr-mermaid-qf8qn0 .doneText3{fill:black!important;}#rr-mermaid-qf8qn0 .doneText0.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneText0.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneText1.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneText1.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneText2.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneText2.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneText3.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneText3.taskTextOutsideRight{fill:black!important;}#rr-mermaid-qf8qn0 .crit0,#rr-mermaid-qf8qn0 .crit1,#rr-mermaid-qf8qn0 .crit2,#rr-mermaid-qf8qn0 .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#rr-mermaid-qf8qn0 .activeCrit0,#rr-mermaid-qf8qn0 .activeCrit1,#rr-mermaid-qf8qn0 .activeCrit2,#rr-mermaid-qf8qn0 .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#rr-mermaid-qf8qn0 .doneCrit0,#rr-mermaid-qf8qn0 .doneCrit1,#rr-mermaid-qf8qn0 .doneCrit2,#rr-mermaid-qf8qn0 .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#rr-mermaid-qf8qn0 .milestone{transform:rotate(45deg) scale(0.8,0.8);}#rr-mermaid-qf8qn0 .milestoneText{font-style:italic;}#rr-mermaid-qf8qn0 .doneCritText0,#rr-mermaid-qf8qn0 .doneCritText1,#rr-mermaid-qf8qn0 .doneCritText2,#rr-mermaid-qf8qn0 .doneCritText3{fill:black!important;}#rr-mermaid-qf8qn0 .doneCritText0.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneCritText0.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneCritText1.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneCritText1.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneCritText2.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneCritText2.taskTextOutsideRight,#rr-mermaid-qf8qn0 .doneCritText3.taskTextOutsideLeft,#rr-mermaid-qf8qn0 .doneCritText3.taskTextOutsideRight{fill:black!important;}#rr-mermaid-qf8qn0 .vert{stroke:navy;}#rr-mermaid-qf8qn0 .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#rr-mermaid-qf8qn0 .activeCritText0,#rr-mermaid-qf8qn0 .activeCritText1,#rr-mermaid-qf8qn0 .activeCritText2,#rr-mermaid-qf8qn0 .activeCritText3{fill:black!important;}#rr-mermaid-qf8qn0 .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\"trebuchet ms\",verdana,arial,sans-serif;}#rr-mermaid-qf8qn0 .node .neo-node{stroke:#9370DB;}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node rect,#rr-mermaid-qf8qn0 [data-look=\"neo\"].cluster rect,#rr-mermaid-qf8qn0 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-qf8qn0 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-qf8qn0 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-qf8qn0 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-qf8qn0 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-qf8qn0 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><g class=\"grid\" transform=\"translate(75, 98)\" fill=\"none\" font-size=\"10\" font-family=\"sans-serif\" text-anchor=\"middle\"><path class=\"domain\" stroke=\"currentColor\" d=\"M0.5,-63V0.5H634.5V-63\"></path><g class=\"tick\" opacity=\"1\" transform=\"translate(0.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(95.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(190.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(285.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(380.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(476.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g><g class=\"tick\" opacity=\"1\" transform=\"translate(571.5,0)\"><line stroke=\"currentColor\" y2=\"-63\"></line><text fill=\"#000\" y=\"3\" dy=\"1em\" stroke=\"none\" font-size=\"10\" style=\"text-anchor: middle;\">000 ms</text></g></g><g><rect x=\"0\" y=\"48\" width=\"746.5\" height=\"24\" class=\"section section0\"></rect><rect x=\"0\" y=\"72\" width=\"746.5\" height=\"24\" class=\"section section0\"></rect></g><g><rect id=\"rr-mermaid-qf8qn0-a\" rx=\"3\" ry=\"3\" x=\"75\" y=\"50\" width=\"634\" height=\"20\" transform-origin=\"392px 60px\" class=\"task task0\"></rect><rect id=\"rr-mermaid-qf8qn0-b\" rx=\"3\" ry=\"3\" x=\"75\" y=\"74\" width=\"634\" height=\"20\" transform-origin=\"392px 84px\" class=\"task task0\"></rect><text id=\"rr-mermaid-qf8qn0-a-text\" font-size=\"11\" x=\"392\" y=\"63.5\" class=\"taskText taskText0  width-41.02685546875\">Plugin A </text><text id=\"rr-mermaid-qf8qn0-b-text\" font-size=\"11\" x=\"392\" y=\"87.5\" class=\"taskText taskText0  width-40.984375\">Plugin B </text></g><g><text dy=\"0em\" x=\"10\" y=\"74\" font-size=\"11\" class=\"sectionTitle sectionTitle0\"><tspan alignment-baseline=\"central\" x=\"10\">Plugins</tspan></text></g><g class=\"today\"><line x1=\"11357418882\" x2=\"11357418882\" y1=\"25\" y2=\"123\" class=\"today\"></line></g><text x=\"392\" y=\"25\" class=\"titleText\">Parallel Plugin Work</text></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>gantt</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    title Parallel Plugin Work</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    dateFormat X</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    axisFormat %L ms</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    section Plugins</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Plugin A :a, 0, 100</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin B :b, 0, 100</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>それぞれが 100ms かかった場合、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Plugin A = 100ms</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>Plugin B = 100ms</span></span></code></pre>\n  </div>\n</figure>\n<p>なので、処理量としては合計 200ms です。</p>\n<p>しかし2つは同時に実行されているため、実際の経過時間はおよそ 100ms です。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Cumulative work = 200ms</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>Wall-clock time = 約100ms</span></span></code></pre>\n  </div>\n</figure>\n<p>Profiler はこの違いを維持します。</p>\n<p>child span の時間を単純に足して、</p>\n<blockquote>\n  <p>plugins.run = 200ms</p>\n</blockquote>\n<p>のように表示すると、並列処理を直列処理のように見せてしまうためです。</p>\n<h1 id=\"profiler\">Profiler</h1>\n<p>Profiler は Trace を集計して、Build のどこに時間がかかっているかを確認するための機能です。</p>\n<p>CLI から実行できます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> profile</span></span></code></pre>\n  </div>\n</figure>\n<p>incremental state を再利用せず計測する場合は、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> profile</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> --full</span></span></code></pre>\n  </div>\n</figure>\n<p>を使用します。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--full</span></span></code></span> は、incremental build の影響を避けて Build 全体の performance を調べたい場合に便利です。</p>\n<p>Profiler の目的は、</p>\n<p><strong>「遅い」という事実から、次にどこを調査すればよいかを絞り込むこと</strong></p>\n<p>です。</p>\n<p>Profiler は Cache の状況も分けて表示します。</p>\n<ul>\n  <li><strong>Plugin cache</strong> — プラグイン自身が保存した結果の hit / miss</li>\n  <li><strong>Content cache</strong> — persistent content cache の hit / miss / bypass と、miss / bypass の理由</li>\n</ul>\n<p>これにより、</p>\n<blockquote>\n  <p>なぜ warm build なのにキャッシュが使われていないのか</p>\n</blockquote>\n<p>を、安全性のための bypass なのか、依存関係の変更による miss なのかまで区別して確認できます。</p>\n<h1 id=\"diagnostics-の計測\">Diagnostics の計測</h1>\n<p>Diagnostics も通常の Build phase と同じように計測されます。</p>\n<p>Profiler には、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>diagnostics.run</span></span></code></pre>\n  </div>\n</figure>\n<p>span の duration が表示されます。</p>\n<p>さらに Diagnostics が生成した finding の件数も確認できます。</p>\n<ul>\n  <li>total</li>\n  <li>error</li>\n  <li>warning</li>\n  <li>info</li>\n</ul>\n<p>これにより、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>diagnostics.run</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>├─ duration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>├─ total</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>├─ error</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>├─ warning</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>└─ info</span></span></code></pre>\n  </div>\n</figure>\n<p>のように、<strong>Diagnostics にどれだけ時間がかかり、どれだけの問題が報告されたのか</strong>を同時に確認できます。</p>\n<p>たとえば Diagnostics が Build 時間の大部分を占めている場合、その phase をさらに調査する判断材料になります。</p>\n<h1 id=\"安全性\">安全性</h1>\n<p>Observability は <strong>Riebeckite の動作を観測するための仕組み</strong>であり、Build の結果を変えてはいけません。</p>\n<p>Instrumentation を有効にしても無効にしても、生成される Site は同じである必要があります。</p>\n<p>また、Logger や Trace には次のような情報を記録しないでください。</p>\n<ul>\n  <li>secret</li>\n  <li>credential</li>\n  <li>token</li>\n  <li>不要に機微なコンテンツ本文</li>\n</ul>\n<p>観測のために必要な情報だけを記録します。</p>\n<p>Trace や Profile の保存データも Build-time の情報です。</p>\n<p>Cloudflare Workers などの runtime が、書き換え可能な Trace / Profile file に依存する設計にはしません。</p>\n<h1 id=\"問題を調査するとき\">問題を調査するとき</h1>\n<p>問題の種類によって使う機能を分けます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-8gqvx2\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 761.734375px;\" viewBox=\"0 0 761.734375 282\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-8gqvx2{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-8gqvx2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-8gqvx2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-8gqvx2 .error-icon{fill:#552222;}#rr-mermaid-8gqvx2 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-8gqvx2 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-8gqvx2 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-8gqvx2 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-8gqvx2 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-8gqvx2 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-8gqvx2 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-8gqvx2 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-8gqvx2 .marker.cross{stroke:#333333;}#rr-mermaid-8gqvx2 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-8gqvx2 p{margin:0;}#rr-mermaid-8gqvx2 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-8gqvx2 .cluster-label text{fill:#333;}#rr-mermaid-8gqvx2 .cluster-label span{color:#333;}#rr-mermaid-8gqvx2 .cluster-label span p{background-color:transparent;}#rr-mermaid-8gqvx2 .label text,#rr-mermaid-8gqvx2 span{fill:#333;color:#333;}#rr-mermaid-8gqvx2 .node rect,#rr-mermaid-8gqvx2 .node circle,#rr-mermaid-8gqvx2 .node ellipse,#rr-mermaid-8gqvx2 .node polygon,#rr-mermaid-8gqvx2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-8gqvx2 .rough-node .label text,#rr-mermaid-8gqvx2 .node .label text,#rr-mermaid-8gqvx2 .image-shape .label,#rr-mermaid-8gqvx2 .icon-shape .label{text-anchor:middle;}#rr-mermaid-8gqvx2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-8gqvx2 .rough-node .label,#rr-mermaid-8gqvx2 .node .label,#rr-mermaid-8gqvx2 .image-shape .label,#rr-mermaid-8gqvx2 .icon-shape .label{text-align:center;}#rr-mermaid-8gqvx2 .node.clickable{cursor:pointer;}#rr-mermaid-8gqvx2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-8gqvx2 .arrowheadPath{fill:#333333;}#rr-mermaid-8gqvx2 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-8gqvx2 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-8gqvx2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-8gqvx2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-8gqvx2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-8gqvx2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-8gqvx2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-8gqvx2 .cluster text{fill:#333;}#rr-mermaid-8gqvx2 .cluster span{color:#333;}#rr-mermaid-8gqvx2 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-8gqvx2 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-8gqvx2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-8gqvx2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-8gqvx2 rect.text{fill:none;stroke-width:0;}#rr-mermaid-8gqvx2 .icon-shape,#rr-mermaid-8gqvx2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-8gqvx2 .icon-shape p,#rr-mermaid-8gqvx2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-8gqvx2 .icon-shape .label rect,#rr-mermaid-8gqvx2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-8gqvx2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-8gqvx2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-8gqvx2 .node .neo-node{stroke:#9370DB;}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node rect,#rr-mermaid-8gqvx2 [data-look=\"neo\"].cluster rect,#rr-mermaid-8gqvx2 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8gqvx2 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8gqvx2 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-8gqvx2 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8gqvx2 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-8gqvx2 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-8gqvx2_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M263.145,97.626L229.773,111.855C196.402,126.084,129.658,154.542,96.286,174.271C62.914,194,62.914,205,62.914,210.5L62.914,216\" id=\"rr-mermaid-8gqvx2-L_Q_L_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_L_0\" data-points=\"W3sieCI6MjYzLjE0NTI3MDY4MzEyODgsInkiOjk3LjYyNTczOTQzMzEyODgxfSx7IngiOjYyLjkxNDA2MjUsInkiOjE4M30seyJ4Ijo2Mi45MTQwNjI1LCJ5IjoyMjB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8gqvx2_flowchart-v2-pointEnd)\"></path><path d=\"M280.153,114.634L270.656,126.028C261.159,137.422,242.166,160.211,232.669,177.106C223.172,194,223.172,205,223.172,210.5L223.172,216\" id=\"rr-mermaid-8gqvx2-L_Q_P_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_P_0\" data-points=\"W3sieCI6MjgwLjE1MzEyMTE4NDI3NTM0LCJ5IjoxMTQuNjMzNTg5OTM0Mjc1MzJ9LHsieCI6MjIzLjE3MTg3NSwieSI6MTgzfSx7IngiOjIyMy4xNzE4NzUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8gqvx2_flowchart-v2-pointEnd)\"></path><path d=\"M342.886,114.634L352.383,126.028C361.88,137.422,380.873,160.211,390.37,177.106C399.867,194,399.867,205,399.867,210.5L399.867,216\" id=\"rr-mermaid-8gqvx2-L_Q_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_D_0\" data-points=\"W3sieCI6MzQyLjg4NTk0MTMxNTcyNDY2LCJ5IjoxMTQuNjMzNTg5OTM0Mjc1MzJ9LHsieCI6Mzk5Ljg2NzE4NzUsInkiOjE4M30seyJ4IjozOTkuODY3MTg3NSwieSI6MjIwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8gqvx2_flowchart-v2-pointEnd)\"></path><path d=\"M363.587,93.932L409.236,108.777C454.884,123.621,546.18,153.311,591.828,173.655C637.477,194,637.477,205,637.477,210.5L637.477,216\" id=\"rr-mermaid-8gqvx2-L_Q_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_B_0\" data-points=\"W3sieCI6MzYzLjU4NzI5MTUzNDMxNjUsInkiOjkzLjkzMjIzOTcxNTY4MzUyfSx7IngiOjYzNy40NzY1NjI1LCJ5IjoxODN9LHsieCI6NjM3LjQ3NjU2MjUsInkiOjIyMH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-8gqvx2_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(62.9140625, 183)\"><g class=\"label\" data-id=\"L_Q_L_0\" transform=\"translate(-36, -12)\"><foreignObject width=\"72\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>何が起きた？</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(223.171875, 183)\"><g class=\"label\" data-id=\"L_Q_P_0\" transform=\"translate(-66, -12)\"><foreignObject width=\"132\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>どこに時間がかかった？</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(399.8671875, 183)\"><g class=\"label\" data-id=\"L_Q_D_0\" transform=\"translate(-72, -12)\"><foreignObject width=\"144\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>設定や構成に問題がある？</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(637.4765625, 183)\"><g class=\"label\" data-id=\"L_Q_B_0\" transform=\"translate(-74.015625, -12)\"><foreignObject width=\"148.03125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Build の状態を確認したい</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-8gqvx2-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(311.51953125, 77)\"><polygon points=\"69,0 138,-69 69,-138 0,-69\" class=\"label-container\" transform=\"translate(-68.5, 69)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-42, -12)\"><rect></rect><foreignObject width=\"84\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何を調べたい？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8gqvx2-flowchart-L-2\" data-look=\"classic\" transform=\"translate(62.9140625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.9140625\" y=\"-27\" width=\"109.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.9140625, -12)\"><rect></rect><foreignObject width=\"49.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Logger</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8gqvx2-flowchart-P-4\" data-look=\"classic\" transform=\"translate(223.171875, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.34375\" y=\"-27\" width=\"110.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.34375, -12)\"><rect></rect><foreignObject width=\"50.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Profiler</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8gqvx2-flowchart-D-6\" data-look=\"classic\" transform=\"translate(399.8671875, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-71.3515625\" y=\"-27\" width=\"142.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-41.3515625, -12)\"><rect></rect><foreignObject width=\"82.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Diagnostics</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-8gqvx2-flowchart-B-8\" data-look=\"classic\" transform=\"translate(637.4765625, 247)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.2578125\" y=\"-27\" width=\"232.515625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.2578125, -12)\"><rect></rect><foreignObject width=\"172.515625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Build System / Inspector</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-8gqvx2-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-8gqvx2-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"何を調べたい？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"何が起きた？\"| L[\"Logger\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"どこに時間がかかった？\"| P[\"Profiler\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Q -->|\"設定や構成に問題がある？\"| D[\"Diagnostics\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Q -->|\"Build の状態を確認したい\"| B[\"Build System / Inspector\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Build が失敗している場合は Logger や Diagnostics、Build が遅い場合は Trace / Profiler、incremental build の状態を確認したい場合は Inspector と組み合わせて調査します。</p>\n<p>Build の仕組みについては <a href=\"/docs/framework/build-system\">Build System</a>、問題の報告については <a href=\"/docs/framework/diagnostics\">Diagnostics</a>、現在の state を確認する場合は <a href=\"/docs/framework/inspector\">Inspector</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Observability Observability は、Riebeckite の実行中に 何が起きたのか、どこに時間がかかったのか を調べるための仕組みです。 Riebeckite では目的の異なる3つの仕組みを分けています。 Logger — 何が起きたかを知る Tracer — どの処理にどれだけ時間がかかった","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/page-system","url":"https://riebeckite.dev/en/docs/framework/page-system","title":"page-system.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"page-system\">Page System</h1>\n<p>\n  The Page System lets a plugin provide a standalone page without taking over an\n  application route. It is a capability on the normal <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckitePlugin</span></span></code></span>\n  contract, not a second kind of plugin.\n</p>\n<h2 id=\"responsibilities\">Responsibilities</h2>\n<table>\n  <thead>\n    <tr>\n      <th>Layer</th>\n      <th>Responsibility</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Core</td>\n      <td>Page Type contract, validation, path enumeration, resolution, and conflicts</td>\n    </tr>\n    <tr>\n      <td>Plugin</td>\n      <td>Page Type ID, public paths, and a framework-independent HTML body</td>\n    </tr>\n    <tr>\n      <td>HonoX integration</td>\n      <td>Generic route resolver and SSG parameter helper</td>\n    </tr>\n    <tr>\n      <td>Site application</td>\n      <td>Catch-all route, document frame, metadata, and safe HTML rendering</td>\n    </tr>\n    <tr>\n      <td>Theme</td>\n      <td>Tokens and stable hooks; no knowledge of a Page Type ID is required</td>\n    </tr>\n  </tbody>\n</table>\n<p>\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginPageContext.manifest</span></span></code></span> is the resolved manifest. Its <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entries</span></span></code></span> still\n  contains <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>draft</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>scheduled</span></span></code></span>, so a Page Type must read <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>publicEntries</span></span></code></span>\n  (routable) or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>discoverableEntries</span></span></code></span> (public only) for page output instead.\n</p>\n<h2 id=\"rendering-pipeline\">Rendering pipeline</h2>\n<p>Before Page Types, a standalone plugin feature needed a dedicated route:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>request -> plugin-specific application route -> plugin component -> document frame</span></span></code></pre>\n  </div>\n</figure>\n<p>With the Page System, plugins participate through one generic route:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>build: plugin Page Types -> public paths -> SSG parameters</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>request: catch-all route -> resolveRiebeckiteRoute</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>                           -> plugin page | content | redirect</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>plugin page -> site document frame -> theme CSS and plugin client entries</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  The route and frame remain site-owned. Plugins return a body fragment and\n  optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>title</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>description</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>language</span></span></code></span>; the site decides how\n  those values are represented in the document.\n</p>\n<h2 id=\"authoring-a-page-type\">Authoring a Page Type</h2>\n<p>\n  Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes</span></span></code></span> when the feature is an independent screen. Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderers</span></span></code></span> for\n  content embeds such as Canvas, Bases, and Excalidraw: they belong inside an\n  article and do not need a page of their own.\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { definePlugin } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> reportPlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">() {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    pageTypes: [{</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      id: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      paths: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">      resolve</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: ({ </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">pathname</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">manifest</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> pathname </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"/report\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">        ?</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">            type: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">            pathname,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">            title: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">            body: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">`&#x3C;p>${</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">manifest</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">.</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">publicEntries</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">.</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">length</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">} published entries&#x3C;/p>`</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          }</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">        :</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> null</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    }],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  IDs are globally unique. A request with multiple matching Page Types selects\n  the greatest <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>priority</span></span></code></span>; equal priorities are an explicit error. Declare\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>paths</span></span></code></span> for every static page and derive dynamic paths from\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest.publicEntries</span></span></code></span> when SSG must emit them.\n</p>\n<h2 id=\"honox-application-wiring\">HonoX application wiring</h2>\n<p>\n  Every HonoX site that uses plugin pages needs the generic catch-all route. The\n  scaffolded site already includes it. The root <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span> is resolved by\n  <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest(c, content)</span></span></code></span>, which shares the same mechanics:\n</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  contentRouteSsgParams,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  resolveRiebeckiteContentRequest,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  riebeckiteSsgParams,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/server\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PageBody } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { createRoute } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"honox/factory\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> createRoute</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  contentRouteSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/:slug{.+}\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> riebeckiteSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(content)),</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  async</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    const</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> resolved</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> resolveRiebeckiteContentRequest</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(c, content);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (resolved.kind </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"response\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> resolved.response;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (resolved.kind </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"page\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">      return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PageBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{resolved.page.body} />);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    }</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">/* site-specific article composition */</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span></code></pre>\n  </div>\n</figure>\n<p>\n  Keep the frame's HTML policy at the application boundary. A plugin must only\n  return HTML it is responsible for generating; an application must not treat\n  untrusted request input as a page body.\n</p>\n<p>\n  For the complete fields and runtime validation rules, see the\n  <a href=\"/en/docs/reference/plugin-api#pages\">Plugin API</a>.\n</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Page System The Page System lets a plugin provide a standalone page without taking over an application route. It is a capability on the normal RiebeckitePlugin ","tags":[]},{"id":"https://riebeckite.dev/docs/framework/page-system","url":"https://riebeckite.dev/docs/framework/page-system","title":"page-system","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"page-system\">Page System</h1>\n<p>Page System は、Plugin が <strong>Site の route を直接追加せずに独立したページを提供する</strong>ための仕組みです。</p>\n<p>たとえば Plugin が、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/explore</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>/report</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>/tags/example</span></span></code></pre>\n  </div>\n</figure>\n<p>のような独自ページを提供したい場合に使用します。</p>\n<p>Page System がない場合、Plugin ごとに HonoX の route を Site Application へ追加する必要があります。</p>\n<p>Page System では Plugin は「この URL に、このページを提供する」という情報だけを公開し、実際の routing や document の描画は Site が担当します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-eln7re\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 951.375px;\" viewBox=\"0 0 951.375 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-eln7re{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-eln7re .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-eln7re .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-eln7re .error-icon{fill:#552222;}#rr-mermaid-eln7re .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-eln7re .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-eln7re .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-eln7re .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-eln7re .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-eln7re .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-eln7re .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-eln7re .marker{fill:#333333;stroke:#333333;}#rr-mermaid-eln7re .marker.cross{stroke:#333333;}#rr-mermaid-eln7re svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-eln7re p{margin:0;}#rr-mermaid-eln7re .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-eln7re .cluster-label text{fill:#333;}#rr-mermaid-eln7re .cluster-label span{color:#333;}#rr-mermaid-eln7re .cluster-label span p{background-color:transparent;}#rr-mermaid-eln7re .label text,#rr-mermaid-eln7re span{fill:#333;color:#333;}#rr-mermaid-eln7re .node rect,#rr-mermaid-eln7re .node circle,#rr-mermaid-eln7re .node ellipse,#rr-mermaid-eln7re .node polygon,#rr-mermaid-eln7re .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-eln7re .rough-node .label text,#rr-mermaid-eln7re .node .label text,#rr-mermaid-eln7re .image-shape .label,#rr-mermaid-eln7re .icon-shape .label{text-anchor:middle;}#rr-mermaid-eln7re .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-eln7re .rough-node .label,#rr-mermaid-eln7re .node .label,#rr-mermaid-eln7re .image-shape .label,#rr-mermaid-eln7re .icon-shape .label{text-align:center;}#rr-mermaid-eln7re .node.clickable{cursor:pointer;}#rr-mermaid-eln7re .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-eln7re .arrowheadPath{fill:#333333;}#rr-mermaid-eln7re .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-eln7re .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-eln7re .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-eln7re .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-eln7re .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-eln7re .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-eln7re .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-eln7re .cluster text{fill:#333;}#rr-mermaid-eln7re .cluster span{color:#333;}#rr-mermaid-eln7re .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-eln7re .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-eln7re div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-eln7re .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-eln7re rect.text{fill:none;stroke-width:0;}#rr-mermaid-eln7re .icon-shape,#rr-mermaid-eln7re .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-eln7re .icon-shape p,#rr-mermaid-eln7re .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-eln7re .icon-shape .label rect,#rr-mermaid-eln7re .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-eln7re .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-eln7re .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-eln7re .node .neo-node{stroke:#9370DB;}#rr-mermaid-eln7re [data-look=\"neo\"].node rect,#rr-mermaid-eln7re [data-look=\"neo\"].cluster rect,#rr-mermaid-eln7re [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eln7re [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-eln7re [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-eln7re [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eln7re [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-eln7re [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eln7re [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-eln7re [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eln7re [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-eln7re :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-eln7re_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-eln7re_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M112.484,47L116.651,47C120.818,47,129.151,47,136.818,47C144.484,47,151.484,47,154.984,47L158.484,47\" id=\"rr-mermaid-eln7re-L_Plugin_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Page_0\" data-points=\"W3sieCI6MTEyLjQ4NDM3NSwieSI6NDd9LHsieCI6MTM3LjQ4NDM3NSwieSI6NDd9LHsieCI6MTYyLjQ4NDM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eln7re_flowchart-v2-pointEnd)\"></path><path d=\"M306.563,47L310.729,47C314.896,47,323.229,47,330.896,47C338.563,47,345.563,47,349.063,47L352.563,47\" id=\"rr-mermaid-eln7re-L_Page_Resolver_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_Resolver_0\" data-points=\"W3sieCI6MzA2LjU2MjUsInkiOjQ3fSx7IngiOjMzMS41NjI1LCJ5Ijo0N30seyJ4IjozNTYuNTYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eln7re_flowchart-v2-pointEnd)\"></path><path d=\"M555.281,47L559.448,47C563.615,47,571.948,47,579.615,47C587.281,47,594.281,47,597.781,47L601.281,47\" id=\"rr-mermaid-eln7re-L_Resolver_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Site_0\" data-points=\"W3sieCI6NTU1LjI4MTI1LCJ5Ijo0N30seyJ4Ijo1ODAuMjgxMjUsInkiOjQ3fSx7IngiOjYwNS4yODEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eln7re_flowchart-v2-pointEnd)\"></path><path d=\"M774.688,47L778.854,47C783.021,47,791.354,47,799.021,47C806.688,47,813.688,47,817.188,47L820.688,47\" id=\"rr-mermaid-eln7re-L_Site_Browser_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Site_Browser_0\" data-points=\"W3sieCI6Nzc0LjY4NzUsInkiOjQ3fSx7IngiOjc5OS42ODc1LCJ5Ijo0N30seyJ4Ijo4MjQuNjg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-eln7re_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Page_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_Resolver_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Site_Browser_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-eln7re-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(60.2421875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eln7re-flowchart-Page-1\" data-look=\"classic\" transform=\"translate(234.5234375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.0390625\" y=\"-39\" width=\"144.078125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.0390625, -24)\"><rect></rect><foreignObject width=\"84.078125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Type<br>path + body</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eln7re-flowchart-Resolver-2\" data-look=\"classic\" transform=\"translate(455.921875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.359375\" y=\"-27\" width=\"198.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.359375, -12)\"><rect></rect><foreignObject width=\"138.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>共通 Route Resolver</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eln7re-flowchart-Site-3\" data-look=\"classic\" transform=\"translate(689.984375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.703125\" y=\"-27\" width=\"169.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-eln7re-flowchart-Browser-4\" data-look=\"classic\" transform=\"translate(884.03125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.34375\" y=\"-27\" width=\"118.6875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.34375, -12)\"><rect></rect><foreignObject width=\"58.6875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Browser</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-eln7re-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-eln7re-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Page[\"Page Type&#x3C;br/>path + body\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Resolver[\"共通 Route Resolver\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Site[\"Site Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Browser[\"Browser\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin --> Page</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Page --> Resolver</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Resolver --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Site --> Browser</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes</span></span></code></span> は通常の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>RiebeckitePlugin</span></span></code></span> が持つ capability の1つです。</p>\n<p>Page 専用の別種類の Plugin を作るわけではありません。</p>\n<h1 id=\"どんなときに使うか\">どんなときに使うか</h1>\n<p>Page Type は、Plugin が<strong>独立した URL を持つページ</strong>を提供するときに使用します。</p>\n<p>たとえば、</p>\n<ul>\n  <li>Garden Explorer</li>\n  <li>Plugin のレポート画面</li>\n  <li>Plugin が生成する一覧ページ</li>\n  <li>独自の検索・閲覧ページ</li>\n</ul>\n<p>などです。</p>\n<p>一方、記事本文の中へ何かを表示するだけなら Page Type は必要ありません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-1c3ms2\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 837.03125px;\" viewBox=\"0 0 837.03125 446.921875\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-1c3ms2{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-1c3ms2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-1c3ms2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-1c3ms2 .error-icon{fill:#552222;}#rr-mermaid-1c3ms2 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-1c3ms2 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-1c3ms2 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-1c3ms2 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-1c3ms2 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-1c3ms2 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-1c3ms2 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-1c3ms2 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-1c3ms2 .marker.cross{stroke:#333333;}#rr-mermaid-1c3ms2 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-1c3ms2 p{margin:0;}#rr-mermaid-1c3ms2 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-1c3ms2 .cluster-label text{fill:#333;}#rr-mermaid-1c3ms2 .cluster-label span{color:#333;}#rr-mermaid-1c3ms2 .cluster-label span p{background-color:transparent;}#rr-mermaid-1c3ms2 .label text,#rr-mermaid-1c3ms2 span{fill:#333;color:#333;}#rr-mermaid-1c3ms2 .node rect,#rr-mermaid-1c3ms2 .node circle,#rr-mermaid-1c3ms2 .node ellipse,#rr-mermaid-1c3ms2 .node polygon,#rr-mermaid-1c3ms2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-1c3ms2 .rough-node .label text,#rr-mermaid-1c3ms2 .node .label text,#rr-mermaid-1c3ms2 .image-shape .label,#rr-mermaid-1c3ms2 .icon-shape .label{text-anchor:middle;}#rr-mermaid-1c3ms2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-1c3ms2 .rough-node .label,#rr-mermaid-1c3ms2 .node .label,#rr-mermaid-1c3ms2 .image-shape .label,#rr-mermaid-1c3ms2 .icon-shape .label{text-align:center;}#rr-mermaid-1c3ms2 .node.clickable{cursor:pointer;}#rr-mermaid-1c3ms2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-1c3ms2 .arrowheadPath{fill:#333333;}#rr-mermaid-1c3ms2 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-1c3ms2 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-1c3ms2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-1c3ms2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-1c3ms2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-1c3ms2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-1c3ms2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-1c3ms2 .cluster text{fill:#333;}#rr-mermaid-1c3ms2 .cluster span{color:#333;}#rr-mermaid-1c3ms2 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-1c3ms2 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-1c3ms2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-1c3ms2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-1c3ms2 rect.text{fill:none;stroke-width:0;}#rr-mermaid-1c3ms2 .icon-shape,#rr-mermaid-1c3ms2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-1c3ms2 .icon-shape p,#rr-mermaid-1c3ms2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-1c3ms2 .icon-shape .label rect,#rr-mermaid-1c3ms2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-1c3ms2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-1c3ms2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-1c3ms2 .node .neo-node{stroke:#9370DB;}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node rect,#rr-mermaid-1c3ms2 [data-look=\"neo\"].cluster rect,#rr-mermaid-1c3ms2 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1c3ms2 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1c3ms2 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-1c3ms2 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1c3ms2 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-1c3ms2 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-1c3ms2_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M278.729,152.479L260.299,167.72C241.868,182.96,205.006,213.441,186.575,234.181C168.145,254.922,168.145,265.922,168.145,271.422L168.145,276.922\" id=\"rr-mermaid-1c3ms2-L_Q_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Page_0\" data-points=\"W3sieCI6Mjc4LjcyOTM3OTc0MTI4OTk2LCJ5IjoxNTIuNDc5Mzc5NzQxMjg5OTZ9LHsieCI6MTY4LjE0NDUzMTI1LCJ5IjoyNDMuOTIxODc1fSx7IngiOjE2OC4xNDQ1MzEyNSwieSI6MjgwLjkyMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M398.073,142.021L429.967,159.004C461.861,175.988,525.649,209.955,557.543,232.438C589.438,254.922,589.438,265.922,589.438,271.422L589.438,276.922\" id=\"rr-mermaid-1c3ms2-L_Q_Renderer_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Renderer_0\" data-points=\"W3sieCI6Mzk4LjA3MzA2MDA2MTg2NzIsInkiOjE0Mi4wMjA2ODk5MzgxMzI4NX0seyJ4Ijo1ODkuNDM3NSwieSI6MjQzLjkyMTg3NX0seyJ4Ijo1ODkuNDM3NSwieSI6MjgwLjkyMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M120.771,334.922L113.46,339.089C106.149,343.255,91.528,351.589,84.217,359.255C76.906,366.922,76.906,373.922,76.906,377.422L76.906,380.922\" id=\"rr-mermaid-1c3ms2-L_Page_P1_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_P1_0\" data-points=\"W3sieCI6MTIwLjc3MDgwODI5MzI2OTIzLCJ5IjozMzQuOTIxODc1fSx7IngiOjc2LjkwNjI1LCJ5IjozNTkuOTIxODc1fSx7IngiOjc2LjkwNjI1LCJ5IjozODQuOTIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M215.518,334.922L222.829,339.089C230.14,343.255,244.761,351.589,252.072,359.255C259.383,366.922,259.383,373.922,259.383,377.422L259.383,380.922\" id=\"rr-mermaid-1c3ms2-L_Page_P2_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_P2_0\" data-points=\"W3sieCI6MjE1LjUxODI1NDIwNjczMDc3LCJ5IjozMzQuOTIxODc1fSx7IngiOjI1OS4zODI4MTI1LCJ5IjozNTkuOTIxODc1fSx7IngiOjI1OS4zODI4MTI1LCJ5IjozODQuOTIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M525.195,328.885L509.342,334.057C493.49,339.23,461.784,349.576,445.931,358.249C430.078,366.922,430.078,373.922,430.078,377.422L430.078,380.922\" id=\"rr-mermaid-1c3ms2-L_Renderer_R1_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Renderer_R1_0\" data-points=\"W3sieCI6NTI1LjE5NTMxMjUsInkiOjMyOC44ODQ1MTgzOTY0MTE0fSx7IngiOjQzMC4wNzgxMjUsInkiOjM1OS45MjE4NzV9LHsieCI6NDMwLjA3ODEyNSwieSI6Mzg0LjkyMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M589.438,334.922L589.438,339.089C589.438,343.255,589.438,351.589,589.438,359.255C589.438,366.922,589.438,373.922,589.438,377.422L589.438,380.922\" id=\"rr-mermaid-1c3ms2-L_Renderer_R2_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Renderer_R2_0\" data-points=\"W3sieCI6NTg5LjQzNzUsInkiOjMzNC45MjE4NzV9LHsieCI6NTg5LjQzNzUsInkiOjM1OS45MjE4NzV9LHsieCI6NTg5LjQzNzUsInkiOjM4NC45MjE4NzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path><path d=\"M653.68,327.467L671.458,332.876C689.237,338.286,724.794,349.104,742.573,358.013C760.352,366.922,760.352,373.922,760.352,377.422L760.352,380.922\" id=\"rr-mermaid-1c3ms2-L_Renderer_R3_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Renderer_R3_0\" data-points=\"W3sieCI6NjUzLjY3OTY4NzUsInkiOjMyNy40NjczMzM3MDA5MTg3NH0seyJ4Ijo3NjAuMzUxNTYyNSwieSI6MzU5LjkyMTg3NX0seyJ4Ijo3NjAuMzUxNTYyNSwieSI6Mzg0LjkyMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-1c3ms2_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(168.14453125, 243.921875)\"><g class=\"label\" data-id=\"L_Q_Page_0\" transform=\"translate(-76.0078125, -12)\"><foreignObject width=\"152.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>独立したURLを持つページ</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(589.4375, 243.921875)\"><g class=\"label\" data-id=\"L_Q_Renderer_0\" transform=\"translate(-54, -12)\"><foreignObject width=\"108\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>記事本文へ埋め込む</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_P1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_P2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Renderer_R1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Renderer_R2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Renderer_R3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-Q-0\" data-look=\"classic\" transform=\"translate(333.171875, 107.4609375)\"><polygon points=\"99.4609375,0 198.921875,-99.4609375 99.4609375,-198.921875 0,-99.4609375\" class=\"label-container\" transform=\"translate(-98.9609375, 99.4609375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-72.4609375, -12)\"><rect></rect><foreignObject width=\"144.921875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin が何を表示する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-Page-2\" data-look=\"classic\" transform=\"translate(168.14453125, 307.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.140625\" y=\"-27\" width=\"138.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.140625, -12)\"><rect></rect><foreignObject width=\"78.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>pageTypes</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-Renderer-4\" data-look=\"classic\" transform=\"translate(589.4375, 307.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.2421875\" y=\"-27\" width=\"128.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.2421875, -12)\"><rect></rect><foreignObject width=\"68.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>renderers</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-P1-6\" data-look=\"classic\" transform=\"translate(76.90625, 411.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-68.90625\" y=\"-27\" width=\"137.8125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38.90625, -12)\"><rect></rect><foreignObject width=\"77.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>例: /explore</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-P2-8\" data-look=\"classic\" transform=\"translate(259.3828125, 411.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-63.5703125\" y=\"-27\" width=\"127.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-33.5703125, -12)\"><rect></rect><foreignObject width=\"67.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>例: /report</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-R1-10\" data-look=\"classic\" transform=\"translate(430.078125, 411.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-57.125\" y=\"-27\" width=\"114.25\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-27.125, -12)\"><rect></rect><foreignObject width=\"54.25\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Canvas</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-R2-12\" data-look=\"classic\" transform=\"translate(589.4375, 411.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.234375\" y=\"-27\" width=\"104.46875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.234375, -12)\"><rect></rect><foreignObject width=\"44.46875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Bases</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-1c3ms2-flowchart-R3-14\" data-look=\"classic\" transform=\"translate(760.3515625, 411.921875)\"><rect class=\"basic label-container\" style=\"\" x=\"-68.6796875\" y=\"-27\" width=\"137.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38.6796875, -12)\"><rect></rect><foreignObject width=\"77.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Excalidraw</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-1c3ms2-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-1c3ms2-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Q{\"Plugin が何を表示する？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Q -->|\"独立したURLを持つページ\"| Page[\"pageTypes\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Q -->|\"記事本文へ埋め込む\"| Renderer[\"renderers\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Page --> P1[\"例: /explore\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Page --> P2[\"例: /report\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Renderer --> R1[\"Canvas\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Renderer --> R2[\"Bases\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Renderer --> R3[\"Excalidraw\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Canvas、Bases、Excalidraw のように記事内へ埋め込む機能は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderers</span></span></code></span> を使用します。</p>\n<h1 id=\"誰が何を担当するか\">誰が何を担当するか</h1>\n<p>Page System では、Plugin がページ全体を所有するわけではありません。</p>\n<p>責務を次のように分離します。</p>\n<table>\n  <thead>\n    <tr>\n      <th>層</th>\n      <th>責務</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Core</td>\n      <td>Page Type の contract、検証、path 列挙、解決、競合検出</td>\n    </tr>\n    <tr>\n      <td>Plugin</td>\n      <td>Page Type ID、公開 path、framework 非依存の HTML body</td>\n    </tr>\n    <tr>\n      <td>HonoX Integration</td>\n      <td>共通 route resolver、SSG parameter helper</td>\n    </tr>\n    <tr>\n      <td>Site Application</td>\n      <td>route、document frame、metadata、HTML の描画</td>\n    </tr>\n    <tr>\n      <td>Theme</td>\n      <td>token と stable hook による見た目</td>\n    </tr>\n  </tbody>\n</table>\n<p>全体では次のような関係になります。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-bosdci\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 949.890625px;\" viewBox=\"0 0 949.890625 222\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-bosdci{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-bosdci .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-bosdci .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-bosdci .error-icon{fill:#552222;}#rr-mermaid-bosdci .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-bosdci .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-bosdci .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-bosdci .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-bosdci .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-bosdci .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-bosdci .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-bosdci .marker{fill:#333333;stroke:#333333;}#rr-mermaid-bosdci .marker.cross{stroke:#333333;}#rr-mermaid-bosdci svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-bosdci p{margin:0;}#rr-mermaid-bosdci .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-bosdci .cluster-label text{fill:#333;}#rr-mermaid-bosdci .cluster-label span{color:#333;}#rr-mermaid-bosdci .cluster-label span p{background-color:transparent;}#rr-mermaid-bosdci .label text,#rr-mermaid-bosdci span{fill:#333;color:#333;}#rr-mermaid-bosdci .node rect,#rr-mermaid-bosdci .node circle,#rr-mermaid-bosdci .node ellipse,#rr-mermaid-bosdci .node polygon,#rr-mermaid-bosdci .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-bosdci .rough-node .label text,#rr-mermaid-bosdci .node .label text,#rr-mermaid-bosdci .image-shape .label,#rr-mermaid-bosdci .icon-shape .label{text-anchor:middle;}#rr-mermaid-bosdci .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-bosdci .rough-node .label,#rr-mermaid-bosdci .node .label,#rr-mermaid-bosdci .image-shape .label,#rr-mermaid-bosdci .icon-shape .label{text-align:center;}#rr-mermaid-bosdci .node.clickable{cursor:pointer;}#rr-mermaid-bosdci .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-bosdci .arrowheadPath{fill:#333333;}#rr-mermaid-bosdci .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-bosdci .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-bosdci .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-bosdci .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-bosdci .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-bosdci .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-bosdci .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-bosdci .cluster text{fill:#333;}#rr-mermaid-bosdci .cluster span{color:#333;}#rr-mermaid-bosdci .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-bosdci .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-bosdci div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-bosdci .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-bosdci rect.text{fill:none;stroke-width:0;}#rr-mermaid-bosdci .icon-shape,#rr-mermaid-bosdci .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-bosdci .icon-shape p,#rr-mermaid-bosdci .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-bosdci .icon-shape .label rect,#rr-mermaid-bosdci .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-bosdci .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-bosdci .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-bosdci .node .neo-node{stroke:#9370DB;}#rr-mermaid-bosdci [data-look=\"neo\"].node rect,#rr-mermaid-bosdci [data-look=\"neo\"].cluster rect,#rr-mermaid-bosdci [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bosdci [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-bosdci [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-bosdci [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bosdci [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-bosdci [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bosdci [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-bosdci [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bosdci [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-bosdci :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-bosdci_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-bosdci_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M141.375,47L145.542,47C149.708,47,158.042,47,165.708,47C173.375,47,180.375,47,183.875,47L187.375,47\" id=\"rr-mermaid-bosdci-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6MTQxLjM3NSwieSI6NDd9LHsieCI6MTY2LjM3NSwieSI6NDd9LHsieCI6MTkxLjM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-bosdci_flowchart-v2-pointEnd)\"></path><path d=\"M432.813,47L436.979,47C441.146,47,449.479,47,457.146,47C464.813,47,471.813,47,475.313,47L478.813,47\" id=\"rr-mermaid-bosdci-L_Core_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Core_Integration_0\" data-points=\"W3sieCI6NDMyLjgxMjUsInkiOjQ3fSx7IngiOjQ1Ny44MTI1LCJ5Ijo0N30seyJ4Ijo0ODIuODEyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-bosdci_flowchart-v2-pointEnd)\"></path><path d=\"M671.797,47L675.964,47C680.13,47,688.464,47,700.82,50.881C713.176,54.762,729.556,62.525,737.745,66.406L745.935,70.287\" id=\"rr-mermaid-bosdci-L_Integration_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Site_0\" data-points=\"W3sieCI6NjcxLjc5Njg3NSwieSI6NDd9LHsieCI6Njk2Ljc5Njg3NSwieSI6NDd9LHsieCI6NzQ5LjU0OTU2MDU0Njg3NSwieSI6NzJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-bosdci_flowchart-v2-pointEnd)\"></path><path d=\"M632.203,175L642.969,175C653.734,175,675.266,175,694.221,171.119C713.176,167.238,729.556,159.475,737.745,155.594L745.935,151.713\" id=\"rr-mermaid-bosdci-L_Theme_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Site_0\" data-points=\"W3sieCI6NjMyLjIwMzEyNSwieSI6MTc1fSx7IngiOjY5Ni43OTY4NzUsInkiOjE3NX0seyJ4Ijo3NDkuNTQ5NTYwNTQ2ODc1LCJ5IjoxNTB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-bosdci_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Core_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-bosdci-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(74.6875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.6875\" y=\"-39\" width=\"133.375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.6875, -24)\"><rect></rect><foreignObject width=\"73.375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin<br>Pageを提供</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-bosdci-flowchart-Core-1\" data-look=\"classic\" transform=\"translate(312.09375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-120.71875\" y=\"-39\" width=\"241.4375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-90.71875, -24)\"><rect></rect><foreignObject width=\"181.4375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core<br>Page contract / resolution</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-bosdci-flowchart-Integration-2\" data-look=\"classic\" transform=\"translate(577.3046875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.4921875\" y=\"-39\" width=\"188.984375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.4921875, -24)\"><rect></rect><foreignObject width=\"128.984375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>HonoX Integration<br>Routing / SSG</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-bosdci-flowchart-Site-3\" data-look=\"classic\" transform=\"translate(831.84375, 111)\"><rect class=\"basic label-container\" style=\"\" x=\"-110.046875\" y=\"-39\" width=\"220.09375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-80.046875, -24)\"><rect></rect><foreignObject width=\"160.09375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site<br>Document / Rendering</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-bosdci-flowchart-Theme-4\" data-look=\"classic\" transform=\"translate(577.3046875, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.8984375\" y=\"-39\" width=\"109.796875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.8984375, -24)\"><rect></rect><foreignObject width=\"49.796875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme<br>CSS</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-bosdci-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-bosdci-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin&#x3C;br/>Pageを提供\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Core[\"Core&#x3C;br/>Page contract / resolution\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Integration[\"HonoX Integration&#x3C;br/>Routing / SSG\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Site[\"Site&#x3C;br/>Document / Rendering\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Theme[\"Theme&#x3C;br/>CSS\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Core --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Integration --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Theme --> Site</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p><strong>route と document frame は Site Application が所有します</strong>。</p>\n<p>Plugin はページの内容を提供しますが、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"html\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">html</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"html\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"html\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">html</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">head</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">...</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#22863A;--shiki-dark:#85E89D\">body</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">></span></span></code></pre>\n  </div>\n</figure>\n<p>のような document 全体を生成するわけではありません。</p>\n<h1 id=\"page-system-が解決する問題\">Page System が解決する問題</h1>\n<p>Page System 導入前は、独立ページを持つ Plugin ごとに Site 側へ専用 route が必要でした。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-kettok\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 883.578125px;\" viewBox=\"0 0 883.578125 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-kettok{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-kettok .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-kettok .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-kettok .error-icon{fill:#552222;}#rr-mermaid-kettok .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-kettok .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-kettok .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-kettok .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-kettok .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-kettok .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-kettok .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-kettok .marker{fill:#333333;stroke:#333333;}#rr-mermaid-kettok .marker.cross{stroke:#333333;}#rr-mermaid-kettok svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-kettok p{margin:0;}#rr-mermaid-kettok .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-kettok .cluster-label text{fill:#333;}#rr-mermaid-kettok .cluster-label span{color:#333;}#rr-mermaid-kettok .cluster-label span p{background-color:transparent;}#rr-mermaid-kettok .label text,#rr-mermaid-kettok span{fill:#333;color:#333;}#rr-mermaid-kettok .node rect,#rr-mermaid-kettok .node circle,#rr-mermaid-kettok .node ellipse,#rr-mermaid-kettok .node polygon,#rr-mermaid-kettok .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-kettok .rough-node .label text,#rr-mermaid-kettok .node .label text,#rr-mermaid-kettok .image-shape .label,#rr-mermaid-kettok .icon-shape .label{text-anchor:middle;}#rr-mermaid-kettok .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-kettok .rough-node .label,#rr-mermaid-kettok .node .label,#rr-mermaid-kettok .image-shape .label,#rr-mermaid-kettok .icon-shape .label{text-align:center;}#rr-mermaid-kettok .node.clickable{cursor:pointer;}#rr-mermaid-kettok .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-kettok .arrowheadPath{fill:#333333;}#rr-mermaid-kettok .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-kettok .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-kettok .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-kettok .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-kettok .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-kettok .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-kettok .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-kettok .cluster text{fill:#333;}#rr-mermaid-kettok .cluster span{color:#333;}#rr-mermaid-kettok .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-kettok .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-kettok div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-kettok .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-kettok rect.text{fill:none;stroke-width:0;}#rr-mermaid-kettok .icon-shape,#rr-mermaid-kettok .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-kettok .icon-shape p,#rr-mermaid-kettok .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-kettok .icon-shape .label rect,#rr-mermaid-kettok .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-kettok .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-kettok .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-kettok .node .neo-node{stroke:#9370DB;}#rr-mermaid-kettok [data-look=\"neo\"].node rect,#rr-mermaid-kettok [data-look=\"neo\"].cluster rect,#rr-mermaid-kettok [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-kettok [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-kettok [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-kettok [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-kettok [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-kettok [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-kettok [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-kettok [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-kettok [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-kettok :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-kettok_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-kettok_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M127.594,35L131.76,35C135.927,35,144.26,35,151.927,35C159.594,35,166.594,35,170.094,35L173.594,35\" id=\"rr-mermaid-kettok-L_Request_Route_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Request_Route_0\" data-points=\"W3sieCI6MTI3LjU5Mzc1LCJ5IjozNX0seyJ4IjoxNTIuNTkzNzUsInkiOjM1fSx7IngiOjE3Ny41OTM3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-kettok_flowchart-v2-pointEnd)\"></path><path d=\"M348.766,35L352.932,35C357.099,35,365.432,35,373.099,35C380.766,35,387.766,35,391.266,35L394.766,35\" id=\"rr-mermaid-kettok-L_Route_Component_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Route_Component_0\" data-points=\"W3sieCI6MzQ4Ljc2NTYyNSwieSI6MzV9LHsieCI6MzczLjc2NTYyNSwieSI6MzV9LHsieCI6Mzk4Ljc2NTYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-kettok_flowchart-v2-pointEnd)\"></path><path d=\"M609.969,35L614.135,35C618.302,35,626.635,35,634.302,35C641.969,35,648.969,35,652.469,35L655.969,35\" id=\"rr-mermaid-kettok-L_Component_Frame_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Component_Frame_0\" data-points=\"W3sieCI6NjA5Ljk2ODc1LCJ5IjozNX0seyJ4Ijo2MzQuOTY4NzUsInkiOjM1fSx7IngiOjY1OS45Njg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-kettok_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Request_Route_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Route_Component_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Component_Frame_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-kettok-flowchart-Request-0\" data-look=\"classic\" transform=\"translate(67.796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.796875\" y=\"-27\" width=\"119.59375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.796875, -12)\"><rect></rect><foreignObject width=\"59.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Request</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-kettok-flowchart-Route-1\" data-look=\"classic\" transform=\"translate(263.1796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-85.5859375\" y=\"-27\" width=\"171.171875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-55.5859375, -12)\"><rect></rect><foreignObject width=\"111.171875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin専用Route</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-kettok-flowchart-Component-2\" data-look=\"classic\" transform=\"translate(504.3671875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.6015625\" y=\"-27\" width=\"211.203125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.6015625, -12)\"><rect></rect><foreignObject width=\"151.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin専用Component</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-kettok-flowchart-Frame-3\" data-look=\"classic\" transform=\"translate(767.7734375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.8046875\" y=\"-27\" width=\"215.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.8046875, -12)\"><rect></rect><foreignObject width=\"155.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Document Frame</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-kettok-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-kettok-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Request[\"Request\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Route[\"Plugin専用Route\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Component[\"Plugin専用Component\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Frame[\"Site Document Frame\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Request --> Route</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Route --> Component</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Component --> Frame</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>この方式では Plugin を追加するだけでは動かず、Site Application の route も変更する必要があります。</p>\n<p>つまり Plugin と Site の結合が強くなります。</p>\n<p>Page System では、すべての Plugin Page が共通 route resolver に参加します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-pmgjqn\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 831.15625px;\" viewBox=\"0 0 831.15625 278\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-pmgjqn{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-pmgjqn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-pmgjqn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-pmgjqn .error-icon{fill:#552222;}#rr-mermaid-pmgjqn .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-pmgjqn .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-pmgjqn .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-pmgjqn .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-pmgjqn .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-pmgjqn .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-pmgjqn .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-pmgjqn .marker{fill:#333333;stroke:#333333;}#rr-mermaid-pmgjqn .marker.cross{stroke:#333333;}#rr-mermaid-pmgjqn svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-pmgjqn p{margin:0;}#rr-mermaid-pmgjqn .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-pmgjqn .cluster-label text{fill:#333;}#rr-mermaid-pmgjqn .cluster-label span{color:#333;}#rr-mermaid-pmgjqn .cluster-label span p{background-color:transparent;}#rr-mermaid-pmgjqn .label text,#rr-mermaid-pmgjqn span{fill:#333;color:#333;}#rr-mermaid-pmgjqn .node rect,#rr-mermaid-pmgjqn .node circle,#rr-mermaid-pmgjqn .node ellipse,#rr-mermaid-pmgjqn .node polygon,#rr-mermaid-pmgjqn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-pmgjqn .rough-node .label text,#rr-mermaid-pmgjqn .node .label text,#rr-mermaid-pmgjqn .image-shape .label,#rr-mermaid-pmgjqn .icon-shape .label{text-anchor:middle;}#rr-mermaid-pmgjqn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-pmgjqn .rough-node .label,#rr-mermaid-pmgjqn .node .label,#rr-mermaid-pmgjqn .image-shape .label,#rr-mermaid-pmgjqn .icon-shape .label{text-align:center;}#rr-mermaid-pmgjqn .node.clickable{cursor:pointer;}#rr-mermaid-pmgjqn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-pmgjqn .arrowheadPath{fill:#333333;}#rr-mermaid-pmgjqn .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-pmgjqn .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-pmgjqn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-pmgjqn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-pmgjqn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-pmgjqn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-pmgjqn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-pmgjqn .cluster text{fill:#333;}#rr-mermaid-pmgjqn .cluster span{color:#333;}#rr-mermaid-pmgjqn .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-pmgjqn .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-pmgjqn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-pmgjqn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-pmgjqn rect.text{fill:none;stroke-width:0;}#rr-mermaid-pmgjqn .icon-shape,#rr-mermaid-pmgjqn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-pmgjqn .icon-shape p,#rr-mermaid-pmgjqn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-pmgjqn .icon-shape .label rect,#rr-mermaid-pmgjqn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-pmgjqn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-pmgjqn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-pmgjqn .node .neo-node{stroke:#9370DB;}#rr-mermaid-pmgjqn [data-look=\"neo\"].node rect,#rr-mermaid-pmgjqn [data-look=\"neo\"].cluster rect,#rr-mermaid-pmgjqn [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pmgjqn [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-pmgjqn [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-pmgjqn [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pmgjqn [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-pmgjqn [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pmgjqn [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-pmgjqn [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pmgjqn [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-pmgjqn :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-pmgjqn_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M127.594,139L131.76,139C135.927,139,144.26,139,151.927,139C159.594,139,166.594,139,170.094,139L173.594,139\" id=\"rr-mermaid-pmgjqn-L_Request_Catch_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Request_Catch_0\" data-points=\"W3sieCI6MTI3LjU5Mzc1LCJ5IjoxMzl9LHsieCI6MTUyLjU5Mzc1LCJ5IjoxMzl9LHsieCI6MTc3LjU5Mzc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pmgjqn_flowchart-v2-pointEnd)\"></path><path d=\"M347.875,139L352.042,139C356.208,139,364.542,139,372.208,139C379.875,139,386.875,139,390.375,139L393.875,139\" id=\"rr-mermaid-pmgjqn-L_Catch_Resolver_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Catch_Resolver_0\" data-points=\"W3sieCI6MzQ3Ljg3NSwieSI6MTM5fSx7IngiOjM3Mi44NzUsInkiOjEzOX0seyJ4IjozOTcuODc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pmgjqn_flowchart-v2-pointEnd)\"></path><path d=\"M548.582,112L565.794,99.167C583.007,86.333,617.433,60.667,638.146,47.833C658.859,35,665.859,35,669.359,35L672.859,35\" id=\"rr-mermaid-pmgjqn-L_Resolver_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Page_0\" data-points=\"W3sieCI6NTQ4LjU4MTUwNTQwODY1MzgsInkiOjExMn0seyJ4Ijo2NTEuODU5Mzc1LCJ5IjozNX0seyJ4Ijo2NzYuODU5Mzc1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pmgjqn_flowchart-v2-pointEnd)\"></path><path d=\"M626.859,139L631.026,139C635.193,139,643.526,139,653.714,139C663.901,139,675.943,139,681.964,139L687.984,139\" id=\"rr-mermaid-pmgjqn-L_Resolver_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Content_0\" data-points=\"W3sieCI6NjI2Ljg1OTM3NSwieSI6MTM5fSx7IngiOjY1MS44NTkzNzUsInkiOjEzOX0seyJ4Ijo2OTEuOTg0Mzc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pmgjqn_flowchart-v2-pointEnd)\"></path><path d=\"M548.582,166L565.794,178.833C583.007,191.667,617.433,217.333,640.373,230.167C663.313,243,674.766,243,680.492,243L686.219,243\" id=\"rr-mermaid-pmgjqn-L_Resolver_Redirect_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Redirect_0\" data-points=\"W3sieCI6NTQ4LjU4MTUwNTQwODY1MzgsInkiOjE2Nn0seyJ4Ijo2NTEuODU5Mzc1LCJ5IjoyNDN9LHsieCI6NjkwLjIxODc1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-pmgjqn_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Request_Catch_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Catch_Resolver_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Page_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Content_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Redirect_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Request-0\" data-look=\"classic\" transform=\"translate(67.796875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.796875\" y=\"-27\" width=\"119.59375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.796875, -12)\"><rect></rect><foreignObject width=\"59.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Request</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Catch-1\" data-look=\"classic\" transform=\"translate(262.734375, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-85.140625\" y=\"-27\" width=\"170.28125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-55.140625, -12)\"><rect></rect><foreignObject width=\"110.28125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Catch-all Route</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Resolver-2\" data-look=\"classic\" transform=\"translate(512.3671875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.4921875\" y=\"-27\" width=\"228.984375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.4921875, -12)\"><rect></rect><foreignObject width=\"168.984375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>resolveRiebeckiteRoute</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Page-3\" data-look=\"classic\" transform=\"translate(750.0078125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1484375\" y=\"-27\" width=\"146.296875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1484375, -12)\"><rect></rect><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Content-4\" data-look=\"classic\" transform=\"translate(750.0078125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0234375\" y=\"-27\" width=\"116.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0234375, -12)\"><rect></rect><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-pmgjqn-flowchart-Redirect-5\" data-look=\"classic\" transform=\"translate(750.0078125, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.7890625\" y=\"-27\" width=\"119.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.7890625, -12)\"><rect></rect><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Redirect</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-pmgjqn-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-pmgjqn-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Request[\"Request\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Catch[\"Catch-all Route\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Resolver[\"resolveRiebeckiteRoute\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Page[\"Plugin Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Content[\"Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Redirect[\"Redirect\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Request --> Catch</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Catch --> Resolver</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Resolver --> Page</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Resolver --> Content</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Resolver --> Redirect</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>これにより、新しい Plugin Page を追加するたびに HonoX route を追加する必要がありません。</p>\n<h1 id=\"build-と-request-の流れ\">Build と Request の流れ</h1>\n<p>Page System には、大きく2つの処理があります。</p>\n<h2 id=\"build-時\">Build 時</h2>\n<p>Build 時には、Plugin が提供する Page Type から静的生成する URL を集めます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-wspm4g\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 864.640625px;\" viewBox=\"0 0 864.640625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-wspm4g{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-wspm4g .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-wspm4g .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-wspm4g .error-icon{fill:#552222;}#rr-mermaid-wspm4g .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-wspm4g .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-wspm4g .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-wspm4g .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-wspm4g .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-wspm4g .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-wspm4g .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-wspm4g .marker{fill:#333333;stroke:#333333;}#rr-mermaid-wspm4g .marker.cross{stroke:#333333;}#rr-mermaid-wspm4g svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-wspm4g p{margin:0;}#rr-mermaid-wspm4g .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-wspm4g .cluster-label text{fill:#333;}#rr-mermaid-wspm4g .cluster-label span{color:#333;}#rr-mermaid-wspm4g .cluster-label span p{background-color:transparent;}#rr-mermaid-wspm4g .label text,#rr-mermaid-wspm4g span{fill:#333;color:#333;}#rr-mermaid-wspm4g .node rect,#rr-mermaid-wspm4g .node circle,#rr-mermaid-wspm4g .node ellipse,#rr-mermaid-wspm4g .node polygon,#rr-mermaid-wspm4g .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wspm4g .rough-node .label text,#rr-mermaid-wspm4g .node .label text,#rr-mermaid-wspm4g .image-shape .label,#rr-mermaid-wspm4g .icon-shape .label{text-anchor:middle;}#rr-mermaid-wspm4g .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-wspm4g .rough-node .label,#rr-mermaid-wspm4g .node .label,#rr-mermaid-wspm4g .image-shape .label,#rr-mermaid-wspm4g .icon-shape .label{text-align:center;}#rr-mermaid-wspm4g .node.clickable{cursor:pointer;}#rr-mermaid-wspm4g .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-wspm4g .arrowheadPath{fill:#333333;}#rr-mermaid-wspm4g .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-wspm4g .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-wspm4g .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wspm4g .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-wspm4g .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wspm4g .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-wspm4g .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-wspm4g .cluster text{fill:#333;}#rr-mermaid-wspm4g .cluster span{color:#333;}#rr-mermaid-wspm4g .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-wspm4g .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-wspm4g div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-wspm4g .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-wspm4g rect.text{fill:none;stroke-width:0;}#rr-mermaid-wspm4g .icon-shape,#rr-mermaid-wspm4g .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wspm4g .icon-shape p,#rr-mermaid-wspm4g .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-wspm4g .icon-shape .label rect,#rr-mermaid-wspm4g .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wspm4g .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-wspm4g .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-wspm4g .node .neo-node{stroke:#9370DB;}#rr-mermaid-wspm4g [data-look=\"neo\"].node rect,#rr-mermaid-wspm4g [data-look=\"neo\"].cluster rect,#rr-mermaid-wspm4g [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wspm4g [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-wspm4g [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wspm4g [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wspm4g [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-wspm4g [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wspm4g [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-wspm4g [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wspm4g [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wspm4g :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-wspm4g_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-wspm4g_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M193.141,35L197.307,35C201.474,35,209.807,35,217.474,35C225.141,35,232.141,35,235.641,35L239.141,35\" id=\"rr-mermaid-wspm4g-L_Plugin_Paths_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Paths_0\" data-points=\"W3sieCI6MTkzLjE0MDYyNSwieSI6MzV9LHsieCI6MjE4LjE0MDYyNSwieSI6MzV9LHsieCI6MjQzLjE0MDYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wspm4g_flowchart-v2-pointEnd)\"></path><path d=\"M392.078,35L396.245,35C400.411,35,408.745,35,416.411,35C424.078,35,431.078,35,434.578,35L438.078,35\" id=\"rr-mermaid-wspm4g-L_Paths_Params_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Paths_Params_0\" data-points=\"W3sieCI6MzkyLjA3ODEyNSwieSI6MzV9LHsieCI6NDE3LjA3ODEyNSwieSI6MzV9LHsieCI6NDQyLjA3ODEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wspm4g_flowchart-v2-pointEnd)\"></path><path d=\"M623.016,35L627.182,35C631.349,35,639.682,35,647.349,35C655.016,35,662.016,35,665.516,35L669.016,35\" id=\"rr-mermaid-wspm4g-L_Params_Build_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Params_Build_0\" data-points=\"W3sieCI6NjIzLjAxNTYyNSwieSI6MzV9LHsieCI6NjQ4LjAxNTYyNSwieSI6MzV9LHsieCI6NjczLjAxNTYyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wspm4g_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Paths_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Paths_Params_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Params_Build_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-wspm4g-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(100.5703125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.5703125\" y=\"-27\" width=\"185.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.5703125, -12)\"><rect></rect><foreignObject width=\"125.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page Type</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wspm4g-flowchart-Paths-1\" data-look=\"classic\" transform=\"translate(317.609375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.46875\" y=\"-27\" width=\"148.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.46875, -12)\"><rect></rect><foreignObject width=\"88.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Public Paths</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wspm4g-flowchart-Params-2\" data-look=\"classic\" transform=\"translate(532.546875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.46875\" y=\"-27\" width=\"180.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.46875, -12)\"><rect></rect><foreignObject width=\"120.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>SSG Parameters</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wspm4g-flowchart-Build-3\" data-look=\"classic\" transform=\"translate(764.828125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.8125\" y=\"-27\" width=\"183.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.8125, -12)\"><rect></rect><foreignObject width=\"123.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Static Generation</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-wspm4g-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-wspm4g-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin Page Type\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Paths[\"Public Paths\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Params[\"SSG Parameters\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Build[\"Static Generation\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Plugin --> Paths</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Paths --> Params</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Params --> Build</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>たとえば Plugin が、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/report</span></span></code></pre>\n  </div>\n</figure>\n<p>を提供していれば、その path を SSG の生成対象にできます。</p>\n<h2 id=\"request-時\">Request 時</h2>\n<p>Request が来ると、共通 resolver がどの種類のページかを判断します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-52v5u3\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 682.640625px;\" viewBox=\"0 0 682.640625 490\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-52v5u3{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-52v5u3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-52v5u3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-52v5u3 .error-icon{fill:#552222;}#rr-mermaid-52v5u3 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-52v5u3 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-52v5u3 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-52v5u3 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-52v5u3 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-52v5u3 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-52v5u3 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-52v5u3 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-52v5u3 .marker.cross{stroke:#333333;}#rr-mermaid-52v5u3 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-52v5u3 p{margin:0;}#rr-mermaid-52v5u3 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-52v5u3 .cluster-label text{fill:#333;}#rr-mermaid-52v5u3 .cluster-label span{color:#333;}#rr-mermaid-52v5u3 .cluster-label span p{background-color:transparent;}#rr-mermaid-52v5u3 .label text,#rr-mermaid-52v5u3 span{fill:#333;color:#333;}#rr-mermaid-52v5u3 .node rect,#rr-mermaid-52v5u3 .node circle,#rr-mermaid-52v5u3 .node ellipse,#rr-mermaid-52v5u3 .node polygon,#rr-mermaid-52v5u3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-52v5u3 .rough-node .label text,#rr-mermaid-52v5u3 .node .label text,#rr-mermaid-52v5u3 .image-shape .label,#rr-mermaid-52v5u3 .icon-shape .label{text-anchor:middle;}#rr-mermaid-52v5u3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-52v5u3 .rough-node .label,#rr-mermaid-52v5u3 .node .label,#rr-mermaid-52v5u3 .image-shape .label,#rr-mermaid-52v5u3 .icon-shape .label{text-align:center;}#rr-mermaid-52v5u3 .node.clickable{cursor:pointer;}#rr-mermaid-52v5u3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-52v5u3 .arrowheadPath{fill:#333333;}#rr-mermaid-52v5u3 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-52v5u3 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-52v5u3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-52v5u3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-52v5u3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-52v5u3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-52v5u3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-52v5u3 .cluster text{fill:#333;}#rr-mermaid-52v5u3 .cluster span{color:#333;}#rr-mermaid-52v5u3 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-52v5u3 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-52v5u3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-52v5u3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-52v5u3 rect.text{fill:none;stroke-width:0;}#rr-mermaid-52v5u3 .icon-shape,#rr-mermaid-52v5u3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-52v5u3 .icon-shape p,#rr-mermaid-52v5u3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-52v5u3 .icon-shape .label rect,#rr-mermaid-52v5u3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-52v5u3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-52v5u3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-52v5u3 .node .neo-node{stroke:#9370DB;}#rr-mermaid-52v5u3 [data-look=\"neo\"].node rect,#rr-mermaid-52v5u3 [data-look=\"neo\"].cluster rect,#rr-mermaid-52v5u3 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-52v5u3 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-52v5u3 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-52v5u3 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-52v5u3 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-52v5u3 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-52v5u3 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-52v5u3 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-52v5u3 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-52v5u3 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-52v5u3_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-52v5u3_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M346.227,62L346.227,66.167C346.227,70.333,346.227,78.667,346.227,86.333C346.227,94,346.227,101,346.227,104.5L346.227,108\" id=\"rr-mermaid-52v5u3-L_Request_Resolver_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Request_Resolver_0\" data-points=\"W3sieCI6MzQ2LjIyNjU2MjUsInkiOjYyfSx7IngiOjM0Ni4yMjY1NjI1LCJ5Ijo4N30seyJ4IjozNDYuMjI2NTYyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path><path d=\"M346.227,166L346.227,170.167C346.227,174.333,346.227,182.667,346.227,190.333C346.227,198,346.227,205,346.227,208.5L346.227,212\" id=\"rr-mermaid-52v5u3-L_Resolver_Q_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Resolver_Q_0\" data-points=\"W3sieCI6MzQ2LjIyNjU2MjUsInkiOjE2Nn0seyJ4IjozNDYuMjI2NTYyNSwieSI6MTkxfSx7IngiOjM0Ni4yMjY1NjI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path><path d=\"M296.937,304.71L260.972,319.092C225.007,333.473,153.078,362.237,117.113,382.118C81.148,402,81.148,413,81.148,418.5L81.148,424\" id=\"rr-mermaid-52v5u3-L_Q_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Page_0\" data-points=\"W3sieCI6Mjk2LjkzNjY5NzY2MzU4NTg1LCJ5IjozMDQuNzEwMTM1MTYzNTg1ODV9LHsieCI6ODEuMTQ4NDM3NSwieSI6MzkxfSx7IngiOjgxLjE0ODQzNzUsInkiOjQyOH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path><path d=\"M315.74,323.514L306.837,334.761C297.934,346.009,280.127,368.505,271.224,385.252C262.32,402,262.32,413,262.32,418.5L262.32,424\" id=\"rr-mermaid-52v5u3-L_Q_Content_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Content_0\" data-points=\"W3sieCI6MzE1Ljc0MDMwMjgzMjQwMDg2LCJ5IjozMjMuNTEzNzQwMzMyNDAwODZ9LHsieCI6MjYyLjMyMDMxMjUsInkiOjM5MX0seyJ4IjoyNjIuMzIwMzEyNSwieSI6NDI4fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path><path d=\"M376.713,323.514L385.616,334.761C394.519,346.009,412.326,368.505,421.229,385.252C430.133,402,430.133,413,430.133,418.5L430.133,424\" id=\"rr-mermaid-52v5u3-L_Q_Redirect_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_Redirect_0\" data-points=\"W3sieCI6Mzc2LjcxMjgyMjE2NzU5OTE0LCJ5IjozMjMuNTEzNzQwMzMyNDAwODZ9LHsieCI6NDMwLjEzMjgxMjUsInkiOjM5MX0seyJ4Ijo0MzAuMTMyODEyNSwieSI6NDI4fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path><path d=\"M395.3,304.926L430.631,319.272C465.961,333.617,536.621,362.309,571.951,382.154C607.281,402,607.281,413,607.281,418.5L607.281,424\" id=\"rr-mermaid-52v5u3-L_Q_NotFound_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Q_NotFound_0\" data-points=\"W3sieCI6Mzk1LjMwMDM3NjQzMjY5OTA3LCJ5IjozMDQuOTI2MTg2MDY3MzAwOTN9LHsieCI6NjA3LjI4MTI1LCJ5IjozOTF9LHsieCI6NjA3LjI4MTI1LCJ5Ijo0Mjh9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-52v5u3_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Request_Resolver_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Resolver_Q_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(81.1484375, 391)\"><g class=\"label\" data-id=\"L_Q_Page_0\" transform=\"translate(-43.1484375, -12)\"><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(262.3203125, 391)\"><g class=\"label\" data-id=\"L_Q_Content_0\" transform=\"translate(-28.0234375, -12)\"><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(430.1328125, 391)\"><g class=\"label\" data-id=\"L_Q_Redirect_0\" transform=\"translate(-29.7890625, -12)\"><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Redirect</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(607.28125, 391)\"><g class=\"label\" data-id=\"L_Q_NotFound_0\" transform=\"translate(-12, -12)\"><foreignObject width=\"24\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>なし</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Request-0\" data-look=\"classic\" transform=\"translate(346.2265625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.796875\" y=\"-27\" width=\"119.59375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.796875, -12)\"><rect></rect><foreignObject width=\"59.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Request</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Resolver-1\" data-look=\"classic\" transform=\"translate(346.2265625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.4921875\" y=\"-27\" width=\"228.984375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.4921875, -12)\"><rect></rect><foreignObject width=\"168.984375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>resolveRiebeckiteRoute</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Q-5\" data-look=\"classic\" transform=\"translate(346.2265625, 285)\"><polygon points=\"69,0 138,-69 69,-138 0,-69\" class=\"label-container\" transform=\"translate(-68.5, 69)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-42, -12)\"><rect></rect><foreignObject width=\"84\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>何が一致した？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Page-7\" data-look=\"classic\" transform=\"translate(81.1484375, 455)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1484375\" y=\"-27\" width=\"146.296875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1484375, -12)\"><rect></rect><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Content-9\" data-look=\"classic\" transform=\"translate(262.3203125, 455)\"><rect class=\"basic label-container\" style=\"\" x=\"-58.0234375\" y=\"-27\" width=\"116.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-28.0234375, -12)\"><rect></rect><foreignObject width=\"56.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-Redirect-11\" data-look=\"classic\" transform=\"translate(430.1328125, 455)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.7890625\" y=\"-27\" width=\"119.578125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.7890625, -12)\"><rect></rect><foreignObject width=\"59.578125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Redirect</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-52v5u3-flowchart-NotFound-13\" data-look=\"classic\" transform=\"translate(607.28125, 455)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.359375\" y=\"-27\" width=\"134.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.359375, -12)\"><rect></rect><foreignObject width=\"74.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Not Found</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-52v5u3-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-52v5u3-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Request[\"Request\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Resolver[\"resolveRiebeckiteRoute\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Request --> Resolver</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Resolver --> Q{\"何が一致した？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Q -->|\"Plugin Page\"| Page[\"Plugin Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Q -->|\"Content\"| Content[\"Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Q -->|\"Redirect\"| Redirect[\"Redirect\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Q -->|\"なし\"| NotFound[\"Not Found\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Plugin Page が解決された場合、その body を Site の document frame 内へ描画します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-c9t5pg\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 659.734375px;\" viewBox=\"0 0 659.734375 302\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-c9t5pg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-c9t5pg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-c9t5pg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-c9t5pg .error-icon{fill:#552222;}#rr-mermaid-c9t5pg .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-c9t5pg .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-c9t5pg .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-c9t5pg .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-c9t5pg .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-c9t5pg .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-c9t5pg .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-c9t5pg .marker{fill:#333333;stroke:#333333;}#rr-mermaid-c9t5pg .marker.cross{stroke:#333333;}#rr-mermaid-c9t5pg svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-c9t5pg p{margin:0;}#rr-mermaid-c9t5pg .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-c9t5pg .cluster-label text{fill:#333;}#rr-mermaid-c9t5pg .cluster-label span{color:#333;}#rr-mermaid-c9t5pg .cluster-label span p{background-color:transparent;}#rr-mermaid-c9t5pg .label text,#rr-mermaid-c9t5pg span{fill:#333;color:#333;}#rr-mermaid-c9t5pg .node rect,#rr-mermaid-c9t5pg .node circle,#rr-mermaid-c9t5pg .node ellipse,#rr-mermaid-c9t5pg .node polygon,#rr-mermaid-c9t5pg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-c9t5pg .rough-node .label text,#rr-mermaid-c9t5pg .node .label text,#rr-mermaid-c9t5pg .image-shape .label,#rr-mermaid-c9t5pg .icon-shape .label{text-anchor:middle;}#rr-mermaid-c9t5pg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-c9t5pg .rough-node .label,#rr-mermaid-c9t5pg .node .label,#rr-mermaid-c9t5pg .image-shape .label,#rr-mermaid-c9t5pg .icon-shape .label{text-align:center;}#rr-mermaid-c9t5pg .node.clickable{cursor:pointer;}#rr-mermaid-c9t5pg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-c9t5pg .arrowheadPath{fill:#333333;}#rr-mermaid-c9t5pg .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-c9t5pg .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-c9t5pg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-c9t5pg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-c9t5pg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-c9t5pg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-c9t5pg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-c9t5pg .cluster text{fill:#333;}#rr-mermaid-c9t5pg .cluster span{color:#333;}#rr-mermaid-c9t5pg .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-c9t5pg .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-c9t5pg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-c9t5pg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-c9t5pg rect.text{fill:none;stroke-width:0;}#rr-mermaid-c9t5pg .icon-shape,#rr-mermaid-c9t5pg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-c9t5pg .icon-shape p,#rr-mermaid-c9t5pg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-c9t5pg .icon-shape .label rect,#rr-mermaid-c9t5pg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-c9t5pg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-c9t5pg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-c9t5pg .node .neo-node{stroke:#9370DB;}#rr-mermaid-c9t5pg [data-look=\"neo\"].node rect,#rr-mermaid-c9t5pg [data-look=\"neo\"].cluster rect,#rr-mermaid-c9t5pg [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-c9t5pg [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-c9t5pg [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-c9t5pg [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-c9t5pg [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-c9t5pg [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-c9t5pg [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-c9t5pg [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-c9t5pg [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-c9t5pg :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-c9t5pg_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M191.188,47L196.76,47C202.333,47,213.479,47,235.532,61.395C257.585,75.79,290.545,104.579,307.026,118.974L323.506,133.369\" id=\"rr-mermaid-c9t5pg-L_Page_Frame_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_Frame_0\" data-points=\"W3sieCI6MTkxLjE4NzUsInkiOjQ3fSx7IngiOjIyNC42MjUsInkiOjQ3fSx7IngiOjMyNi41MTgyNTE2MTYzNzkzLCJ5IjoxMzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-c9t5pg_flowchart-v2-pointEnd)\"></path><path d=\"M177.383,163L185.257,163C193.13,163,208.878,163,220.251,163C231.625,163,238.625,163,242.125,163L245.625,163\" id=\"rr-mermaid-c9t5pg-L_Theme_Frame_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Frame_0\" data-points=\"W3sieCI6MTc3LjM4MjgxMjUsInkiOjE2M30seyJ4IjoyMjQuNjI1LCJ5IjoxNjN9LHsieCI6MjQ5LjYyNSwieSI6MTYzfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-c9t5pg_flowchart-v2-pointEnd)\"></path><path d=\"M199.625,267L203.792,267C207.958,267,216.292,267,236.321,254.578C256.351,242.155,288.077,217.311,303.939,204.889L319.802,192.466\" id=\"rr-mermaid-c9t5pg-L_Client_Frame_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Client_Frame_0\" data-points=\"W3sieCI6MTk5LjYyNSwieSI6MjY3fSx7IngiOjIyNC42MjUsInkiOjI2N30seyJ4IjozMjIuOTUxNTQ3NDc1OTYxNTUsInkiOjE5MH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-c9t5pg_flowchart-v2-pointEnd)\"></path><path d=\"M465.234,163L469.401,163C473.568,163,481.901,163,489.568,163C497.234,163,504.234,163,507.734,163L511.234,163\" id=\"rr-mermaid-c9t5pg-L_Frame_Browser_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Frame_Browser_0\" data-points=\"W3sieCI6NDY1LjIzNDM3NSwieSI6MTYzfSx7IngiOjQ5MC4yMzQzNzUsInkiOjE2M30seyJ4Ijo1MTUuMjM0Mzc1LCJ5IjoxNjN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-c9t5pg_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_Frame_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Frame_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Client_Frame_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Frame_Browser_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-c9t5pg-flowchart-Page-0\" data-look=\"classic\" transform=\"translate(103.8125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.375\" y=\"-39\" width=\"174.75\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.375, -24)\"><rect></rect><foreignObject width=\"114.75\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page<br>body / metadata</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-c9t5pg-flowchart-Frame-1\" data-look=\"classic\" transform=\"translate(357.4296875, 163)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.8046875\" y=\"-27\" width=\"215.609375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.8046875, -12)\"><rect></rect><foreignObject width=\"155.609375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Document Frame</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-c9t5pg-flowchart-Theme-2\" data-look=\"classic\" transform=\"translate(103.8125, 163)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.5703125\" y=\"-27\" width=\"147.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.5703125, -12)\"><rect></rect><foreignObject width=\"87.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme CSS</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-c9t5pg-flowchart-Client-3\" data-look=\"classic\" transform=\"translate(103.8125, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.8125\" y=\"-27\" width=\"191.625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.8125, -12)\"><rect></rect><foreignObject width=\"131.625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Client Entry</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-c9t5pg-flowchart-Browser-4\" data-look=\"classic\" transform=\"translate(583.484375, 163)\"><rect class=\"basic label-container\" style=\"\" x=\"-68.25\" y=\"-27\" width=\"136.5\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38.25, -12)\"><rect></rect><foreignObject width=\"76.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Final Page</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-c9t5pg-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-c9t5pg-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Page[\"Plugin Page&#x3C;br/>body / metadata\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Frame[\"Site Document Frame\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Theme[\"Theme CSS\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Client[\"Plugin Client Entry\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Browser[\"Final Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Page --> Frame</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Theme --> Frame</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Client --> Frame</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Frame --> Browser</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<h1 id=\"page-type-を作る\">Page Type を作る</h1>\n<p>Page Type は Plugin の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes</span></span></code></span> に定義します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { definePlugin } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> reportPlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">() {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    pageTypes: [</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        id: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">        paths: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">        resolve</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: ({ </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">pathname</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">manifest</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">          pathname </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"/report\"</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">            ?</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">                type: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">                pathname,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">                title: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">                body: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">`&#x3C;p>${</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">manifest</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">.</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">publicEntries</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">.</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">length</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">} published entries&#x3C;/p>`</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">              }</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">            :</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> null</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">      },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    ],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"23\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"24\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>この例では、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>/report</span></span></code></pre>\n  </div>\n</figure>\n<p>というページを Plugin が提供します。</p>\n<p>ページ本文には、到達可能な記事数を表示しています。</p>\n<p>Plugin が HonoX component や route file を作る必要はありません。</p>\n<h1 id=\"manifest-と公開境界\">Manifest と公開境界</h1>\n<p>Page Type の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolve</span></span></code></span> には <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginPageContext</span></span></code></span> が渡されます。</p>\n<p>その中の、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">PluginPageContext.manifest</span></span></code></pre>\n  </div>\n</figure>\n<p>は解決済みの Manifest です。<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entries</span></span></code></span> には <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>draft</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>scheduled</span></span></code></span> も含まれるため、Page の出力には使いません。</p>\n<p>到達可能な URL を網羅する場合は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>publicEntries</span></span></code></span>（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>public</span></span></code></span> と <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>unlisted</span></span></code></span>）、読者へ一覧として見せる場合は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>discoverableEntries</span></span></code></span>（<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>public</span></span></code></span> のみ）を使います。entry ごとに分岐が必要な場合だけ、解決済みの <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entry.publishing</span></span></code></span> を読みます。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-xrcu1g\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 895.984375px;\" viewBox=\"0 0 895.984375 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-xrcu1g{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-xrcu1g .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-xrcu1g .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-xrcu1g .error-icon{fill:#552222;}#rr-mermaid-xrcu1g .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-xrcu1g .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-xrcu1g .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-xrcu1g .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-xrcu1g .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-xrcu1g .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-xrcu1g .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-xrcu1g .marker{fill:#333333;stroke:#333333;}#rr-mermaid-xrcu1g .marker.cross{stroke:#333333;}#rr-mermaid-xrcu1g svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-xrcu1g p{margin:0;}#rr-mermaid-xrcu1g .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-xrcu1g .cluster-label text{fill:#333;}#rr-mermaid-xrcu1g .cluster-label span{color:#333;}#rr-mermaid-xrcu1g .cluster-label span p{background-color:transparent;}#rr-mermaid-xrcu1g .label text,#rr-mermaid-xrcu1g span{fill:#333;color:#333;}#rr-mermaid-xrcu1g .node rect,#rr-mermaid-xrcu1g .node circle,#rr-mermaid-xrcu1g .node ellipse,#rr-mermaid-xrcu1g .node polygon,#rr-mermaid-xrcu1g .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-xrcu1g .rough-node .label text,#rr-mermaid-xrcu1g .node .label text,#rr-mermaid-xrcu1g .image-shape .label,#rr-mermaid-xrcu1g .icon-shape .label{text-anchor:middle;}#rr-mermaid-xrcu1g .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-xrcu1g .rough-node .label,#rr-mermaid-xrcu1g .node .label,#rr-mermaid-xrcu1g .image-shape .label,#rr-mermaid-xrcu1g .icon-shape .label{text-align:center;}#rr-mermaid-xrcu1g .node.clickable{cursor:pointer;}#rr-mermaid-xrcu1g .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-xrcu1g .arrowheadPath{fill:#333333;}#rr-mermaid-xrcu1g .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-xrcu1g .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-xrcu1g .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-xrcu1g .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-xrcu1g .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-xrcu1g .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-xrcu1g .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-xrcu1g .cluster text{fill:#333;}#rr-mermaid-xrcu1g .cluster span{color:#333;}#rr-mermaid-xrcu1g .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-xrcu1g .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-xrcu1g div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-xrcu1g .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-xrcu1g rect.text{fill:none;stroke-width:0;}#rr-mermaid-xrcu1g .icon-shape,#rr-mermaid-xrcu1g .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-xrcu1g .icon-shape p,#rr-mermaid-xrcu1g .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-xrcu1g .icon-shape .label rect,#rr-mermaid-xrcu1g .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-xrcu1g .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-xrcu1g .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-xrcu1g .node .neo-node{stroke:#9370DB;}#rr-mermaid-xrcu1g [data-look=\"neo\"].node rect,#rr-mermaid-xrcu1g [data-look=\"neo\"].cluster rect,#rr-mermaid-xrcu1g [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xrcu1g [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-xrcu1g [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-xrcu1g [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xrcu1g [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-xrcu1g [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xrcu1g [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-xrcu1g [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xrcu1g [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-xrcu1g :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-xrcu1g_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M146.266,47L150.432,47C154.599,47,162.932,47,170.599,47C178.266,47,185.266,47,188.766,47L192.266,47\" id=\"rr-mermaid-xrcu1g-L_All_Publish_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_All_Publish_0\" data-points=\"W3sieCI6MTQ2LjI2NTYyNSwieSI6NDd9LHsieCI6MTcxLjI2NTYyNSwieSI6NDd9LHsieCI6MTk2LjI2NTYyNSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xrcu1g_flowchart-v2-pointEnd)\"></path><path d=\"M381.688,47L385.854,47C390.021,47,398.354,47,406.021,47C413.688,47,420.688,47,424.188,47L427.688,47\" id=\"rr-mermaid-xrcu1g-L_Publish_Public_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Publish_Public_0\" data-points=\"W3sieCI6MzgxLjY4NzUsInkiOjQ3fSx7IngiOjQwNi42ODc1LCJ5Ijo0N30seyJ4Ijo0MzEuNjg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xrcu1g_flowchart-v2-pointEnd)\"></path><path d=\"M691.688,47L695.854,47C700.021,47,708.354,47,716.021,47C723.688,47,730.688,47,734.188,47L737.688,47\" id=\"rr-mermaid-xrcu1g-L_Public_Page_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Public_Page_0\" data-points=\"W3sieCI6NjkxLjY4NzUsInkiOjQ3fSx7IngiOjcxNi42ODc1LCJ5Ijo0N30seyJ4Ijo3NDEuNjg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-xrcu1g_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_All_Publish_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Publish_Public_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Public_Page_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-xrcu1g-flowchart-All-0\" data-look=\"classic\" transform=\"translate(77.1328125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.1328125\" y=\"-27\" width=\"138.265625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.1328125, -12)\"><rect></rect><foreignObject width=\"78.265625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>All Content</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xrcu1g-flowchart-Publish-1\" data-look=\"classic\" transform=\"translate(288.9765625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.7109375\" y=\"-27\" width=\"185.421875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.7109375, -12)\"><rect></rect><foreignObject width=\"125.421875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Publish Boundary</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xrcu1g-flowchart-Public-2\" data-look=\"classic\" transform=\"translate(561.6875, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>publicEntries / discoverableEntries</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-xrcu1g-flowchart-Page-3\" data-look=\"classic\" transform=\"translate(814.8359375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1484375\" y=\"-27\" width=\"146.296875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1484375, -12)\"><rect></rect><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-xrcu1g-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-xrcu1g-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    All[\"All Content\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Publish[\"Publish Boundary\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Public[\"publicEntries / discoverableEntries\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Page[\"Plugin Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    All --> Publish</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Publish --> Public</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Public --> Page</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>非公開コンテンツを Plugin Page 側で独自に探索して表示する設計にはしません。</p>\n<p>これによって Page System も通常の Site と同じ公開境界を維持できます。</p>\n<h1 id=\"page-type-id\">Page Type ID</h1>\n<p>各 Page Type には ID が必要です。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">id</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.report\"</span></span></code></pre>\n  </div>\n</figure>\n<p>Page Type ID は、すべての Plugin を通して一意である必要があります。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>riebeckite.garden-explorer</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>example.report</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>example.search</span></span></code></pre>\n  </div>\n</figure>\n<p>のように Plugin や用途が分かる namespace を持たせると衝突を避けやすくなります。</p>\n<h1 id=\"path\">Path</h1>\n<p>静的なページは <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>paths</span></span></code></span> に公開 path を指定します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">paths</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">]</span></span></code></pre>\n  </div>\n</figure>\n<p>複数のページを提供することもできます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">paths</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: [</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">  \"/report\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">  \"/report/archive\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">]</span></span></code></pre>\n  </div>\n</figure>\n<p>動的ページを静的生成する場合は、SSG path を <strong><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest.publicEntries</span></span></code></span> から導出</strong>します。</p>\n<p>filesystem を独自に scan して path を作るのではなく、Content System が解決した公開状態を利用してください。</p>\n<h1 id=\"page-type-の競合\">Page Type の競合</h1>\n<p>複数の Page Type が同じ URL に一致する可能性があります。</p>\n<p>その場合は <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>priority</span></span></code></span> を使って解決します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-nlb8cu\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 367.78125px;\" viewBox=\"0 0 367.78125 478.015625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-nlb8cu{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-nlb8cu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-nlb8cu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-nlb8cu .error-icon{fill:#552222;}#rr-mermaid-nlb8cu .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-nlb8cu .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-nlb8cu .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-nlb8cu .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-nlb8cu .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-nlb8cu .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-nlb8cu .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-nlb8cu .marker{fill:#333333;stroke:#333333;}#rr-mermaid-nlb8cu .marker.cross{stroke:#333333;}#rr-mermaid-nlb8cu svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-nlb8cu p{margin:0;}#rr-mermaid-nlb8cu .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-nlb8cu .cluster-label text{fill:#333;}#rr-mermaid-nlb8cu .cluster-label span{color:#333;}#rr-mermaid-nlb8cu .cluster-label span p{background-color:transparent;}#rr-mermaid-nlb8cu .label text,#rr-mermaid-nlb8cu span{fill:#333;color:#333;}#rr-mermaid-nlb8cu .node rect,#rr-mermaid-nlb8cu .node circle,#rr-mermaid-nlb8cu .node ellipse,#rr-mermaid-nlb8cu .node polygon,#rr-mermaid-nlb8cu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-nlb8cu .rough-node .label text,#rr-mermaid-nlb8cu .node .label text,#rr-mermaid-nlb8cu .image-shape .label,#rr-mermaid-nlb8cu .icon-shape .label{text-anchor:middle;}#rr-mermaid-nlb8cu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-nlb8cu .rough-node .label,#rr-mermaid-nlb8cu .node .label,#rr-mermaid-nlb8cu .image-shape .label,#rr-mermaid-nlb8cu .icon-shape .label{text-align:center;}#rr-mermaid-nlb8cu .node.clickable{cursor:pointer;}#rr-mermaid-nlb8cu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-nlb8cu .arrowheadPath{fill:#333333;}#rr-mermaid-nlb8cu .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-nlb8cu .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-nlb8cu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-nlb8cu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-nlb8cu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-nlb8cu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-nlb8cu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-nlb8cu .cluster text{fill:#333;}#rr-mermaid-nlb8cu .cluster span{color:#333;}#rr-mermaid-nlb8cu .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-nlb8cu .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-nlb8cu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-nlb8cu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-nlb8cu rect.text{fill:none;stroke-width:0;}#rr-mermaid-nlb8cu .icon-shape,#rr-mermaid-nlb8cu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-nlb8cu .icon-shape p,#rr-mermaid-nlb8cu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-nlb8cu .icon-shape .label rect,#rr-mermaid-nlb8cu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-nlb8cu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-nlb8cu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-nlb8cu .node .neo-node{stroke:#9370DB;}#rr-mermaid-nlb8cu [data-look=\"neo\"].node rect,#rr-mermaid-nlb8cu [data-look=\"neo\"].cluster rect,#rr-mermaid-nlb8cu [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nlb8cu [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-nlb8cu [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-nlb8cu [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nlb8cu [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-nlb8cu [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nlb8cu [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-nlb8cu [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nlb8cu [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-nlb8cu :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-nlb8cu_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M131.518,62L123.469,66.167C115.421,70.333,99.324,78.667,91.275,86.333C83.227,94,83.227,101,83.227,104.5L83.227,108\" id=\"rr-mermaid-nlb8cu-L_Path_A_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Path_A_0\" data-points=\"W3sieCI6MTMxLjUxNzU3ODEyNSwieSI6NjJ9LHsieCI6ODMuMjI2NTYyNSwieSI6ODd9LHsieCI6ODMuMjI2NTYyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nlb8cu_flowchart-v2-pointEnd)\"></path><path d=\"M235.826,62L243.875,66.167C251.923,70.333,268.02,78.667,276.069,86.333C284.117,94,284.117,101,284.117,104.5L284.117,108\" id=\"rr-mermaid-nlb8cu-L_Path_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Path_B_0\" data-points=\"W3sieCI6MjM1LjgyNjE3MTg3NSwieSI6NjJ9LHsieCI6Mjg0LjExNzE4NzUsInkiOjg3fSx7IngiOjI4NC4xMTcxODc1LCJ5IjoxMTJ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nlb8cu_flowchart-v2-pointEnd)\"></path><path d=\"M83.227,190L83.227,194.167C83.227,198.333,83.227,206.667,94.596,219.437C105.966,232.207,128.706,249.415,140.076,258.019L151.446,266.622\" id=\"rr-mermaid-nlb8cu-L_A_Compare_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_Compare_0\" data-points=\"W3sieCI6ODMuMjI2NTYyNSwieSI6MTkwfSx7IngiOjgzLjIyNjU2MjUsInkiOjIxNX0seyJ4IjoxNTQuNjM1ODU5NTM0MTE0MDUsInkiOjI2OS4wMzYwMTU0NjU4ODU5NX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nlb8cu_flowchart-v2-pointEnd)\"></path><path d=\"M284.117,190L284.117,194.167C284.117,198.333,284.117,206.667,272.747,219.437C261.377,232.207,238.637,249.415,227.268,258.019L215.898,266.622\" id=\"rr-mermaid-nlb8cu-L_B_Compare_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_Compare_0\" data-points=\"W3sieCI6Mjg0LjExNzE4NzUsInkiOjE5MH0seyJ4IjoyODQuMTE3MTg3NSwieSI6MjE1fSx7IngiOjIxMi43MDc4OTA0NjU4ODU5NSwieSI6MjY5LjAzNjAxNTQ2NTg4NTk1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nlb8cu_flowchart-v2-pointEnd)\"></path><path d=\"M183.672,342.016L183.672,348.182C183.672,354.349,183.672,366.682,183.672,378.349C183.672,390.016,183.672,401.016,183.672,406.516L183.672,412.016\" id=\"rr-mermaid-nlb8cu-L_Compare_Result_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Compare_Result_0\" data-points=\"W3sieCI6MTgzLjY3MTg3NSwieSI6MzQyLjAxNTYyNX0seyJ4IjoxODMuNjcxODc1LCJ5IjozNzkuMDE1NjI1fSx7IngiOjE4My42NzE4NzUsInkiOjQxNi4wMTU2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-nlb8cu_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Path_A_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Path_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_Compare_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_Compare_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(183.671875, 379.015625)\"><g class=\"label\" data-id=\"L_Compare_Result_0\" transform=\"translate(-25.5625, -12)\"><foreignObject width=\"51.125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>B が高い</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-nlb8cu-flowchart-Path-0\" data-look=\"classic\" transform=\"translate(183.671875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.125\" y=\"-27\" width=\"106.25\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.125, -12)\"><rect></rect><foreignObject width=\"46.25\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>/report</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nlb8cu-flowchart-A-1\" data-look=\"classic\" transform=\"translate(83.2265625, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-75.2265625\" y=\"-39\" width=\"150.453125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-45.2265625, -24)\"><rect></rect><foreignObject width=\"90.453125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Type A<br>priority: 10</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nlb8cu-flowchart-B-2\" data-look=\"classic\" transform=\"translate(284.1171875, 151)\"><rect class=\"basic label-container\" style=\"\" x=\"-75.6640625\" y=\"-39\" width=\"151.328125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-45.6640625, -24)\"><rect></rect><foreignObject width=\"91.328125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Type B<br>priority: 20</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nlb8cu-flowchart-Compare-8\" data-look=\"classic\" transform=\"translate(183.671875, 291.0078125)\"><polygon points=\"51.0078125,0 102.015625,-51.0078125 51.0078125,-102.015625 0,-51.0078125\" class=\"label-container\" transform=\"translate(-50.5078125, 51.0078125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-24.0078125, -12)\"><rect></rect><foreignObject width=\"48.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>priority</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-nlb8cu-flowchart-Result-12\" data-look=\"classic\" transform=\"translate(183.671875, 443.015625)\"><rect class=\"basic label-container\" style=\"\" x=\"-75.6640625\" y=\"-27\" width=\"151.328125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-45.6640625, -12)\"><rect></rect><foreignObject width=\"91.328125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Page Type B</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-nlb8cu-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-nlb8cu-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Path[\"/report\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    A[\"Page Type A&#x3C;br/>priority: 10\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    B[\"Page Type B&#x3C;br/>priority: 20\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Path --> A</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Path --> B</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    A --> Compare{\"priority\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    B --> Compare</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Compare -->|\"B が高い\"| Result[\"Page Type B\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>最も高い <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>priority</span></span></code></span> を持つ Page Type が選ばれます。</p>\n<p>ただし、同じ最大 priority の Page Type が複数一致した場合は、どちらかを暗黙的に選びません。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-s3h72r\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 415.578125px;\" viewBox=\"0 0 415.578125 422.015625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-s3h72r{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-s3h72r .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-s3h72r .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-s3h72r .error-icon{fill:#552222;}#rr-mermaid-s3h72r .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-s3h72r .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-s3h72r .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-s3h72r .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-s3h72r .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-s3h72r .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-s3h72r .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-s3h72r .marker{fill:#333333;stroke:#333333;}#rr-mermaid-s3h72r .marker.cross{stroke:#333333;}#rr-mermaid-s3h72r svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-s3h72r p{margin:0;}#rr-mermaid-s3h72r .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-s3h72r .cluster-label text{fill:#333;}#rr-mermaid-s3h72r .cluster-label span{color:#333;}#rr-mermaid-s3h72r .cluster-label span p{background-color:transparent;}#rr-mermaid-s3h72r .label text,#rr-mermaid-s3h72r span{fill:#333;color:#333;}#rr-mermaid-s3h72r .node rect,#rr-mermaid-s3h72r .node circle,#rr-mermaid-s3h72r .node ellipse,#rr-mermaid-s3h72r .node polygon,#rr-mermaid-s3h72r .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-s3h72r .rough-node .label text,#rr-mermaid-s3h72r .node .label text,#rr-mermaid-s3h72r .image-shape .label,#rr-mermaid-s3h72r .icon-shape .label{text-anchor:middle;}#rr-mermaid-s3h72r .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-s3h72r .rough-node .label,#rr-mermaid-s3h72r .node .label,#rr-mermaid-s3h72r .image-shape .label,#rr-mermaid-s3h72r .icon-shape .label{text-align:center;}#rr-mermaid-s3h72r .node.clickable{cursor:pointer;}#rr-mermaid-s3h72r .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-s3h72r .arrowheadPath{fill:#333333;}#rr-mermaid-s3h72r .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-s3h72r .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-s3h72r .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-s3h72r .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-s3h72r .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-s3h72r .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-s3h72r .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-s3h72r .cluster text{fill:#333;}#rr-mermaid-s3h72r .cluster span{color:#333;}#rr-mermaid-s3h72r .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-s3h72r .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-s3h72r div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-s3h72r .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-s3h72r rect.text{fill:none;stroke-width:0;}#rr-mermaid-s3h72r .icon-shape,#rr-mermaid-s3h72r .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-s3h72r .icon-shape p,#rr-mermaid-s3h72r .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-s3h72r .icon-shape .label rect,#rr-mermaid-s3h72r .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-s3h72r .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-s3h72r .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-s3h72r .node .neo-node{stroke:#9370DB;}#rr-mermaid-s3h72r [data-look=\"neo\"].node rect,#rr-mermaid-s3h72r [data-look=\"neo\"].cluster rect,#rr-mermaid-s3h72r [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s3h72r [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-s3h72r [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-s3h72r [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s3h72r [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-s3h72r [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s3h72r [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-s3h72r [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s3h72r [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s3h72r :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-s3h72r_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-s3h72r_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M218.504,62L218.504,66.167C218.504,70.333,218.504,78.667,218.504,86.333C218.504,94,218.504,101,218.504,104.5L218.504,108\" id=\"rr-mermaid-s3h72r-L_Match_Priority_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Match_Priority_0\" data-points=\"W3sieCI6MjE4LjUwMzkwNjI1LCJ5Ijo2Mn0seyJ4IjoyMTguNTAzOTA2MjUsInkiOjg3fSx7IngiOjIxOC41MDM5MDYyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s3h72r_flowchart-v2-pointEnd)\"></path><path d=\"M177.137,244.649L165.299,257.71C153.461,270.771,129.785,296.893,117.947,315.454C106.109,334.016,106.109,345.016,106.109,350.516L106.109,356.016\" id=\"rr-mermaid-s3h72r-L_Priority_Resolve_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Priority_Resolve_0\" data-points=\"W3sieCI6MTc3LjEzNzEzMjM1OTc3NTQ1LCJ5IjoyNDQuNjQ4ODUxMTA5Nzc1NDV9LHsieCI6MTA2LjEwOTM3NSwieSI6MzIzLjAxNTYyNX0seyJ4IjoxMDYuMTA5Mzc1LCJ5IjozNjAuMDE1NjI1fV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s3h72r_flowchart-v2-pointEnd)\"></path><path d=\"M259.871,244.649L271.709,257.71C283.547,270.771,307.223,296.893,319.06,315.454C330.898,334.016,330.898,345.016,330.898,350.516L330.898,356.016\" id=\"rr-mermaid-s3h72r-L_Priority_Error_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Priority_Error_0\" data-points=\"W3sieCI6MjU5Ljg3MDY4MDE0MDIyNDYsInkiOjI0NC42NDg4NTExMDk3NzU0NX0seyJ4IjozMzAuODk4NDM3NSwieSI6MzIzLjAxNTYyNX0seyJ4IjozMzAuODk4NDM3NSwieSI6MzYwLjAxNTYyNX1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s3h72r_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Match_Priority_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(106.109375, 323.015625)\"><g class=\"label\" data-id=\"L_Priority_Resolve_0\" transform=\"translate(-13.0546875, -12)\"><foreignObject width=\"26.109375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(330.8984375, 323.015625)\"><g class=\"label\" data-id=\"L_Priority_Error_0\" transform=\"translate(-10.2265625, -12)\"><foreignObject width=\"20.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-s3h72r-flowchart-Match-0\" data-look=\"classic\" transform=\"translate(218.50390625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.109375\" y=\"-27\" width=\"196.21875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.109375, -12)\"><rect></rect><foreignObject width=\"136.21875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>複数Page Typeが一致</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s3h72r-flowchart-Priority-1\" data-look=\"classic\" transform=\"translate(218.50390625, 199.0078125)\"><polygon points=\"87.0078125,0 174.015625,-87.0078125 87.0078125,-174.015625 0,-87.0078125\" class=\"label-container\" transform=\"translate(-86.5078125, 87.0078125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-60.0078125, -12)\"><rect></rect><foreignObject width=\"120.015625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>最大priorityは一意？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s3h72r-flowchart-Resolve-5\" data-look=\"classic\" transform=\"translate(106.109375, 387.015625)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.109375\" y=\"-27\" width=\"196.21875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.109375, -12)\"><rect></rect><foreignObject width=\"136.21875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>そのPage Typeを使用</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s3h72r-flowchart-Error-7\" data-look=\"classic\" transform=\"translate(330.8984375, 387.015625)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.6796875\" y=\"-27\" width=\"153.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.6796875, -12)\"><rect></rect><foreignObject width=\"93.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Conflict Error</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-s3h72r-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-s3h72r-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart TD</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Match[\"複数Page Typeが一致\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Priority{\"最大priorityは一意？\"}</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Match --> Priority</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Priority -->|Yes| Resolve[\"そのPage Typeを使用\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Priority -->|No| Error[\"Conflict Error\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>競合を明示的なエラーにすることで、Plugin の登録順などによって結果が変わることを防ぎます。</p>\n<h1 id=\"honox-site-へ接続する\">HonoX Site へ接続する</h1>\n<p>Plugin Page を利用する HonoX Site には、共通の catch-all route が必要です。</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>create-riebeckite</span></span></code></span> などで生成された Site には、必要な構成があらかじめ含まれています。</p>\n<p>概念的には次のように接続します。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"tsx\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">tsx</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"tsx\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"tsx\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  contentRouteSsgParams,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  resolveRiebeckiteContentRequest,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  riebeckiteSsgParams,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/server\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { PageBody } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/honox/ui\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { createRoute } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"honox/factory\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> createRoute</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  contentRouteSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/:slug{.+}\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> riebeckiteSsgParams</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(content)),</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  async</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">c</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    const</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> resolved</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> resolveRiebeckiteContentRequest</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(c, content);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (resolved.kind </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"response\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> resolved.response;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (resolved.kind </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"page\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"17\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">      return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">PageBody</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> html</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{resolved.page.body} />);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"18\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    }</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"19\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"20\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> c.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">render</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">/* Site 固有の article composition */</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"21\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"22\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span></code></pre>\n  </div>\n</figure>\n<p>通常の Site 利用者が Plugin ごとにこの route を追加する必要はありません。</p>\n<p>共通 route が Plugin Page をまとめて解決します。root <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span> も同じ仕組みを共有する <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteHomeRequest(c, content)</span></span></code></span> が解決します。</p>\n<h1 id=\"page-が返せるもの\">Page が返せるもの</h1>\n<p>Plugin Page は HTML body に加えて、必要に応じてページの metadata を提供できます。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>body</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>title</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>description</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>headTags</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>language</span></span></code></pre>\n  </div>\n</figure>\n<p>などです。</p>\n<p>ただし、Plugin がそれらを<strong>どの位置へ描画するかまで決定するわけではありません</strong>。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-wm9ja5\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 749.3125px;\" viewBox=\"0 0 749.3125 486\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-wm9ja5{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-wm9ja5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-wm9ja5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-wm9ja5 .error-icon{fill:#552222;}#rr-mermaid-wm9ja5 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-wm9ja5 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-wm9ja5 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-wm9ja5 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-wm9ja5 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-wm9ja5 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-wm9ja5 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-wm9ja5 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-wm9ja5 .marker.cross{stroke:#333333;}#rr-mermaid-wm9ja5 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-wm9ja5 p{margin:0;}#rr-mermaid-wm9ja5 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-wm9ja5 .cluster-label text{fill:#333;}#rr-mermaid-wm9ja5 .cluster-label span{color:#333;}#rr-mermaid-wm9ja5 .cluster-label span p{background-color:transparent;}#rr-mermaid-wm9ja5 .label text,#rr-mermaid-wm9ja5 span{fill:#333;color:#333;}#rr-mermaid-wm9ja5 .node rect,#rr-mermaid-wm9ja5 .node circle,#rr-mermaid-wm9ja5 .node ellipse,#rr-mermaid-wm9ja5 .node polygon,#rr-mermaid-wm9ja5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wm9ja5 .rough-node .label text,#rr-mermaid-wm9ja5 .node .label text,#rr-mermaid-wm9ja5 .image-shape .label,#rr-mermaid-wm9ja5 .icon-shape .label{text-anchor:middle;}#rr-mermaid-wm9ja5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-wm9ja5 .rough-node .label,#rr-mermaid-wm9ja5 .node .label,#rr-mermaid-wm9ja5 .image-shape .label,#rr-mermaid-wm9ja5 .icon-shape .label{text-align:center;}#rr-mermaid-wm9ja5 .node.clickable{cursor:pointer;}#rr-mermaid-wm9ja5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-wm9ja5 .arrowheadPath{fill:#333333;}#rr-mermaid-wm9ja5 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-wm9ja5 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-wm9ja5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wm9ja5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-wm9ja5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wm9ja5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-wm9ja5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-wm9ja5 .cluster text{fill:#333;}#rr-mermaid-wm9ja5 .cluster span{color:#333;}#rr-mermaid-wm9ja5 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-wm9ja5 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-wm9ja5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-wm9ja5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-wm9ja5 rect.text{fill:none;stroke-width:0;}#rr-mermaid-wm9ja5 .icon-shape,#rr-mermaid-wm9ja5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-wm9ja5 .icon-shape p,#rr-mermaid-wm9ja5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-wm9ja5 .icon-shape .label rect,#rr-mermaid-wm9ja5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-wm9ja5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-wm9ja5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-wm9ja5 .node .neo-node{stroke:#9370DB;}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node rect,#rr-mermaid-wm9ja5 [data-look=\"neo\"].cluster rect,#rr-mermaid-wm9ja5 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wm9ja5 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wm9ja5 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-wm9ja5 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wm9ja5 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-wm9ja5 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-wm9ja5_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M70.269,216L81.471,185.833C92.674,155.667,115.079,95.333,133.338,65.167C151.596,35,165.708,35,172.764,35L179.82,35\" id=\"rr-mermaid-wm9ja5-L_Plugin_Body_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Body_0\" data-points=\"W3sieCI6NzAuMjY4ODE3NjA4MTczMDgsInkiOjIxNn0seyJ4IjoxMzcuNDg0Mzc1LCJ5IjozNX0seyJ4IjoxODMuODIwMzEyNSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M80.295,216L89.827,203.167C99.358,190.333,118.421,164.667,135.825,151.833C153.229,139,168.974,139,176.846,139L184.719,139\" id=\"rr-mermaid-wm9ja5-L_Plugin_Title_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Title_0\" data-points=\"W3sieCI6ODAuMjk1NDQ3NzE2MzQ2MTYsInkiOjIxNn0seyJ4IjoxMzcuNDg0Mzc1LCJ5IjoxMzl9LHsieCI6MTg4LjcxODc1LCJ5IjoxMzl9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M112.484,243L116.651,243C120.818,243,129.151,243,136.818,243C144.484,243,151.484,243,154.984,243L158.484,243\" id=\"rr-mermaid-wm9ja5-L_Plugin_Description_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Description_0\" data-points=\"W3sieCI6MTEyLjQ4NDM3NSwieSI6MjQzfSx7IngiOjEzNy40ODQzNzUsInkiOjI0M30seyJ4IjoxNjIuNDg0Mzc1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M80.295,270L89.827,282.833C99.358,295.667,118.421,321.333,132.118,334.167C145.815,347,154.146,347,158.311,347L162.477,347\" id=\"rr-mermaid-wm9ja5-L_Plugin_Head_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Head_0\" data-points=\"W3sieCI6ODAuMjk1NDQ3NzE2MzQ2MTYsInkiOjI3MH0seyJ4IjoxMzcuNDg0Mzc1LCJ5IjozNDd9LHsieCI6MTY2LjQ3NjU2MjUsInkiOjM0N31d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M70.269,270L81.471,300.167C92.674,330.333,115.079,390.667,130.743,420.833C146.406,451,155.328,451,159.789,451L164.25,451\" id=\"rr-mermaid-wm9ja5-L_Plugin_Language_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Language_0\" data-points=\"W3sieCI6NzAuMjY4ODE3NjA4MTczMDgsInkiOjI3MH0seyJ4IjoxMzcuNDg0Mzc1LCJ5Ijo0NTF9LHsieCI6MTY4LjI1LCJ5Ijo0NTF9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M278.523,35L286.246,35C293.969,35,309.414,35,332.736,64.577C356.058,94.154,387.257,153.308,402.857,182.885L418.456,212.462\" id=\"rr-mermaid-wm9ja5-L_Body_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Body_Site_0\" data-points=\"W3sieCI6Mjc4LjUyMzQzNzUsInkiOjM1fSx7IngiOjMyNC44NTkzNzUsInkiOjM1fSx7IngiOjQyMC4zMjIxOTA1MDQ4MDc3LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M273.625,139L282.164,139C290.703,139,307.781,139,329.374,151.375C350.966,163.749,377.072,188.499,390.126,200.873L403.179,213.248\" id=\"rr-mermaid-wm9ja5-L_Title_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Title_Site_0\" data-points=\"W3sieCI6MjczLjYyNSwieSI6MTM5fSx7IngiOjMyNC44NTkzNzUsInkiOjEzOX0seyJ4Ijo0MDYuMDgxODgxMDA5NjE1MzYsInkiOjIxNn1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M299.859,243L304.026,243C308.193,243,316.526,243,324.193,243C331.859,243,338.859,243,342.359,243L345.859,243\" id=\"rr-mermaid-wm9ja5-L_Description_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Description_Site_0\" data-points=\"W3sieCI6Mjk5Ljg1OTM3NSwieSI6MjQzfSx7IngiOjMyNC44NTkzNzUsInkiOjI0M30seyJ4IjozNDkuODU5Mzc1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M295.867,347L300.699,347C305.531,347,315.195,347,333.081,334.625C350.966,322.251,377.072,297.501,390.126,285.127L403.179,272.752\" id=\"rr-mermaid-wm9ja5-L_Head_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Head_Site_0\" data-points=\"W3sieCI6Mjk1Ljg2NzE4NzUsInkiOjM0N30seyJ4IjozMjQuODU5Mzc1LCJ5IjozNDd9LHsieCI6NDA2LjA4MTg4MTAwOTYxNTM2LCJ5IjoyNzB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M294.094,451L299.221,451C304.349,451,314.604,451,335.331,421.423C356.058,391.846,387.257,332.692,402.857,303.115L418.456,273.538\" id=\"rr-mermaid-wm9ja5-L_Language_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Language_Site_0\" data-points=\"W3sieCI6Mjk0LjA5Mzc1LCJ5Ijo0NTF9LHsieCI6MzI0Ljg1OTM3NSwieSI6NDUxfSx7IngiOjQyMC4zMjIxOTA1MDQ4MDc3LCJ5IjoyNzB9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path><path d=\"M519.266,243L523.432,243C527.599,243,535.932,243,543.599,243C551.266,243,558.266,243,561.766,243L565.266,243\" id=\"rr-mermaid-wm9ja5-L_Site_Document_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Site_Document_0\" data-points=\"W3sieCI6NTE5LjI2NTYyNSwieSI6MjQzfSx7IngiOjU0NC4yNjU2MjUsInkiOjI0M30seyJ4Ijo1NjkuMjY1NjI1LCJ5IjoyNDN9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-wm9ja5_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Body_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Title_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Description_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Head_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Language_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Body_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Title_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Description_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Head_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Language_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Site_Document_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(60.2421875, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-52.2421875\" y=\"-27\" width=\"104.484375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-22.2421875, -12)\"><rect></rect><foreignObject width=\"44.484375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Body-2\" data-look=\"classic\" transform=\"translate(231.171875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-47.3515625\" y=\"-27\" width=\"94.703125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-17.3515625, -12)\"><rect></rect><foreignObject width=\"34.703125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>body</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Title-4\" data-look=\"classic\" transform=\"translate(231.171875, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-42.453125\" y=\"-27\" width=\"84.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-12.453125, -12)\"><rect></rect><foreignObject width=\"24.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>title</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Description-6\" data-look=\"classic\" transform=\"translate(231.171875, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-68.6875\" y=\"-27\" width=\"137.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-38.6875, -12)\"><rect></rect><foreignObject width=\"77.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>description</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Head-8\" data-look=\"classic\" transform=\"translate(231.171875, 347)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.6953125\" y=\"-27\" width=\"129.390625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.6953125, -12)\"><rect></rect><foreignObject width=\"69.390625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>headTags</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Language-10\" data-look=\"classic\" transform=\"translate(231.171875, 451)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.921875\" y=\"-27\" width=\"125.84375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.921875, -12)\"><rect></rect><foreignObject width=\"65.84375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>language</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Site-12\" data-look=\"classic\" transform=\"translate(434.5625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.703125\" y=\"-27\" width=\"169.40625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Application</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-wm9ja5-flowchart-Document-22\" data-look=\"classic\" transform=\"translate(655.2890625, 243)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.0234375\" y=\"-27\" width=\"172.046875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.0234375, -12)\"><rect></rect><foreignObject width=\"112.046875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Final Document</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-wm9ja5-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-wm9ja5-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Plugin --> Body[\"body\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Plugin --> Title[\"title\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Plugin --> Description[\"description\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Plugin --> Head[\"headTags\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin --> Language[\"language\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Body --> Site[\"Site Application\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Title --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>    Description --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>    Head --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>    Language --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"15\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"16\"><span>    Site --> Document[\"Final Document\"]</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>Site Application がこれらを受け取り、既存の document frame に反映します。</p>\n<p>このため、Plugin Page でも Site 全体の navigation、header、footer、Theme などをそのまま利用できます。</p>\n<h1 id=\"html-の安全性\">HTML の安全性</h1>\n<p>Page Type の <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>body</span></span></code></span> は HTML として描画されます。</p>\n<p>そのため Plugin は、<strong>自分自身が安全に生成できる HTML だけを返す</strong>必要があります。</p>\n<p>たとえば request parameter をそのまま HTML に埋め込むような処理は避けます。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// Avoid</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">body</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">`&#x3C;p>${</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">untrustedRequestValue</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">}&#x3C;/p>`</span></span></code></pre>\n  </div>\n</figure>\n<p>信頼できない入力を扱う場合は、適切に escape / sanitize してから使用します。</p>\n<p>最終的に HTML をどのように描画するかは Site Application の boundary で決定します。</p>\n<p>Page Type が Site の HTML safety policy を回避する仕組みにはしません。</p>\n<h1 id=\"page-type-と-theme\">Page Type と Theme</h1>\n<p>Theme は Page Type ID を知る必要がありません。</p>\n<p>たとえば、</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>example.report</span></span></code></pre>\n  </div>\n</figure>\n<p>専用の Theme logic を作るのではなく、</p>\n<ul>\n  <li>semantic token</li>\n  <li>stable CSS hook</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>data-*</span></span></code></span> attribute</li>\n  <li>CSS cascade</li>\n</ul>\n<p>を利用して見た目を変更します。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-s79ylz\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 646.140625px;\" viewBox=\"0 0 646.140625 174\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-s79ylz{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-s79ylz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-s79ylz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-s79ylz .error-icon{fill:#552222;}#rr-mermaid-s79ylz .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-s79ylz .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-s79ylz .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-s79ylz .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-s79ylz .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-s79ylz .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-s79ylz .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-s79ylz .marker{fill:#333333;stroke:#333333;}#rr-mermaid-s79ylz .marker.cross{stroke:#333333;}#rr-mermaid-s79ylz svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-s79ylz p{margin:0;}#rr-mermaid-s79ylz .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-s79ylz .cluster-label text{fill:#333;}#rr-mermaid-s79ylz .cluster-label span{color:#333;}#rr-mermaid-s79ylz .cluster-label span p{background-color:transparent;}#rr-mermaid-s79ylz .label text,#rr-mermaid-s79ylz span{fill:#333;color:#333;}#rr-mermaid-s79ylz .node rect,#rr-mermaid-s79ylz .node circle,#rr-mermaid-s79ylz .node ellipse,#rr-mermaid-s79ylz .node polygon,#rr-mermaid-s79ylz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-s79ylz .rough-node .label text,#rr-mermaid-s79ylz .node .label text,#rr-mermaid-s79ylz .image-shape .label,#rr-mermaid-s79ylz .icon-shape .label{text-anchor:middle;}#rr-mermaid-s79ylz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-s79ylz .rough-node .label,#rr-mermaid-s79ylz .node .label,#rr-mermaid-s79ylz .image-shape .label,#rr-mermaid-s79ylz .icon-shape .label{text-align:center;}#rr-mermaid-s79ylz .node.clickable{cursor:pointer;}#rr-mermaid-s79ylz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-s79ylz .arrowheadPath{fill:#333333;}#rr-mermaid-s79ylz .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-s79ylz .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-s79ylz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-s79ylz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-s79ylz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-s79ylz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-s79ylz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-s79ylz .cluster text{fill:#333;}#rr-mermaid-s79ylz .cluster span{color:#333;}#rr-mermaid-s79ylz .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-s79ylz .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-s79ylz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-s79ylz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-s79ylz rect.text{fill:none;stroke-width:0;}#rr-mermaid-s79ylz .icon-shape,#rr-mermaid-s79ylz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-s79ylz .icon-shape p,#rr-mermaid-s79ylz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-s79ylz .icon-shape .label rect,#rr-mermaid-s79ylz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-s79ylz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-s79ylz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-s79ylz .node .neo-node{stroke:#9370DB;}#rr-mermaid-s79ylz [data-look=\"neo\"].node rect,#rr-mermaid-s79ylz [data-look=\"neo\"].cluster rect,#rr-mermaid-s79ylz [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s79ylz [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-s79ylz [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-s79ylz [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s79ylz [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-s79ylz [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s79ylz [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-s79ylz [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s79ylz [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-s79ylz :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-s79ylz_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-s79ylz_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M154.297,35L158.464,35C162.63,35,170.964,35,178.63,35C186.297,35,193.297,35,196.797,35L200.297,35\" id=\"rr-mermaid-s79ylz-L_Page_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Page_Site_0\" data-points=\"W3sieCI6MTU0LjI5Njg3NSwieSI6MzV9LHsieCI6MTc5LjI5Njg3NSwieSI6MzV9LHsieCI6MjA0LjI5Njg3NSwieSI6MzV9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s79ylz_flowchart-v2-pointEnd)\"></path><path d=\"M369.234,35L373.401,35C377.568,35,385.901,35,400.219,38.926C414.538,42.852,434.841,50.705,444.993,54.631L455.145,58.557\" id=\"rr-mermaid-s79ylz-L_Site_Hooks_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Site_Hooks_0\" data-points=\"W3sieCI6MzY5LjIzNDM3NSwieSI6MzV9LHsieCI6Mzk0LjIzNDM3NSwieSI6MzV9LHsieCI6NDU4Ljg3NTMwMDQ4MDc2OTIsInkiOjYwfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s79ylz_flowchart-v2-pointEnd)\"></path><path d=\"M360.336,139L365.986,139C371.635,139,382.935,139,398.736,135.074C414.538,131.148,434.841,123.295,444.993,119.369L455.145,115.443\" id=\"rr-mermaid-s79ylz-L_Theme_Hooks_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Hooks_0\" data-points=\"W3sieCI6MzYwLjMzNTkzNzUsInkiOjEzOX0seyJ4IjozOTQuMjM0Mzc1LCJ5IjoxMzl9LHsieCI6NDU4Ljg3NTMwMDQ4MDc2OTIsInkiOjExNH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-s79ylz_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Page_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Site_Hooks_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Hooks_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-s79ylz-flowchart-Page-0\" data-look=\"classic\" transform=\"translate(81.1484375, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1484375\" y=\"-27\" width=\"146.296875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1484375, -12)\"><rect></rect><foreignObject width=\"86.296875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin Page</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s79ylz-flowchart-Site-1\" data-look=\"classic\" transform=\"translate(286.765625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.46875\" y=\"-27\" width=\"164.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.46875, -12)\"><rect></rect><foreignObject width=\"104.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site Document</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s79ylz-flowchart-Hooks-2\" data-look=\"classic\" transform=\"translate(528.6875, 87)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.453125\" y=\"-27\" width=\"218.90625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.453125, -12)\"><rect></rect><foreignObject width=\"158.90625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Stable Hooks / Tokens</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-s79ylz-flowchart-Theme-3\" data-look=\"classic\" transform=\"translate(286.765625, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.5703125\" y=\"-27\" width=\"147.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.5703125, -12)\"><rect></rect><foreignObject width=\"87.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme CSS</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-s79ylz-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-s79ylz-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Page[\"Plugin Page\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Site[\"Site Document\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Hooks[\"Stable Hooks / Tokens\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Theme[\"Theme CSS\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>    Page --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Site --> Hooks</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Theme --> Hooks</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>これにより、新しい Page Type が追加されても Theme と Plugin を直接結合せずに済みます。</p>\n<h1 id=\"page-system-の境界\">Page System の境界</h1>\n<p>Page System では、<strong>Plugin はページを提供するが、Application を所有しない</strong>ことが最も重要です。</p>\n<figure class=\"rr-mermaid\">\n  <div class=\"rr-mermaid__canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg id=\"rr-mermaid-sbthr4\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 941.625px;\" viewBox=\"0 0 941.625 222\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#rr-mermaid-sbthr4{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#rr-mermaid-sbthr4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#rr-mermaid-sbthr4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#rr-mermaid-sbthr4 .error-icon{fill:#552222;}#rr-mermaid-sbthr4 .error-text{fill:#552222;stroke:#552222;}#rr-mermaid-sbthr4 .edge-thickness-normal{stroke-width:1px;}#rr-mermaid-sbthr4 .edge-thickness-thick{stroke-width:3.5px;}#rr-mermaid-sbthr4 .edge-pattern-solid{stroke-dasharray:0;}#rr-mermaid-sbthr4 .edge-thickness-invisible{stroke-width:0;fill:none;}#rr-mermaid-sbthr4 .edge-pattern-dashed{stroke-dasharray:3;}#rr-mermaid-sbthr4 .edge-pattern-dotted{stroke-dasharray:2;}#rr-mermaid-sbthr4 .marker{fill:#333333;stroke:#333333;}#rr-mermaid-sbthr4 .marker.cross{stroke:#333333;}#rr-mermaid-sbthr4 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#rr-mermaid-sbthr4 p{margin:0;}#rr-mermaid-sbthr4 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#rr-mermaid-sbthr4 .cluster-label text{fill:#333;}#rr-mermaid-sbthr4 .cluster-label span{color:#333;}#rr-mermaid-sbthr4 .cluster-label span p{background-color:transparent;}#rr-mermaid-sbthr4 .label text,#rr-mermaid-sbthr4 span{fill:#333;color:#333;}#rr-mermaid-sbthr4 .node rect,#rr-mermaid-sbthr4 .node circle,#rr-mermaid-sbthr4 .node ellipse,#rr-mermaid-sbthr4 .node polygon,#rr-mermaid-sbthr4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#rr-mermaid-sbthr4 .rough-node .label text,#rr-mermaid-sbthr4 .node .label text,#rr-mermaid-sbthr4 .image-shape .label,#rr-mermaid-sbthr4 .icon-shape .label{text-anchor:middle;}#rr-mermaid-sbthr4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#rr-mermaid-sbthr4 .rough-node .label,#rr-mermaid-sbthr4 .node .label,#rr-mermaid-sbthr4 .image-shape .label,#rr-mermaid-sbthr4 .icon-shape .label{text-align:center;}#rr-mermaid-sbthr4 .node.clickable{cursor:pointer;}#rr-mermaid-sbthr4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#rr-mermaid-sbthr4 .arrowheadPath{fill:#333333;}#rr-mermaid-sbthr4 .edgePaths .path{stroke:#333333;stroke-width:1px;}#rr-mermaid-sbthr4 .flowchart-link{stroke:#333333;fill:none;}#rr-mermaid-sbthr4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-sbthr4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#rr-mermaid-sbthr4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-sbthr4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#rr-mermaid-sbthr4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#rr-mermaid-sbthr4 .cluster text{fill:#333;}#rr-mermaid-sbthr4 .cluster span{color:#333;}#rr-mermaid-sbthr4 .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#rr-mermaid-sbthr4 .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#rr-mermaid-sbthr4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#rr-mermaid-sbthr4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#rr-mermaid-sbthr4 rect.text{fill:none;stroke-width:0;}#rr-mermaid-sbthr4 .icon-shape,#rr-mermaid-sbthr4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#rr-mermaid-sbthr4 .icon-shape p,#rr-mermaid-sbthr4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#rr-mermaid-sbthr4 .icon-shape .label rect,#rr-mermaid-sbthr4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#rr-mermaid-sbthr4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#rr-mermaid-sbthr4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#rr-mermaid-sbthr4 .node .neo-node{stroke:#9370DB;}#rr-mermaid-sbthr4 [data-look=\"neo\"].node rect,#rr-mermaid-sbthr4 [data-look=\"neo\"].cluster rect,#rr-mermaid-sbthr4 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-sbthr4 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#rr-mermaid-sbthr4 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#rr-mermaid-sbthr4 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-sbthr4 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#rr-mermaid-sbthr4 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-sbthr4 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#rr-mermaid-sbthr4 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-sbthr4 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#rr-mermaid-sbthr4 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"rr-mermaid-sbthr4_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"rr-mermaid-sbthr4_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M152,47L156.167,47C160.333,47,168.667,47,176.333,47C184,47,191,47,194.5,47L198,47\" id=\"rr-mermaid-sbthr4-L_Plugin_Core_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Plugin_Core_0\" data-points=\"W3sieCI6MTUyLCJ5Ijo0N30seyJ4IjoxNzcsInkiOjQ3fSx7IngiOjIwMiwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-sbthr4_flowchart-v2-pointEnd)\"></path><path d=\"M382,47L386.167,47C390.333,47,398.667,47,406.333,47C414,47,421,47,424.5,47L428,47\" id=\"rr-mermaid-sbthr4-L_Core_Integration_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Core_Integration_0\" data-points=\"W3sieCI6MzgyLCJ5Ijo0N30seyJ4Ijo0MDcsInkiOjQ3fSx7IngiOjQzMiwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-sbthr4_flowchart-v2-pointEnd)\"></path><path d=\"M630.703,47L634.87,47C639.036,47,647.37,47,660.783,50.907C674.196,54.814,692.69,62.629,701.936,66.536L711.183,70.443\" id=\"rr-mermaid-sbthr4-L_Integration_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Integration_Site_0\" data-points=\"W3sieCI6NjMwLjcwMzEyNSwieSI6NDd9LHsieCI6NjU1LjcwMzEyNSwieSI6NDd9LHsieCI6NzE0Ljg2NzU1MzcxMDkzNzUsInkiOjcyfV0=\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-sbthr4_flowchart-v2-pointEnd)\"></path><path d=\"M597.352,175L607.077,175C616.802,175,636.253,175,655.225,171.093C674.196,167.186,692.69,159.371,701.936,155.464L711.183,151.557\" id=\"rr-mermaid-sbthr4-L_Theme_Site_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Theme_Site_0\" data-points=\"W3sieCI6NTk3LjM1MTU2MjUsInkiOjE3NX0seyJ4Ijo2NTUuNzAzMTI1LCJ5IjoxNzV9LHsieCI6NzE0Ljg2NzU1MzcxMDkzNzUsInkiOjE1MH1d\" data-look=\"classic\" marker-end=\"url(#rr-mermaid-sbthr4_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Plugin_Core_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Core_Integration_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Integration_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Theme_Site_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"rr-mermaid-sbthr4-flowchart-Plugin-0\" data-look=\"classic\" transform=\"translate(80, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-72\" y=\"-39\" width=\"144\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42, -24)\"><rect></rect><foreignObject width=\"84\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Plugin<br>何を表示する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-sbthr4-flowchart-Core-1\" data-look=\"classic\" transform=\"translate(292, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-90\" y=\"-39\" width=\"180\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60, -24)\"><rect></rect><foreignObject width=\"120\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Core<br>どう表現・解決する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-sbthr4-flowchart-Integration-2\" data-look=\"classic\" transform=\"translate(531.3515625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.3515625\" y=\"-39\" width=\"198.703125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.3515625, -24)\"><rect></rect><foreignObject width=\"138.703125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Integration<br>どうRouteへ接続する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-sbthr4-flowchart-Site-3\" data-look=\"classic\" transform=\"translate(807.1640625, 111)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.4609375\" y=\"-39\" width=\"252.921875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.4609375, -24)\"><rect></rect><foreignObject width=\"192.921875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Site<br>どうDocumentとして描画する？</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"rr-mermaid-sbthr4-flowchart-Theme-4\" data-look=\"classic\" transform=\"translate(531.3515625, 175)\"><rect class=\"basic label-container\" style=\"\" x=\"-66\" y=\"-39\" width=\"132\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36, -24)\"><rect></rect><foreignObject width=\"72\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Theme<br>どう見せる？</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"rr-mermaid-sbthr4-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"rr-mermaid-sbthr4-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg></div>\n  <details class=\"rr-mermaid__fallback\">\n    <summary>Diagram source</summary>\n    <figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n      <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n      <div class=\"rr-code__body\">\n        <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>flowchart LR</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>    Plugin[\"Plugin&#x3C;br/>何を表示する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>    Core[\"Core&#x3C;br/>どう表現・解決する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>    Integration[\"Integration&#x3C;br/>どうRouteへ接続する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>    Site[\"Site&#x3C;br/>どうDocumentとして描画する？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>    Theme[\"Theme&#x3C;br/>どう見せる？\"]</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>    Plugin --> Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>    Core --> Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>    Integration --> Site</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>    Theme --> Site</span></span></code></pre>\n      </div>\n    </figure>\n  </details>\n</figure>\n<p>責務は次のとおりです。</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>Plugin</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>  → Page の内容と公開 path を提供する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>Core</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>  → Page Type の共通 contract と解決規則を提供する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>HonoX Integration</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>  → Page Type を routing / SSG へ接続する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>Site Application</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>  → route、document frame、metadata、HTML safety を所有する</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>Theme</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"14\"><span>  → Site の見た目を変更する</span></span></code></pre>\n  </div>\n</figure>\n<p>という関係になります。</p>\n<p>この境界によって Plugin は HonoX や特定 Site の構造に依存せず、インストールするだけで独立ページを提供できます。</p>\n<p>Page Type の全フィールドと実行時検証については <a href=\"/docs/reference/plugin-api#page-type\">Plugin API</a>、Site との接続については <a href=\"/docs/framework/honox-integration\">HonoX Integration</a> を参照してください。</p>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Page System Page System は、Plugin が Site の route を直接追加せずに独立したページを提供する ための仕組みです。 たとえば Plugin が、 text Wrap Copy /explore /report /tags/example のような独自ページを提供したい場合に使用","tags":[]},{"id":"https://riebeckite.dev/en/docs/framework/plugin-system","url":"https://riebeckite.dev/en/docs/framework/plugin-system","title":"plugin-system.en","content_html":"<script type=\"application/json\" id=\"rb-ux-config\" data-rb-ux-config>{\"progress\":true,\"backToTop\":true,\"tocScrollSpy\":true,\"codeCopy\":true,\"backToTopLabel\":\"Back to top\",\"copyLabel\":\"Copy\",\"copiedLabel\":\"Copied\"}</script>\n<h1 id=\"plugins-in-depth\">Plugins in Depth</h1>\n<p><a href=\"/en/docs/plugins/writing-a-plugin\">Your First Plugin</a> is a short walkthrough that gets a plugin running. This page is its \"in depth\" companion: it collects everything you refer to while building a plugin — extension points, capabilities, lifecycle, pipelines, and packaging.</p>\n<p>If you are new, read <a href=\"/en/docs/plugins/writing-a-plugin\">your first plugin</a> first, and use this page when you want more detail. For the complete API surface, see <a href=\"/en/docs/reference/plugin-api\">Plugin API</a>.</p>\n<h2 id=\"1-what-a-plugin-does\">1. What a plugin does</h2>\n<p>A plugin adds <strong>features</strong>: Markdown/HTML interpretation, reusable content transformation, plugin-specific renderers, reusable browser behavior, plugin-specific diagnostics, and endpoint/SEO extensions.</p>\n<p><strong>What does not go in a plugin:</strong></p>\n<ul>\n  <li>framework-wide content model → Core</li>\n  <li>the HonoX/Vite connection → Integration</li>\n  <li>application-specific routes / layout → App</li>\n  <li>appearance-only changes → Theme (<a href=\"/en/docs/framework/theme-system\">Theme System</a>)</li>\n</ul>\n<h2 id=\"2-a-minimal-plugin-and-options\">2. A minimal plugin and options</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { definePlugin } </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"@riebeckite/core\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> examplePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">() {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>Give the factory typed options and keep the resolved options in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>options</span></span></code></span>.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">type</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ExampleOptions</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  enabled</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">?:</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> boolean</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">};</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"> </span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> examplePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">options</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ExampleOptions</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {}) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    options,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>Register it in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>riebeckite.config.ts</span></span></code></span>:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> defineConfig</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  plugins: [</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">examplePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ enabled: </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">true</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> })],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>false | null | undefined</span></span></code></span> entries are dropped from the plugin input, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>enabled: false</span></span></code></span> is never executed.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">plugins</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: [</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  condition </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">&#x26;&#x26;</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> myPlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(),</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">]</span></span></code></pre>\n  </div>\n</figure>\n<h2 id=\"3-the-extension-points\">3. The extension points</h2>\n<p>The current Core contract covers the following areas. <strong>You do not implement all of them — use the smallest extension point your plugin needs.</strong></p>\n<p>UI and output have several extension points, and they are alternatives rather than a progression: Markdown/HTML transformation, renderers, Page Types, body slots, exported Hono JSX components, and client entries. To choose between them, see <a href=\"/en/docs/plugins/writing-a-plugin#providing-ui-or-output\">Providing UI or output</a>.</p>\n<table>\n  <thead>\n    <tr>\n      <th>Area</th>\n      <th>API</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Identity</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>name</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>enabled</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>options</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Dependency</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>provides</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>requires</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>optional</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Validation</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>validateOptions</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Cache</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>cacheVersion</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.cache</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Lifecycle</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>setup</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildStart</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildEnd</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dispose</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Content hooks</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onConfigResolved</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onContentLoaded</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostParsed</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onPostProcessed</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onManifestCreated</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Public Location</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentLocations</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Pipeline</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>remarkPlugins</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rehypePlugins</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>extendMarkdownPipeline</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>extendHtmlPipeline</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Graph</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>extendContentGraph</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Diagnostics</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>addDiagnostics</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Rendering inside content</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderers</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Standalone pages</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>Browser integration</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>assets</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>clientEntries</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>HTTP integration</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>endpoints</span></span></code></span></td>\n    </tr>\n    <tr>\n      <td>SEO</td>\n      <td><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>seo</span></span></code></span></td>\n    </tr>\n  </tbody>\n</table>\n<h3 id=\"3-1-dependency--capability\">3-1. Dependency / capability</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"consumer\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  provides: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.output\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  requires: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"content.graph\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  optional: [</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example.optional\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<ul>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>provides</span></span></code></span>: capabilities this plugin offers</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>requires</span></span></code></span>: mandatory capabilities</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>optional</span></span></code></span>: capabilities used when present</li>\n</ul>\n<p>The resolver places providers before consumers. Missing requirements, duplicate providers, and cycles are configuration errors. Unrelated plugins keep their input order as much as possible. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span> only sets a base ordering before dependency resolution; prefer the capability contract over raw <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>order</span></span></code></span> when dependencies exist.</p>\n<h3 id=\"3-2-validateoptions\">3-2. validateOptions</h3>\n<p>TypeScript types do not fully guarantee runtime values after the config file executes. Plugins that need it provide <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>validateOptions</span></span></code></span>. A validator must <strong>have no side effects</strong> — no filesystem scanning, no builds, no cache writes. Return problems as structured issues so config validation can display them together.</p>\n<h3 id=\"3-3-plugin-context\">3-3. Plugin context</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">type</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> PluginContext</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  config</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">?:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ResolvedRiebeckiteConfig</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  contentIndex</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Map</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">string</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">string</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">>;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  diagnostics</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Diagnostic</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">[];</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  cache</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> PluginCache</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  output</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> GeneratedOutputSink</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  logger</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Logger</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  tracer</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Tracer</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">  contentSource</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">?:</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> ContentSource</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">};</span></span></code></pre>\n  </div>\n</figure>\n<p>Depending on the hook, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>slug</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>markdown</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>content</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>entries</span></span></code></span>, and location input are added. Prefer receiving framework services from the context over creating global singletons.</p>\n<h3 id=\"3-4-lifecycle\">3-4. Lifecycle</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>setup</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildStart</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>onConfigResolved</span></span></code></span>, content processing, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildEnd</span></span></code></span> run once per <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentManager</span></span></code></span>. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>buildEnd</span></span></code></span> receives the completed manifest after diagnostics have been collected and is the only terminal build hook. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>dispose</span></span></code></span> frees acquired resources and runs in reverse resolved order. Named lifecycle and content hook failures identify the plugin, hook, and original cause. Other hook families follow resolved plugin order.</p>\n<h3 id=\"3-5-content-pipeline-stages\">3-5. Content pipeline stages</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>setup → buildStart → config resolved → public locations resolved</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>→ content loaded → Markdown/HTML pipeline → post parsed → post processed</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>→ content graph → manifest created → diagnostics → build end</span></span></code></pre>\n  </div>\n</figure>\n<p>Use only the hooks you actually need. Do not reconstruct later-stage information in earlier stages.</p>\n<h3 id=\"3-6-markdown--html-pipeline\">3-6. Markdown / HTML pipeline</h3>\n<p>Simple remark/rehype plugins are declared as arrays.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  remarkPlugins: [remarkExample],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  rehypePlugins: [rehypeExample],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p>To compose the pipeline itself:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  extendMarkdownPipeline</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">pipeline</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, </span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">context</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    pipeline.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">use</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(remarkExample);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  extendHtmlPipeline</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">pipeline</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    pipeline.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">use</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(rehypeExample);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p>Semantic Markdown/HTML transformation belongs in the plugin; do not bring AST processing into application components.</p>\n<h3 id=\"3-7-content-graph-and-public-locations\">3-7. Content graph and public locations</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>extendContentGraph</span></span></code></span> extends the graph before or after construction within the framework contract. For backlinks or graph features, do not rescan the filesystem yourself — use the existing Content Graph / Manifest contract.</p>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveContentLocations</span></span></code></span> replaces the public location of content entries. Core first applies the default resolver (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveDefaultContentLocation</span></span></code></span>: <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>index</span></span></code></span> → <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/</span></span></code></span>, otherwise <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/{slug}</span></span></code></span>), then runs each plugin hook in resolved plugin order, and keeps the result as <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>ContentPublicLocation</span></span></code></span> in the manifest / graph / pipeline. URL strategy is the plugin's responsibility. An unresolved location is an <strong>explicit error</strong>, not a slug fallback.</p>\n<h3 id=\"3-8-renderers\">3-8. Renderers</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>renderers</span></span></code></span> transform a content target into plugin-specific HTML. The context includes <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>kind</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>path</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>raw</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>label</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>url</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>embed</span></span></code></span>, plus the usual <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>PluginContext</span></span></code></span>. Return <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>null</span></span></code></span> when the target is not yours so other renderers are tried.</p>\n<h3 id=\"3-9-page-types\">3-9. Page Types</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pageTypes</span></span></code></span> provides an independent screen through the site's generic catch-all route. A type has a globally unique <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>id</span></span></code></span>, static or manifest-derived <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>paths</span></span></code></span>, an optional <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>priority</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolve</span></span></code></span>. It returns a framework-independent HTML body or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>null</span></span></code></span>. It may also describe <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>title</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>description</span></span></code></span>, and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>headTags</span></span></code></span>; the site document frame renders those values.</p>\n<p>Use a Page Type for a page such as a taxonomy listing or explorer. Use a renderer for an article embed such as Canvas, Bases, or Excalidraw. Plugins do not add HonoX route files or own the document frame.</p>\n<p>Page Type IDs are validated at runtime and must be unique. If more than one type resolves a request, the greatest priority wins; a tie is an error. Use the resolved manifest passed to the resolver, reading <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest.publicEntries</span></span></code></span> or <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest.discoverableEntries</span></span></code></span> rather than <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>manifest.entries</span></span></code></span>. The application wires <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>resolveRiebeckiteRoute</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>pluginPageSsgParams</span></span></code></span> into its catch-all route; the scaffold does this already. See <a href=\"/en/docs/framework/page-system\">Page System</a> for the full rendering flow and <a href=\"/en/docs/reference/plugin-api#pages\">Plugin API</a> for the contract.</p>\n<h3 id=\"3-10-assets\">3-10. Assets</h3>\n<p>Put plugin stylesheets inside the plugin package and declare the module specifier in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>assets</span></span></code></span>.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">assets</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: [{</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  pluginName: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  kind: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"style\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  moduleSpecifier: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"@riebeckite/plugin-example/style.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}]</span></span></code></pre>\n  </div>\n</figure>\n<p>Do not copy plugin CSS into <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>apps/web</span></span></code></span>, and never reference <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>/node_modules</span></span></code></span> directly from the browser.</p>\n<p><strong>In-site plugins</strong>: a plugin does not have to be published. Define it inside the site with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>definePlugin</span></span></code></span> and pass it to <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>plugins</span></span></code></span>. Resolution order, dependency resolution, pipeline hooks, and diagnostics use the same contract as a package.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">// site/extensions/local-plugin.ts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">return</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> definePlugin</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  name: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-local\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  assets: [{</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    pluginName: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"site-local\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    kind: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"style\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    moduleSpecifier: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"/extensions/plugin.css\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  }],</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>createStyleAsset()</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>createClientEntry()</span></span></code></span> build <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/plugin-&#x3C;name>/...</span></span></code></span> specifiers, so they fit only a package literally named that way. An unpublished plugin, or a published package under any other name, must provide an explicit <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>moduleSpecifier</span></span></code></span> the host bundler can resolve.</p>\n<h3 id=\"3-11-css-hooks\">3-11. CSS hooks</h3>\n<p>Plugin CSS lives in the plugin package and reaches the browser through <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>assets</span></span></code></span>. When a plugin renders an independent, reusable feature, put a stable root hook on the outermost element.</p>\n<ul>\n  <li>Name plugin/feature hooks <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature></span></span></code></span> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-search</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-callout</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-query</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-code</span></span></code></span>, …). Below the root, use the BEM shape <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature></span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature>__element</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature>--modifier</span></span></code></span>.</li>\n  <li>Keep existing classes on the same element. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-</span></span></code></span> hooks are additions, so existing selectors and site overrides keep working.</li>\n  <li>Do not put plugin output in the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-</span></span></code></span> namespace. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rb-*</span></span></code></span> classes and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--rb-*</span></span></code></span> tokens belong to the framework's structural hooks and semantic design tokens. Plugin-specific tokens are <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--rr-*</span></span></code></span>, with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>--rb-*</span></span></code></span> as fallback.</li>\n  <li><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature>__*</span></span></code></span> and <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>rr-&#x3C;feature>--*</span></span></code></span> are internal implementation details. Document only the descendants you want themes to style.</li>\n</ul>\n<h3 id=\"3-12-client-entries\">3-12. Client entries</h3>\n<p>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>clientEntries</span></span></code></span> only when browser initialization is required.</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">clientEntries</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: [{</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  pluginName: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  moduleSpecifier: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"@riebeckite/plugin-example/client\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  exportName: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"initExample\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  publicConfig: { selector: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\".example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> },</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}]</span></span></code></pre>\n  </div>\n</figure>\n<p>Do not add client JavaScript to plugins that work purely at SSR/build time. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>publicConfig</span></span></code></span> is passed to the client initializer and recorded in the manifest so static hosts can use it. Plugin <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>options</span></span></code></span> are not passed to the client automatically. Never register tokens, credentials, or private service URLs as public config.</p>\n<h3 id=\"3-13-endpoints-and-seo\">3-13. Endpoints and SEO</h3>\n<p>HTTP endpoints use the <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>endpoints</span></span></code></span> contract. Do not embed route-framework implementations in the plugin itself; the integration connects the endpoint contract to the host router. <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>seo</span></span></code></span> lets a plugin participate in SEO processing (metadata/feeds). Do not reimplement plugin-specific SEO logic in application routes.</p>\n<h3 id=\"3-14-diagnostics\">3-14. Diagnostics</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">addDiagnostics</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(context) {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  return</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> [{</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">    // follows the Diagnostic contract</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  }];</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre>\n  </div>\n</figure>\n<p>Return diagnostics as structured data whenever possible. Use Diagnostics / Logger instead of <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>console.log</span></span></code></span> from the plugin.</p>\n<h3 id=\"3-15-plugin-cache\">3-15. Plugin cache</h3>\n<p><span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>context.cache</span></span></code></span> is a <strong>build-time cache</strong> isolated per plugin.</p>\n<ul>\n  <li>Store only regenerable values</li>\n  <li>JSON-serializable values</li>\n  <li>Do not reference across plugin namespaces</li>\n  <li>Switch compatibility with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>cacheVersion</span></span></code></span></li>\n  <li>Treat corrupt caches as safe misses</li>\n  <li>Writes are atomic</li>\n  <li>Do not use it as a runtime database</li>\n</ul>\n<p>It is not Cloudflare Workers persistent storage.</p>\n<h3 id=\"3-16-logger--tracer\">3-16. Logger / tracer</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"ts\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">ts</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"ts\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"ts\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">context.logger.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">info</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"...\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">await</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> context.tracer.</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">span</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"plugin.example.work\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, { plugin: </span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"example\"</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }, </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">async</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> () </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">  // work</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});</span></span></code></pre>\n  </div>\n</figure>\n<p>The profiler uses structured traces; plugins do not need their own stopwatch/reporting system.</p>\n<h2 id=\"4-packaging-for-distribution\">4. Packaging for distribution</h2>\n<p>Use <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages/plugins/backlinks</span></span></code></span> as a template. Recommended layout:</p>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"text\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">text</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"text\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"text\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line\" data-line=\"\" data-line-number=\"1\"><span>packages/plugins/example/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"2\"><span>├─ index.ts          ← factory calling definePlugin, re-exports public parts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"3\"><span>├─ components/       ← components (if any)</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"4\"><span>├─ client.ts         ← only when needed</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"5\"><span>├─ src/</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"6\"><span>│  ├─ remark.ts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"7\"><span>│  ├─ rehype.ts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"8\"><span>│  ├─ renderer.ts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"9\"><span>│  └─ types.ts</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"10\"><span>├─ style.css         ← only when needed</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"11\"><span>├─ package.json</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"12\"><span>├─ README_ja.md</span></span>\n<span class=\"rr-code__line\" data-line=\"\" data-line-number=\"13\"><span>└─ README.md</span></span></code></pre>\n  </div>\n</figure>\n<p>A distributed plugin depends only on <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/core</span></span></code></span> and declares its own subpaths (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>./client</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>./components</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>./style.css</span></span></code></span>) in <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>exports</span></span></code></span>. Never import <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>@riebeckite/core/src/**</span></span></code></span> or reference monorepo paths. For the package surface and current constraints, see \"Public packages and import paths\" in <a href=\"/en/docs/reference/\">Framework Reference</a>.</p>\n<p>Publish built ESM plus type declarations and point <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>exports</span></span></code></span> at the built files; build them in a <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>prepack</span></span></code></span> script so packing and publishing ship fresh output. The repository's build script is not published, so supply a small build: bundle the entry points with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>esbuild</span></span></code></span> (<span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>format: \"esm\"</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>packages: \"external\"</span></span></code></span>, <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>external: [\"@riebeckite/*\"]</span></span></code></span>) and emit declarations with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>tsc --emitDeclarationOnly</span></span></code></span>. See <a href=\"/en/docs/reference/plugin-api#distributing-a-plugin-outside-this-repository\">Distributing a Plugin outside this repository</a> for a minimal manifest.</p>\n<p>In NodeNext/ESM packages, keep imports resolvable by Node after the build. Do not rely on the development TypeScript loader accidentally resolving extensionless imports.</p>\n<h2 id=\"5-verify\">5. Verify</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"rr-code\" data-language=\"sh\" data-terminal=\"true\">\n  <figcaption class=\"rr-code__header\"><span class=\"rr-code__title\">sh</span><span class=\"rr-code__actions\"><button type=\"button\" class=\"rr-code__action\" data-code-wrap-toggle=\"true\" aria-pressed=\"true\">Wrap</button><button type=\"button\" class=\"rr-code__action\" data-code-copy=\"true\" aria-label=\"Copy code\">Copy</button></span></figcaption>\n  <div class=\"rr-code__body\">\n    <pre class=\"rr-code__pre rr-code__pre--wrap\" tabindex=\"0\" data-language=\"sh\" data-theme=\"github-light github-dark\" tabindex=\"0\"><code data-language=\"sh\" data-theme=\"github-light github-dark\" style=\"display: grid;\" class=\"rr-code__code\"><span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"1\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">npm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> check</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">              # validate config and plugin resolution</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"2\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">npm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> doctor</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">             # health check</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"3\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">npm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> inspect</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> plugins#</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> list</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> resolved</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> plugins</span></span>\n<span class=\"rr-code__line rr-code__line--prompt\" data-line=\"\" data-line-number=\"4\"><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">npm</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> riebeckite</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">              # confirm it appears in the output</span></span></code></pre>\n  </div>\n</figure>\n<p>If a plugin does not resolve, start with <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>check</span></span></code></span> for capability or import errors. Also ask whether you really need a plugin — perhaps configuration or an app implementation suffices.</p>\n<h2 id=\"further-reading\">Further reading</h2>\n<ul>\n  <li><a href=\"/en/docs/plugins/writing-a-plugin\">Your First Plugin</a> — a step-by-step introduction</li>\n  <li><a href=\"/en/docs/framework/plugin-system\">Plugin System</a> — all extension points in detail</li>\n  <li><a href=\"/en/docs/framework/content-system\">Content System</a> — Manifest / Graph / pipeline contracts</li>\n  <li><a href=\"/en/docs/framework/architecture\">Architecture</a> — responsibilities of Core / Plugin / Integration / Theme / App</li>\n  <li><a href=\"/en/docs/reference/\">Framework Reference</a> — public APIs like <span data-rehype-pretty-code-figure=\"\"><code data-language=\"text\" data-theme=\"github-light github-dark\"><span data-line=\"\"><span>definePlugin</span></span></code></span></li>\n</ul>\n<script type=\"application/json\" id=\"rb-hover-preview-data\" data-rb-hover-preview data-index-src=\"/_riebeckite/hover-preview/index.json\" data-selector=\"a[href^=&quot;/&quot;]\" data-delay=\"120\" data-class-name=\"rb-hover-preview\" data-include-titles=\"true\"></script>","summary":"Plugins in Depth Your First Plugin is a short walkthrough that gets a plugin running. This page is its \"in depth\" companion: it collects everything you refer to","tags":[]}]}