2025-12-01-01(オブシディアンってヤバくない?)の雑記でも書いた通り、創作を扱っているObsidianや、それを公開する手段としてのQuartzに青空文庫形式のルビを持ち込めるのが大変便利に思ったので、簡単に手順を書き残しておきます。

Obsidianに青空文庫形式のルビを持ち込む方法

コミュニティプラグインから「Japanese Novel Ruby」を検索してインストールする、これが一番便利です。

以下からもインストールできるとのことです。

https://obsidian.md/plugins?id=japanese-novel-ruby

Quartzに青空文庫形式のルビを持ち込む方法

青空文庫形式のルビをHTMLタグでのルビに置換するプラグインを追加します。

手順

1. プラグインファイルを作成

(筆者はこれをLLMに頼んで作成してもらいました)
quartz/plugins/transformers/aozoraRuby.ts:

import { QuartzTransformerPlugin } from "../types"
import { visit } from "unist-util-visit"
 
export const AozoraRuby: QuartzTransformerPlugin = () => ({
  name: "AozoraRuby",
  markdownPlugins() {
    return [
      () => (tree) => {
        visit(tree, "text", (node, index, parent) => {
          if (!parent || index === undefined) return
 
          const text = node.value as string
          const pattern = /|([^《》]+)《([^》]+)》|([一-龯々]+)《([^》]+)》/g
 
          if (!pattern.test(text)) return
          pattern.lastIndex = 0 // reset after test
 
          const newValue = text.replace(pattern, (_, p1, r1, p2, r2) => {
            const base = p1 || p2
            const ruby = r1 || r2
            return `<ruby>${base}<rp>(</rp><rt>${ruby}</rt><rp>)</rp></ruby>`
          })
 
          node.type = "html"
          node.value = newValue
        })
      },
    ]
  },
})

2. エクスポートに追加

quartz/plugins/transformers/index.ts を開いて、末尾あたりに追加:

ts

export { AozoraRuby } from "./aozoraRuby"

3. quartz.config.ts で読み込み設定

先にルビを変換してから他の処理を走らせるため、順番に注意!

→ルビの変換は最後の方が良いです、注意!(12/3変更)

ts

import { AozoraRuby } from "./quartz/plugins/transformers/ruby"
 
// transformers に追加
transformers: [
  // ...他のプラグイン
  AozoraRuby(),
],