Skip to content

Markdown ソースの併記#

View Markdown

ssg.markdownSource を有効にすると、SSG ビルドは公開した各 HTML ページの横に 元の Markdown を書き出します。vite dev でも同じ URL で配信します。 省略またはオフのときは何も足しません。

import { oxContent } from "@ox-content/vite-plugin";

export default {
  plugins: [
    oxContent({
      ssg: {
        markdownSource: true,
      },
    }),
  ],
};

false または省略は追加ファイルを書きません。true は既定で有効にします。 オブジェクトにすると機能をオンにし、alternate リンクだけオフにしたり、 既定テーマの Copy as Markdown をオプトインしたりできます。

oxContent({
  ssg: {
    markdownSource: {
      alternate: false,
      copy: true,
    },
  },
});
オプション 既定
markdownSource boolean / MarkdownSourceOptions false
alternate boolean true
copy boolean false

URL の対応#

併記ファイルはソースのファイルツリーではなく、公開されたページ URL に 従います。HTML の出力拡張子は変わりません。併記は常に .md です。

公開 HTML 併記
/blog/slug/index.html /blog/slug.md
/index.html /index.md
/guide/index.htm(独自拡張子) /guide.md
/docs/guide/index.htmlbase /docs/guide.md
/getting-started/index.html(permalink) /getting-started.md
/ja/guide/index.html(ロケール) /ja/guide.md

パス脱出(..)は拒否します。同じ併記に解決する 2 ページは先のページを残し、 後のページをスキップします。

frontmatter#

併記はソースファイルの バイト列そのもの で、YAML frontmatter も含みます。 取り除いたり書き換えたりしません。HTML から Markdown を復元すると執筆構文が 落ちます。この経路はページ変換ですでに読んだバイトをコピーし、併記のためだけに Markdown を再パースしません。

下書きと除外#

draft: trueunlisted: true のソースは、非公開ページの HTML が残る場合でも 書き出さず配信しません。publishState がオンなら、予約公開と 期限切れもそのフィルタに従います。

著者ソースがない生成ページ(ブログ索引、タクソノミー、セクション索引、404) には併記を付けません。

alternate リンクとテーマ#

alternate がオン(既定)のとき、生成 HTML には次が入ります。

<link rel="alternate" type="text/markdown" href="/guide.md" />

独自レンダラとテーマは usePageProps() から同じ URL を読めます。

const page = usePageProps();
return page.markdownSource ? <a href={page.markdownSource}>ソース</a> : null;

copy がオンのとき、既定テーマはタイトル付近に Copy as Markdown ボタンと View Markdown リンクを付けます(「このページを編集」があるときはその隣)。 コピーは併記の .md URL を取得し、frontmatter を含む元のソースバイトを クリップボードに書きます。View Markdown は静的な <a href="…md"> なので JavaScript なしでも開けます。併記がオンでも copy は明示しない限りオフです。

このリポジトリのドキュメントサイトは markdownSource: { copy: true } で コントロールを有効にしています。

関連#

Last updated: