Codes
複数のコードスニペットをタブ形式で表示し、グループ化やコピー機能を備えた composable で themeable なコードコンポーネントです。
const Demo = () => {
return <div>Demo</div>;
}インストール
CodeProvider の設置
グループの選択状態を記憶し、アプリケーション全体で同期するには、CodeProvider をレイアウトに設置する必要があります。
CodeProvider は以下の機能を提供します:
- グループ選択の永続化 -
localStorageを使用してユーザーの選択を保存します。 - ページ間の同期 - すべてのページで同じグループが選択された状態を維持します。
- 複数のコードブロック間の同期 - 1つのコードブロックでグループを変更すると、他のすべてのコードブロックも同じグループに切り替わります。
例えば、npm/yarn/pnpm のようなパッケージマネージャーをグループで管理している場合、ユーザーが一度 pnpm を選択すれば、そのサイト内のすべてのインストールコマンドが pnpm で表示されるようになります。
Props
| Name | Type | Description |
|---|---|---|
| defaultActiveGroups | string[] | デフォルトで選択されるグループの配列(オプション) |
構造
Codes コンポーネントは以下のパーツで構成されています:
Codes- メインのコンテナコンポーネント。タブの状態を管理します。CodeHeader- ヘッダー部分。タブやボタンを配置します。CodeList- タブのリスト部分。CodeTrigger- 個別のタブトリガー。CodeContent- コードコンテンツのラッパー。CodeDisplay- シンタックスハイライトされたコードを表示。CodeCopyButton- コピーボタン。CodeGroupSelector- グループセレクター(オプション)。CodeGroupOption- グループオプション。
使い方
基本的な使い方
複数のコードタブ
グループセレクター付き
パッケージマネージャーや言語の切り替えなど、グループごとにコードを切り替える場合に使用します。
アイコン付き
コンポーネント
Codes
メインのコンテナコンポーネント。タブの状態管理を行います。
Props
| Name | Type | Description |
|---|---|---|
| defaultValue | string | デフォルトで選択されるタブの値 |
| groups | string[] | グループの配列(オプション) |
CodeHeader
ヘッダー部分のコンテナ。タブリストやボタンを配置します。
CodeList
タブのリストコンテナ。スクロール可能で、複数の CodeTrigger を含みます。
CodeTrigger
個別のタブトリガー。クリックでコードコンテンツを切り替えます。
Props
| Name | Type | Description |
|---|---|---|
| value | string | タブの一意な値 |
| group | string | グループ名(オプション) |
CodeContent
コードコンテンツのラッパー。選択されたタブに対応するコードを表示します。
Props
| Name | Type | Description |
|---|---|---|
| value | string | コンテンツの値(CodeTrigger の value と対応) |
| code | string | コピー用の生のコード文字列 |
CodeDisplay
シンタックスハイライトされたコードを表示します。
Props
| Name | Type | Description |
|---|---|---|
| html | string | generateCodeHtml で生成された HTML 文字列 |
CodeCopyButton
現在選択されているコードをクリップボードにコピーするボタン。
CodeGroupSelector
グループを切り替えるセレクター。
CodeGroupOption
グループの選択肢。
Props
| Name | Type | Description |
|---|---|---|
| value | string | グループの値 |
実装のヒント
CodeProvider の重要性
グループ機能を使用する場合、CodeProvider の設置は必須です。設置しないと以下の問題が発生します:
- グループの選択がページ遷移で失われる
- 複数のコードブロック間で選択が同期されない
- ユーザーの選択が記憶されない
サーバーコンポーネントでの使用
generateCodeHtml は非同期関数なので、React Server Components で使用するのが最適です。
コードの取得
コードは外部ファイルから読み込むこともできます:
スタイリング
コンポーネントは Tailwind CSS でスタイリングされており、カスタマイズ可能です:
使用例
- ドキュメント内でのコード例の表示
- チュートリアルでの複数言語対応
- パッケージマネージャーごとのインストールコマンド
- ファイル構成の表示
- API レスポンスの例示
関連ツール
このコンポーネントを最大限活用するために、以下のツールを推奨します:
MDX のコード解析
MDX ファイル内のコードブロックを解析するには、remark-code-to-slot を使用することを推奨します。
このプラグインは、MDX 内のコードブロックをスロットに変換し、データ属性として解析しやすい形式で提供します。
詳細は remark-code-to-slot のドキュメントをご覧ください。
シンタックスハイライト
コードのシンタックスハイライトには、Shiki を使用することを推奨します。
Shiki は VS Code と同じ TextMate 文法エンジンを使用しており、以下の特徴があります:
- 正確で美しい - VS Code と同じエンジンで一貫性のあるハイライト
- ゼロランタイム - ビルド時に処理され、JavaScript を一切配信しない
- 高度なカスタマイズ - HAST ベースで、トランスフォーマーや装飾が可能
- ユニバーサル - ブラウザ、Node.js、Cloudflare Workers など、あらゆる環境で動作
詳細は Shiki のドキュメントをご覧ください。