Astro インテグレーション

NEW

@love-rox/tcy-astro

Astro 4+ 専用。Markdown / MDX パイプラインに rehype プラグインを自動登録し、`.astro` ファイル用の `<Tcy>` コンポーネントも同梱します。

v0.3.0MITastro >= 4

インストール

ピア依存は astro >= 4 です。@love-rox/tcy-core@love-rox/tcy-rehype は依存として自動的に引き込まれます。

bun

bun add @love-rox/tcy-astro

pnpm

pnpm add @love-rox/tcy-astro

npm

npm i @love-rox/tcy-astro

yarn

yarn add @love-rox/tcy-astro

中身は2つ

tcy() インテグレーション

@love-rox/tcy-rehype を Astro の Markdown / MDX パイプラインに登録します。.md / .mdx の本文中の半角英数字 run が、ビルド時に自動的にラップされます。

<Tcy> コンポーネント

.astro ファイル内の slot を明示的にラップしたいときに使う Astro コンポーネント。Markdown を介さない直書きの本文に。

使い方

まず astro.config.mjs でインテグレーションを登録します。これだけで Markdown / MDX 本文には自動で縦中横が適用されます。

astro.config.mjsts
// astro.config.mjs
import { defineConfig } from "astro/config";
import tcy from "@love-rox/tcy-astro";

export default defineConfig({
  integrations: [tcy()],
});

オプションを渡す

rehype プラグインに渡すオプションをそのまま指定できます。

astro.config.mjs(オプション付き)ts
// astro.config.mjs
import { defineConfig } from "astro/config";
import tcy from "@love-rox/tcy-astro";

export default defineConfig({
  integrations: [
    tcy({
      maxLength: 2,
      excludeWords: ["URL", "API", "2026"],
    }),
  ],
});

.astro ファイル内で使う

Markdown を介さない直書きの本文には <Tcy> コンポーネントを使います。

src/pages/example.astroastro
---
import Tcy from "@love-rox/tcy-astro/Tcy.astro";
---

<p style="writing-mode: vertical-rl">
  <Tcy>第1章 2026年4月、Webの縦書きは進化した。</Tcy>
</p>

オプション

共通オプションは React / Vue / rehype と同じ意味で動きます。インテグレーション専用のオプションは1つだけです。

共通オプション + rehype 由来

オプション既定値説明
target'alphanumeric' | 'alpha' | 'digit' | 'ascii' | RegExp'alphanumeric'縦中横対象として扱う文字種。alphanumeric[0-9A-Za-z]ascii は印字可能な ASCII 全般。任意の RegExp も指定可能。
combinebooleantrue連続した対象文字を1つのスパンにまとめるか。false にすると1文字ずつ別々のスパンで包みます。
includestring | string[]undefinedtarget に含まれなくても対象として扱う追加の文字。
excludestring | string[]undefined対象から外したい文字。include より優先されます。
maxLengthnumberundefined縦中横セグメントの最大文字数。これを超える長さの英数字 run はプレーンテキストに戻ります。たとえば maxLength: 2 にすると 2026 のような4桁年は寝かせ、119 の短い run のみを縦中横にできます。
excludeWordsstring[]undefined縦中横にしたくない語を完全一致で指定(部分一致ではなくセグメント値全体のマッチ)。URL API のような固有の略号や、特定の年号だけを横倒しのまま残したいときに便利。
tagNamestring'span'ラップに使用するタグ名。
classNamestring | string[]'tcy'ラップ要素に付与するクラス名(配列で複数指定可)。
skipTagsstring[]['code', 'pre', 'script', 'style']走査をスキップするタグ。<code> <pre> などコード表示中のテキストはデフォルトで処理されません。

インテグレーション専用

オプション既定値説明
markdownbooleantrueMarkdown / MDX パイプラインに rehype-tcy を登録するか。false にするとインテグレーションは何もしません(<Tcy> コンポーネントだけ使う構成にできます)。

挙動の注記

  • Astro は SSG-first なので、両方のピースともビルド時に走ります。クライアントへのコスト増はありません。
  • <code> / <pre> / <script> / <style> 内のテキストはデフォルトでスキップされます(skipTags で変更可)。
  • 冪等です。同じ Markdown を何度ビルドしても、出力 HTML は変わりません。
  • <Tcy> コンポーネントは内部で同じ tcy-rehype を呼んでいるので、Markdown 本文と .astro 直書きで挙動が揃います。

他のアダプタ

Astro を使っていない場合は、生の [rehype プラグイン](./rehype) を直接 unified パイプラインに組み込んでください。アプリ側でランタイムに包みたいなら [React](./react) / [Vue](./vue) 版があります。