zudo-doc
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

Code Tabs

作成 2026年5月28日更新 2026年6月14日Takeshi Takatsudo

:::code-group ディレクティブを <CodeGroup> コンポーネント経由でタブ付きコードパネルとして描画します。

codeTabs 機能は、関連するコードブロックをインタラクティブなタブストリップにまとめます。連続するフェンスブロックを :::code-group ディレクティブでラップすると、zfb がフレームワーク側でタブとして描画する <CodeGroup> 要素を出力します。

オプトイン機能

この機能はデフォルトで無効です。zfb.config.tscodeTabs キーで有効化します。true のショートハンドを受け付けます。

設定

zfb.config.ts
export default defineConfig({
  markdown: {
    features: {
      codeTabs: true,
    },
  },
});

記述構文

2 つ以上のフェンスコードブロックを :::code-group ディレクティブでラップします。各ブロックのタブラベルは、その title="…" 属性から導出されます。

:::code-group

```ts title="index.ts"
export const greeting: string = "hello";
```

```js title="index.js"
export const greeting = "hello";
```

:::

Warning

隣接した 2 つのフェンスコードブロックだけではタブになりません。それらは独立した 2 つのコードブロックとして描画されます。タブ化は、フェンスをラップする明示的な :::code-group ディレクティブによってのみトリガーされます。

タブラベルの解決

各タブのラベルは次の優先順位で決定されます。

  1. フェンスの title="…" 属性

  2. 言語 id(例: tsjs

  3. いずれもない場合のフォールバック文字列 "tab"

ライブデモ

上記のディレクティブは次のように描画されます。

export const greeting: string = "hello";

出力

:::code-group ディレクティブは、解決されたラベル配列を保持する tabs プロパティと、フェンスごとに 1 つの <pre data-lang="…"> 子要素を持つ <CodeGroup> JSX 要素を生成します。

<CodeGroup tabs={["index.ts", "index.js"]}>
  <pre data-lang="ts">export const greeting: string = "hello";</pre>
  <pre data-lang="js">export const greeting = "hello";</pre>
</CodeGroup>

フレームワークは <CodeGroup> を同梱していません — zudo-doc は pages/_mdx-components.ts で独自の実装を登録し、tabs 配列と <pre data-lang> の子要素を既存の <Tabs> / <TabItem> UI にマッピングします。各 <pre> 内のコードは生のテキストです(Rust パイプラインは :::code-group フェンス内でシンタックスハイライトを実行しません)。

name によるタブの同期

オプションの name 属性を使うと、同じページ内で同じ名前を持つすべての :::code-group ブロックが連動します。一方のグループでタブをクリックすると、同じ名前を持つほかのグループも — 対応するラベルのタブが存在する場合に — 自動的に切り替わります。

:::code-group{name="package-manager"}

```sh title="npm"
npm install my-lib
```

```sh title="pnpm"
pnpm add my-lib
```

:::

:::code-group{name="package-manager"}

```sh title="npm"
npm run dev
```

```sh title="pnpm"
pnpm dev
```

:::

選択したタブは localStoragetabs-group-{name} というキーにも保存されます。次回のページ読み込み時、同じ名前を持つすべてのグループが保存済みのタブを復元します(保存されたラベルがグループに存在しない場合はデフォルトのタブにフォールバックします)。

内部的には、name は zfb によって <CodeGroup> コンポーネントへの prop として転送され、<CodeGroup> はそれを下層の <Tabs> コンポーネントの groupId として渡します。TabsInit スクリプトはレンダリングされた DOM の data-group-id を読み取り、クリック時に同じ groupId を持つすべてのコンテナを同期しながら、localStorage への読み書きによってページをまたいだ永続化を行います。

補足

  • 空の :::code-group コンテナ(フェンスなし)は、プレーンテキストのまま変更されません。

  • ネストした :::code-group ディレクティブはサポートされていません。

Revision History

Takeshi Takatsudo作成: 2026-05-29T01:44:41+09:00更新: 2026-06-14T00:26:32Z

AI Assistant

Ask a question about the documentation.