これは最初から最後まで暗記する教材ではなく、必要なときに参照するリファレンス です。初めての貢献では上のルートを選び、編集中に見出し、リンク、画像、メディア、frontmatter で迷ったときだけ該当章へ移動してください。
編集を始める前に
最短で確実な流れは次のとおりです。
対象が src/content/ 配下にあり、zh.md、ja.md、en.md が目的の言語と一致することを確認します。
今回の目的に必要な箇所だけを変更し、新しい事実には追跡可能な出典を用意します。
frontmatter の両方の ---、既存フィールド、インデント、引用符を保ちます。
Pull Request を作成する前に Preview / Changes で差分を確認します。
本サイトは Wikitext ではなく Markdown を使用します。構文記号は半角 ASCII で入力してください。日本語・中国語入力の全角記号は Markdown として機能しません。
初心者の原則:小さく正確な変更を優先してください。無関係な段落をついでに整理せず、AI の出力を事実の出典として扱わないでください。
見出し
# で見出しを作成します。記号の数が階層に対応し、最大6階層まで使えます。# の後ろには半角スペースが必要です。ページタイトルは frontmatter から表示されるため、記事本文は通常 ## から始めます。
記述例:
## レベル2の見出し
### レベル3の見出し
表示例:
レベル3の見出し例
テキストの書式
記述例:
**太字テキスト**
*斜体テキスト*
** *太字斜体テキスト* **
~~取り消し線テキスト~~
`インラインコード`
表示例:
太字テキスト 、斜体テキスト 、太字斜体テキスト 、取り消し線テキスト、インラインコード
リスト
箇条書きリスト
- または + を使用します。
記述例:
- 項目1
- 項目2
表示例:
リスト記号の後ろには、必ず半角スペースを入れてください。
番号付きリスト
数字の後ろにピリオドを付けます。
記述例:
1. 手順1
2. 手順2
3. 手順3
表示例:
手順1
手順2
手順3
ハイパーリンク
記述例:
[ 本サイト ]( https://kamitsubaki.wiki/ja/ )
表示例:
本サイト
表
| で列を区切り、- で見出し行との区切りを定義します。
記述例:
| アーティスト | 楽曲名 | 歌詞 |
| :--- | :---: | ---: |
| KAF | 糸 | 省略 |
| RIM | 1999 | 省略 |
表示例:
アーティスト 楽曲名 歌詞 KAF 糸 省略 RIM 1999 省略
配置方法:
:---:左揃え
:---::中央揃え
---::右揃え
Frontmatter
ファイル上部のFrontmatterには、編集する記事の属性を記述します。
Frontmatterの開始記号と終了記号には、どちらも --- を使用します。
例:
---
locale : ja
translationKey : example-entry
title : 記事の例
---
表示結果: ページはこれらのフィールドからタイトル、言語間の関連、メタデータを生成します。YAML ブロック自体は記事本文に表示されません。
画像の挿入
記述例:

表示結果: この位置に画像が表示されます。画像がまだ追加されていない場合も、代替テキストが内容を説明します。
画像ファイルは public/images/ に配置しますが、Markdown の URL は /images/ から始め、public を含めません。情報を持つ画像には内容を説明する代替テキストを付け、装飾画像では  のように空にできます。
Markdown エディターについて
Markdown形式のファイルを作成するために、特別なエディターは必要ありません。
メモ帳などの基本的なテキストエディターでも、保存時に拡張子を .md に変更すればMarkdownファイルを作成できます。
Markdownに慣れていない方には、リアルタイムプレビューに対応したエディターの方が使いやすい場合があります。
本ページの作成者は、機能が充実しており、複数のプラットフォームに対応しているObsidianを推奨します。
Wiki 短縮構文と管理されたメディア
Markdown の基本を学んだ後は、ルビ、折りたたみ、意味付けのために、サイトが対応する一部の HTML を使用できます。本文の HTML はビルド時に安全化されるため、ブラウザーが対応するすべての要素を利用できるわけではありません。
安全境界
本文では次の種類の要素だけを許可します。
構造:p、h1–h6、blockquote、hr、br、div、span。
テキストの意味付け:a、abbr、b、strong、i、em、u、s、del、mark、small、code、pre、kbd、samp、var、sub、sup、cite、q、time。
リストとデータ:ul、ol、li、dl、dt、dd、table、thead、tbody、tfoot、tr、th、td。
Wiki 向け表現:ruby、rt、rp、details、summary、figure、figcaption、picture、img、source。
属性もホワイトリスト方式です。通常のリンク、画像の代替テキスト、表のセル結合などは保持されますが、class はサイト側で実装済みの用途だけに制限されます。次の内容は削除されます。
script、style、iframe、object、embed、form など、コード実行や任意の外部コンテンツ読み込みにつながる要素。
onclick、onmouseover、onerror などすべての on* イベント属性と、インライン style。
javascript: など危険な URL スキーム。本文で指定した id / name には安全な接頭辞が付き、ページ側のオブジェクトを上書きできません。
投稿者がこの HTML を直接書く必要は通常ありません。下記の Wiki 短縮構文を優先してください。サイト側のコードが対応する要素を生成し、その結果も同じホワイトリストで検査されます。新しい操作が必要な場合は PR で再利用可能な短縮構文を提案し、スクリプトや外部プレイヤーのコードを記事へ貼り付けないでください。
Wiki 短縮構文一覧
短縮構文は関数に似た {{名前::引数}} 形式です。名前と引数の数は固定されています。
用途 構文 ルビ {{ruby::本文::読み}}読みとローマ字 {{ruby::本文::かな::romaji}}ネタバレ / 伏せ字 {{spoiler::隠す文字}}強調表示 {{mark::重要}}略語の説明 {{abbr::V.W.P::Virtual Witch Phenomenon}}キーボード入力 {{kbd::Ctrl+K}}機械可読の日付 {{time::表示文字::2026-07-19}}小文字、上付き、下付き {{small::文字}}、{{sup::2}}、{{sub::2}}歌詞切り替えボタン {{lyrics-controls::ja}}(各ファイルでは zh / en に変更)
インライン構文の引数はプレーンテキストです。内部に Markdown や HTML を入れず、二重コロン :: を引数の区切りとして使います。Markdown 表の中でも列を壊しません。名前や引数数が誤っている場合は元の文字列が表示されるため、Preview で間違いを確認できます。
記述例:
{{mark::重要な内容}}
{{abbr::V.W.P::Virtual Witch Phenomenon}}
{{kbd::Ctrl+K}} を押す
{{time::2026年7月19日::2026-07-19}}
H{{sub::2}}O と x{{sup::2}}
{{small::補足説明}}
表示例:
重要な内容 、V.W.P 、Ctrl+K を押す、2026年7月19日 、H2 O と x2 、補足説明
楽曲ページでは {{lyrics-controls::ja}} を独立した段落にし、.my-lyric-box 歌詞コンテナの直前に置きます。サイトが各言語用のルビ、翻訳、ローマ字、同期歌詞ボタンを生成し、日本語版では翻訳ボタンを自動的に省略します。引数はファイルの locale と一致させてください。
歌詞ページの完全な書き方
歌詞ページは、ローカライズされた切り替えボタン、歌詞コンテナ、繰り返す歌詞行の3部分で構成します。ボタンは独立した段落としてコンテナの直前に置き、各 lyric-line に原文1行を記述します。
コード構文
{{lyrics-controls::言語}}
< div class = "my-lyric-box" >
< div class = "lyric-line" >
< div class = "jp-lyric" >
< ruby >原文< rt class = "furi" >かな</ rt >< rt class = "roma" >romaji</ rt ></ ruby >
</ div >
</ div >
</ div >
言語 は現在のファイルに合わせて zh、ja、en のいずれかにします。
furi は「注音を表示」ボタンで切り替えるかな、roma はローマ字トラックです。
中国語訳は cn-lyric、英語訳は trans-lyric を使い、日本語ファイルでは翻訳用 <div> を記述しません。
かな自体にルビが不要な場合は、ローマ字だけを書けます:<ruby>なら<rt class="roma">nara</rt></ruby>。
行を増やすたびに lyric-line 一式を複製します。この生 HTML ブロック内に {{ruby::...}} 短縮構文を置かないでください。HTML ブロック内部では Markdown 短縮構文が再解析されません。
書き方
日本語の楽曲ファイルへコピーできる、1行分の完全な例です。
{{lyrics-controls::ja}}
< div class = "my-lyric-box" >
< div class = "lyric-line" >
< div class = "jp-lyric" >
< ruby >間違< rt class = "furi" >まちが</ rt >< rt class = "roma" >machiga</ rt ></ ruby >< ruby >い< rt class = "roma" >i</ rt ></ ruby >
</ div >
</ div >
</ div >
実例
上のコードは、操作できる歌詞練習コンポーネントとして表示されます。
注音を非表示 ローマ字に切り替える 同期歌詞を有効にする 再生 リセット
同期歌詞のタイムライン
カラオケ風の単語アニメーションを表示する場合は、各歌詞単位の直前に [mm:ss.xx] または [mm:ss.xxx] のタイムタグを記述します。時刻は歌詞タイマーの開始点を基準とした、その単位の開始時刻です。再生中は隣り合うタイムタグの間を左から右へ連続的に塗り進めます。「再生」で 00:00.00 から計時し、タイムタグ付きの行をクリックするとその行へ移動して再生を続け、「リセット」で先頭へ戻ります。
mm と ss はそれぞれ2桁、小数部は2桁または3桁です。例:[00:03.50]、[01:02.345]。
タイムタグは対象の <ruby> またはプレーンテキストへ空白を入れず直結します。個別に強調する単位ごとに開始時刻が必要です。
各 .jp-lyric の最初のタイムタグは、その行をクリックしたときの移動先にもなります。翻訳行がある場合は、先頭に原文と同じ行開始時刻を付けることを推奨します。
各単位は次のタイムタグまで塗り進みます。行末の単位は次の行まで続き、最終行には短い自動終了時間が適用されます。
時刻は再生順に増加させます。一部の行だけにタイムタグを付けることもでき、タグのない行は通常表示のままです。
投稿者が書くのは角括弧のタイムタグだけです。サイト生成後の lrc-tag、lrc-word、スクリプトを手書きしないでください。時刻は実際に試聴して調整し、AI に推測させないでください。
現在の歌詞タイマーは独立しており、上部の YouTube、bilibili、その他の試聴プレイヤーの再生位置を自動取得しません。
書き方
{{lyrics-controls::ja}}
< div class = "my-lyric-box" >
< div class = "lyric-line" >
< div class = "jp-lyric" >
[00:00.00]< ruby >間違< rt class = "furi" >まちが</ rt >< rt class = "roma" >machiga</ rt ></ ruby >[00:00.80]< ruby >い< rt class = "roma" >i</ rt ></ ruby >
</ div >
</ div >
</ div >
実例
同期歌詞を有効にすると、次の2つの日本語単位が 0 秒と 0.8 秒から順に左から右へ塗られます。
注音を非表示 ローマ字に切り替える 同期歌詞を有効にする 再生 リセット
歌詞 HTML を生成する AI プロンプト
長い歌詞では、手元にある原文、読み、ローマ字、翻訳を AI に機械的に整形させられます。AI を歌詞・翻訳・読みの出典にはせず、貼り付け前に全行を確認し、入力内容の出典が今回の投稿に利用できることも確認してください。
プロンプト構文
次の全文を AI にコピーし、最後の5つの入力欄だけを置き換えます。
あなたは KAMITSUBAKI Wiki の歌詞 HTML 整形アシスタントです。私が提供した歌詞トラックだけをサイト形式へ変換してください。
必須条件:
1. 入力だけを変換し、歌詞の追加、翻訳、書き換え、不足する読みの推測をしない。
2. Markdown に直接貼り付けられる内容だけを出力し、説明やコードフェンスを付けない。
3. 先頭に {{lyrics-controls::ファイル言語}} を出力し、その後に < div class = "my-lyric-box" > を1つだけ生成する。
4. 入力1行につき < div class = "lyric-line" > を1つ使い、日本語原文を < div class = "jp-lyric" > に入れる。
5. かなとローマ字がある場合は < ruby >原文< rt class = "furi" >かな</ rt >< rt class = "roma" >romaji</ rt ></ ruby > を使う。
6. ローマ字だけなら < ruby >原文< rt class = "roma" >romaji</ rt ></ ruby > を使い、信頼できる読みがなければ原文をそのまま残す。
7. 中国語訳は cn-lyric、英語訳は trans-lyric を使う。日本語ファイルまたは翻訳未入力では翻訳 div を生成しない。
8. 行数、順序、句読点、文字を厳密に維持する。単語単位の対応が不明な場合は、提供された1行分の読みを1つの ruby にまとめ、勝手に分割しない。
9. テキスト中の <、>、& をエスケープする。style、すべての on* 属性、script、iframe、id、指示されていない要素を出力しない。
10. すべての div、ruby、rt が正しく閉じていることを確認し、ボタンと歌詞コンテナの間には空行を1つだけ置く。
【ファイル言語】
zh / ja / en
【日本語原文:1行につき歌詞1行】
ここに貼り付け
【かな:任意、行数を原文と一致させる】
ここに貼り付け
【ローマ字:任意、行数を原文と一致させる】
ここに貼り付け
【翻訳:任意、行数を原文と一致させる】
ここに貼り付け
書き方
入力欄だけを次のように置き換えます。
【ファイル言語】
ja
【日本語原文】
間違い
【かな】
まちがい
【ローマ字】
machigai
【翻訳】
出力例
正しい AI 出力は次のようになり、そのまま楽曲本文へ貼り付けられます。
{{lyrics-controls::ja}}
< div class = "my-lyric-box" >
< div class = "lyric-line" >
< div class = "jp-lyric" >
< ruby >間違い< rt class = "furi" >まちがい</ rt >< rt class = "roma" >machigai</ rt ></ ruby >
</ div >
</ div >
</ div >
Ruby ルビ
表示する本文と読みだけを記述します。
{{ruby::局部壊死::きょくぶえし}}
文字単位で正確に対応させる場合は、短縮構文を続けて記述します。
{{ruby::観::かん}}{{ruby::測::そく}}{{ruby::所::じょ}}
表示結果:
初期状態で隠したい補足内容
短い内容には伏せ字構文、長い補足には次のブロック形式を使います。どちらも記事固有の JavaScript を必要としません。
spoiler の引数はプレーンテキスト専用です。{{spoiler::...}} の内側に **太字**、Markdown リンク、HTML を入れると、短縮構文がソースのまま表示されます。伏せ字全体を太字にする場合は **{{spoiler::隠す文字}}** と記述してください。見出し、リスト、リンクなどを隠す内容に混在させる場合は、次節の details ブロックを使用します。
記述例:
物語の結末:{{spoiler::初期状態では隠れる文字}}
表示例:
物語の結末:初期状態では隠れる文字
折りたたみと展開
対になる details マーカーを使います。開始・終了マーカーはそれぞれ独立した段落にし、前後に空行を置いてください。内部では通常の Markdown を使用できます。
{{details::全曲リストを表示}}
1. 1曲目
2. **2曲目**
{{/details}}
表示結果:
全曲リストを表示
1曲目
2曲目
通常の段落は空行で分けます。表のセルなど特殊な場所だけ、ホワイトリストに含まれる <br> を使用してください。
音声・動画の埋め込み
本サイトでは共通のメディア短縮構文を使用できます。次の構文を1行だけで記述すると、ビルド時にレスポンシブで安全な遅延読み込み iframe が生成されます。
@[ プロバイダー ](メディア ID または共有 URL "任意のタイトル")
プロバイダー名は youtube、bilibili、apple-music、spotify、netease、qq-music に対応しています。YouTube、bilibili、NetEase Cloud Music、QQ Music は動画・楽曲 ID の直接指定にも対応し、すべてのプロバイダーで一般的な共有 URL を使用できます。
@[ youtube ]( 3Wtx6k2vInU " 花譜 - 糸 " )
@[ bilibili ]( BV1CJ411b7Ym " 花譜 - 糸 " )
@[ apple-music ]( https://music.apple.com/cn/song/example/123456789 )
@[ spotify ]( https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT )
@[ netease ]( 2637083551 )
@[ qq-music ]( 001ABCDEF )
表示例:
YouTube 花譜 - 糸
集約メディア切り替え
同じ作品に複数プラットフォームの公式コンテンツがある場合、既存のメディア短縮構文を一つの集約ブロックにまとめられます。ページには選択中のソースと切り替えボタンが表示され、従来の単独 @[provider](...) 構文はそのまま利用できます。
コード構文
{{media-switcher::切り替えタイトル}}
@[ 1つ目のプロバイダー ]( メディアIDまたは共有URL " 任意のキャプション " )
@[ 2つ目のプロバイダー ]( メディアIDまたは共有URL " 任意のキャプション " )
{{/media-switcher}}
書き方
作品名や「公式視聴」など、現在の言語に合うタイトルが必須です。
各項目は従来のメディア構文を使い、対応プロバイダーと URL の検証規則も同じです。
各行は空行を挟まず続けて記述できます。一行にまとめても解析されますが、レビューと保守のため、プラットフォームごとに一行で書くことを推奨します。
一つのブロックには異なる 2–6 プラットフォームを指定できます。同じプロバイダーの重複、集約ブロックの入れ子、通常段落の混在はできません。
すべてのソースが有効である必要があります。不明なプロバイダー、危険な URL、不正な ID が一つでもある場合、ブロック全体は iframe を生成せず、修正できるようソーステキストを表示します。
JavaScript がない場合は検証済みプレイヤーを順番に表示します。JavaScript がある場合はボタン、方向キー、Home、End で切り替えられます。
実例
{{media-switcher::花譜 - 糸}}
@[ bilibili ]( BV1CJ411b7Ym " 花譜 - 糸 " )
@[ youtube ]( 3Wtx6k2vInU " 花譜 - 糸 " )
{{/media-switcher}}
表示例:
同じ Markdown 表のセルに複数の短縮構文を続けて記述すると、記述順に縦方向へ表示されます。そのセルには短縮構文と空白だけを記述し、説明文を混在させないでください。
| 作曲 | 作詞 | プレイヤー |
| --- | --- | --- |
| Wiz_nicc | Wiz_nicc | @[ bilibili ]( BV13ZZNYQEQx ) @[ netease ]( 2637083551 ) |
認識できないプロバイダーや URL は通常のリンクとして残り、任意の第三者 iframe は生成されません。新規コンテンツでは、許可プロバイダー、プライバシー属性、サイズ、スタイルを統一するため短縮構文を使用し、第三者サイトの生の <iframe> を貼り付けないでください。
アーティストページの外部リンク・ブランドカード
アーティストページでは、2 か所に公式リンクを記述できます。どちらも同じプラットフォーム判定とブランド表示を使いますが、記述方法は異なります。
情報欄の公式リンク
情報欄では frontmatter の officialLinks を使用します。各項目には表示名 label と完全な URL href の両方が必要です。
officialLinks :
- label : "公式サイト"
href : "https://kaf.kamitsubaki.jp/"
- label : "YouTube"
href : "https://www.youtube.com/@virtual_kaf"
本文の外部リンク
本文では、独立したレベル2見出し ## 外部リンク を正確に記述し、その直下に通常の Markdown 箇条書きリストを置きます。各リンクの文字列にはプラットフォーム名またはページ名を含めてください。
## 外部リンク
- [ 公式サイト ]( https://kaf.kamitsubaki.jp/ )
- [ YouTube ]( https://www.youtube.com/@virtual_kaf )
- [ X (Twitter) ]( https://x.com/virtual_kaf )
- YouTube:<https://...>、- <https://...>、説明文だけの項目は使用しないでください。これらの形式では完全なカードを生成できません。
「出典と外部リンク」のような複合見出しは使用しないでください。根拠資料は独立した ## 出典 に、読者向けの公式サイトや SNS は ## 外部リンク に分けます。
中国語・日本語・英語のアーティスト本文では、それぞれ 外部链接、外部リンク、External Links を使用します。サイトが認識できるよう、見出しを正確に記述してください。
JavaScript が有効な場合、アーティストページではリストがプラットフォーム Logo、ブランド色、外部リンク矢印を備えたレスポンシブなリンクカードになります。フォーム用ボタンではなく、移動用リンクとしての意味は保たれます。JavaScript がない場合は、読みやすくクリック可能な通常のリストとして残ります。
Bilibili、YouTube、X/Twitter、TikTok、Instagram、Weibo、Niconico、Spotify、Apple Music、NetEase Cloud Music、pixiv、piapro、Steam、Wikipedia、KAMITSUBAKI 公式サイトを識別できます。その他の URL には汎用サイト表示を使用します。
プラットフォームの SVG やリモート Logo 画像を本文へ貼り付けないでください。アイコンはサイト側で一元管理します。
PR 前チェック
ファイルパスと locale が対応し、各言語版で同じ translationKey を使っている。
2 つの ---、YAML のインデント、フィールド型を壊していない。
日付は YYYY-MM-DD、再生時間は MM:SS または HH:MM:SS。
新しい事実に信頼できる出典があり、リンクが開き、情報画像に適切な代替テキストがある。
アーティスト本文のリンクは独立した ## 外部リンク と - [表示名](URL) のリストを使い、生の URL や複合見出しがない。
メディアは @[provider](...) を使用し、本文にスクリプト、イベント属性、認証情報、トークン、個人情報がない。
Preview / Changes に今回の変更だけがあり、他言語や無関係な内容を誤って削除していない。
属性ブロックガイド
記事を編集する際に、Frontmatterの属性が何を意味するのか分からない場合は、以下の説明を参照してください。
共通部分
以下の属性は、すべての記事カテゴリーで共通して使用されます。
locale:文書の言語版を示します。zh は中国語、en は英語、ja は日本語を表します。編集している記事の言語に対応する値を入力してください。
translationKey:同一記事の多言語版を関連付ける共通識別子です。同じ記事の中国語・日本語・英語ファイルには、同一の値を設定してください。
記述例:
locale : ja
translationKey : kaf-originals-shi
結果: このファイルは日本語コレクションに入り、同じ translationKey を持つ中国語・英語ファイルと関連付けられます。
アーティスト部分
最小例:
name : 花譜
romanizedName : KAF
statusLabel : 活動状態
status : 活動中
image : /images/artists/kaf.webp
表示結果: アーティストページに「花譜 / KAF」、活動状態、人物画像が表示されます。
属性 型 必須 役割と入力内容 localezh / ja / enはい 現在の記事の言語 translationKey文字列 はい 同一人物の各言語版で共通して使用する識別子 code文字列 いいえ 人物番号、資料番号、または内部コード name文字列 はい 現在の言語で表示する人物名 romanizedName文字列 はい ローマ字名、ラテン文字名、または国際表示名 categoryTitle文字列 いいえ 所属カテゴリーのメインタイトル categorySubtitle文字列 いいえ 所属カテゴリーのサブタイトル、または英語による説明 categoryOrder数値 いいえ カテゴリー間の並び順。通常は小さい値ほど先に表示されます itemOrder数値 いいえ 現在の人物を所属カテゴリー内で並べるための値 meta文字列 いいえ 一覧カードに表示する短い補足情報。役割、所属、短い概要などを記述します debutDate文字列 いいえ デビュー日。YYYY-MM-DD 形式を推奨しますが、Schemaでは強制されません profileTagline文字列 いいえ 人物詳細ページに表示する紹介用の短い文 designCredits文字列配列 いいえ キャラクターデザイン、ビジュアルデザイン、モデリングなどを担当した制作者の一覧 affiliations文字列配列 いいえ 所属レーベル、グループ、企画、または組織 officialLinksオブジェクト配列 いいえ 公式サイトおよび公式SNSへのリンク officialLinks[].label文字列 はい Official Site、YouTube などのリンク名officialLinks[].href文字列 はい 公式リンクのURL featuredEntriesオブジェクト配列 いいえ 人物ページで重点的に関連付ける他の記事 featuredEntries[].label文字列 はい 関連コンテンツの表示名 featuredEntries[].href文字列 はい 関連記事へのパス featuredEntries[].kind固定列挙値 はい 関連コンテンツの種類。artist、project、album、song のいずれかのみ使用できます theme共通テーマオブジェクト いいえ 人物詳細ページで使用する個別の配色 statusLabel文字列 はい 「活動状況」など、状態欄に表示する見出し status文字列 はい 「活動中」「活動終了」などの実際の状態 inactiveブール値 いいえ 非活動状態かどうか。通常、true は活動終了済み、またはアーカイブ済みであることを示します image文字列 はい 人物のメイン画像、アイコン、または立ち絵へのパス seo共通SEOオブジェクト いいえ 現在の記事の検索エンジンおよび共有用情報
企画部分
最小例:
kind : project
title : 神椿市建設中。
description : 神椿の世界観プロジェクト
order : 10
表示結果: 企画は order 順に並び、タイトルと説明が一覧カードに使われます。
属性 型 必須 役割と入力内容 localezh / ja / enはい 現在の企画記事の言語 translationKey文字列 はい 同一企画の各言語版で共通して使用する識別子 kind文字列 はい project、game、virtual-world などの企画種類。Schemaでは固定値に制限されていませんtitle文字列 はい 企画名 description文字列 はい 企画の短い説明。通常は一覧カードやページの概要に使用されます order数値 はい 企画一覧における並び順 seo共通SEOオブジェクト いいえ 検索エンジンおよび共有用情報
ログ部分
最小例:
date : "2026-07-19"
type : update
title : サイト内容の更新
order : 10
表示結果: ログページに日付、種類、タイトルが表示され、order 順に並びます。
属性 型 必須 役割と入力内容 localezh / ja / enはい 現在のログ記事の言語 translationKey文字列 はい 同一ログの各言語版で共通して使用する識別子 date文字列 はい ログの日付。YYYY-MM-DD 形式を推奨しますが、Schemaでは検証されません type文字列 はい update、notice、maintenance などのログ種類title文字列 はい ログのタイトル summary文字列 いいえ ログの短い概要 order数値 はい ログの並び順 seo共通SEOオブジェクト いいえ 検索エンジンおよび共有用情報
楽曲部分
楽曲ファイルは アーティスト ID / カテゴリ / 楽曲 ID / 言語.md の構造にします(例:songs/kaf/originals/shi/ja.md)。第1階層のアーティストフォルダが記事の正規保存先となり、カテゴリフォルダは関連する全アーティストの一覧で共通して使われます。推奨フォルダは originals(オリジナル曲)、covers(カバー曲)、genealogy(系譜曲)、suites(組曲)、collaborations(コラボ曲)、projects(企画曲)です。独自のフォルダも自動的に新しいカテゴリになります。
最小例:
title : 糸
artist : 花譜
artistId : kaf
releaseDate : "2018-12-06"
duration : "03:52"
複数アーティストで記事を共有する場合: 同一録音には楽曲フォルダを1つだけ作成します。代表となるアーティストを正規保存先に選び、artistId をパスの第1階層と一致させたうえで、掲載先となる全アーティスト ID を artistIds に記述します。たとえば「古傷」は songs/harusaruhi/collaborations/古傷-furukizu/ だけに保存します。
title : 古傷
artist : 幸祜×春猿火
artistId : harusaruhi
artistIds :
- harusaruhi
- koko
code : apple-1678038919
この場合、同じフォルダ内の zh.md、ja.md、en.md だけを管理すれば、同じ記事が春猿火と幸祜の「コラボ曲」一覧に表示され、どちらからも同じ正規ページへ移動します。songs/koko/ に本文、translationKey、画像情報を複製しないでください。artistIds には必ず artistId を含め、重複させないでください。artistId を先頭に置くことを推奨します。code を使う場合は録音ごとに一意とし、別の楽曲フォルダで再利用しないでください。
表示結果: 楽曲ページにタイトル、アーティスト、公開日、再生時間が表示され、artistIds に記載した各アーティストの楽曲一覧に分類されます。artistIds を省略した場合は artistId の一覧だけに表示されます。
属性 型 必須 役割と入力内容 localezh / ja / enはい 現在の楽曲記事の言語 translationKey文字列 はい 同一楽曲の各言語版で共通して使用する識別子 title文字列 はい 楽曲タイトル artist文字列 はい メインアーティストまたは歌唱者名 artistId小文字英数字 ID はい 正規保存先のアーティスト ID(例:kaf)。パスの最初のフォルダと一致させます artistIds小文字英数字 ID のリスト いいえ 同じ記事を掲載する全アーティストの一覧。複数アーティスト曲では必須で、artistId を含め、重複させません composer文字列 いいえ 作曲者 lyricist文字列 いいえ 作詞者 album文字列 いいえ 収録アルバム duration文字列 いいえ 楽曲の長さ。03:45 形式を推奨しますが、Schemaでは検証されません releaseDate文字列 いいえ リリース日。YYYY-MM-DD 形式を推奨します code文字列 いいえ 録音固有の番号、資料番号、または内部コード。別の楽曲フォルダで重複させません categoryTitle文字列 いいえ 所属カテゴリーのタイトル categorySubtitle文字列 いいえ 所属カテゴリーのサブタイトル categoryOrder数値 いいえ カテゴリー間の並び順 itemOrder数値 いいえ 所属カテゴリー内での楽曲の並び順 image文字列 いいえ 楽曲画像、シングルジャケット、またはアルバムジャケットへのパス seo共通SEOオブジェクト いいえ 検索エンジンおよび共有用情報
アルバム部分
最小例:
title : 観測α
artist : 花譜
type : Album
releaseDate : "2019-09-11"
tracks :
- number : 1
title : 糸
songId : kaf/originals/shi
表示結果: アルバム情報と収録曲一覧が生成され、songId のある曲は本サイトの楽曲ページへ移動できます。
属性 型 必須 役割と入力内容 localezh / ja / enはい 現在のアルバム記事の言語 translationKey文字列 はい 同一アルバムの各言語版で共通して使用する識別子 title文字列 はい アルバムタイトル romanizedTitle文字列 いいえ ローマ字、ラテン文字、または国際表示用のタイトル artist文字列 はい メインアーティスト type文字列 いいえ Album、EP、Mini Album などの作品種別description文字列 いいえ 詳細ページの見出し付近に表示する短い説明 releaseDate文字列 いいえ リリース日。YYYY-MM-DD 形式を推奨します label文字列 いいえ リリースレーベル catalogNumber文字列 いいえ 規格品番またはカタログ番号 trackCount数値 いいえ 総曲数 duration文字列 いいえ アルバムの総時間 code文字列 いいえ 一覧番号、資料番号、または内部コード categoryTitle文字列 いいえ 所属カテゴリーのタイトル categorySubtitle文字列 いいえ 所属カテゴリーのサブタイトル categoryOrder数値 いいえ カテゴリー間の並び順 itemOrder数値 いいえ 所属カテゴリー内でのアルバムの並び順 image文字列 いいえ アルバムジャケットへのパスまたは URL officialLinksオブジェクト配列 いいえ 公式ページ、購入、配信リンク。各項目に label と href を指定します tracksオブジェクト配列 いいえ 収録曲一覧。各項目の title は必須で、disc、number、artist、duration、songId も指定できます tracks[].songId文字列 いいえ 本サイト内の楽曲記事へのパス。例:kaf/originals/shi theme共通テーマオブジェクト いいえ アルバム詳細ページの配色 seo共通SEOオブジェクト いいえ 検索エンジンおよび共有用情報
楽曲・アルバム補完基準
補完作業には、個別にレビューできる2段階の完成度があります。
カタログ掲載可能: パス、必須メタデータ、公式出典、ローカルの高解像度画像、公式リンク、最小限の本文が信頼できる状態です。曲目リンク、歌詞、長文の3言語化が未完成でも、不足範囲を明示すれば受け入れられます。
完成記事: 確認済み曲目、サイト内楽曲リンク、本文、利用可能な歌詞資料、3言語を補います。不明な項目を埋めることは完成ではありません。
ディレクトリのコード構文
songs/< artistId >/< category >/< songId >/< locale >.md
albums/< artistId >/< albumId >/< locale >.md
書き方
楽曲はアーティスト、次に曲種で分類します。アルバムはアーティストとアルバム ID のみで整理し、アーティスト分類 UI をアルバムのフォルダに重複させません。artistId、songId、albumId は安定した小文字 slug を使い、3言語で同じ translationKey を共有します。
実例
src/content/songs/kaf/originals/shi/
├── zh.md
├── ja.md
└── en.md
src/content/albums/kaf/kansoku-alpha/
├── zh.md
├── ja.md
└── en.md
楽曲記事の受け入れ基準
パスの artistId、カテゴリ、songId がメタデータと一致する。該当する場合は originals、covers、genealogy、suites、collaborations、projects を再利用する。
曲名、日付、クレジットは公式サイト、公式投稿の説明欄、正規リリースページ、信頼できるインタビューで確認する。AI 出力は出典ではない。
categoryOrder と itemOrder は既存項目と衝突せず、公開順またはサイト内順序を安定させる。
image はリポジトリ内の実在する画像を参照し、期限付き URL、検索サムネイル、仮画像、不要な複製を使わない。
@[bilibili](BV...) など管理されたメディア構文を使い、生の <iframe>、自動再生、非公式再投稿を追加しない。
本文で作品の概要と追跡可能な出典を示す。歌詞は任意。追加する場合は原文・翻訳・ローマ字を区別し、歌詞コントロールを再利用し、出典と著作権範囲を確認する。
zh.md、ja.md、en.md の同時追加を優先する。不足する翻訳や事実は PR に列挙し、架空の文章や仮文で埋めない。
アルバム記事の受け入れ基準
カタログ掲載可能の最低条件: 作品名、アーティスト、種類、確認済みリリース情報、公式ジャケット、少なくとも1件の公式または正規配信リンク、3言語共通の translationKey、出典に基づく短い本文。
Apple Music などの正規サービスまたは公式商品ページから取得できる最高品質のジャケットを優先する。可能なら正方形で 1500 × 1500 以上とし、検索サムネイル、スクリーンショット、仮画像、人工的な拡大画像を使わない。
ジャケットは public/images/albums/<artistId>/<albumId>.jpg に保存し、frontmatter では /images/albums/<artistId>/<albumId>.jpg を参照する。第三者画像 URL に依存しない。
trackCount は確認済み総曲数と一致させる。tracks を記載する場合はディスク番号、順序、曲名、アーティスト、時間を公式曲目表と照合する。
tracks[].songId はリンク先の楽曲記事が存在するときだけ追加する。未作成曲は title のみで保持し、壊れたリンクを作らない。
通常盤、再発盤、リミックス盤、ライブ盤は公式に別リリースの場合のみ分け、別版の日付や曲目を混在させない。
曲目や本文が不完全なら記事と PR の両方で範囲を示す。架空データで埋めず、完全収録と誤認させない。
構造メタデータ、曲順、画像、リンクは3言語で揃え、表示名と本文だけを自然に翻訳する。
本文のコード構文
## 作品について
作品の位置づけ、リリース背景、確認済みの制作情報を説明します。
## 公式視聴
@[ bilibili ]( BVxxxxxxxxxx )
## 補完状況
基本情報と公式リンクは完了済みです。曲目リンクは対応する楽曲記事の作成後に追加します。
## 出典
- [ 公式作品ページ ]( https://example.com/official )
- [ Apple Music ]( https://music.apple.com/example )
書き方
出典が支える内容だけを断定します。補完状況では、何が完了し何が不足しているかをレビュー担当者と次の編集者に伝え、計画や推測を百科事実として書きません。
実例
現在の参考として src/content/songs/kaf/、src/content/albums/kaf/、public/images/albums/kaf/ を確認してください。提出前に次を実行します。
pnpm check
pnpm test
pnpm build
チェック通過は技術上の最低条件であり、出典、曲順、リンク、画像品質のレビューを代替しません。
高度な使い方:対応する生 HTML
通常は短縮構文が簡単ですが、旧記事の保守や細かなマークアップのため、従来の安全な HTML 形式も引き続き利用できます。HTML は前述のホワイトリスト内に限定され、style、onmouseover、onclick、script、生の iframe はサニタイザーによって削除されます。
HTML Ruby ルビ
記述例:
< ruby >局部壊死< rt >きょくぶえし</ rt ></ ruby >
< ruby >観< rt >かん</ rt >測< rt >そく</ rt >所< rt >じょ</ rt ></ ruby >
表示例:
局部壊死きょくぶえし 、観かん 測そく 所じょ
HTML 伏せ字
インラインスタイルやマウスイベント属性に依存した旧形式は利用できません。安全な生 HTML では、サイト定義の wiki-spoiler クラスを使用します。
記述例:
< span class = "wiki-spoiler" tabindex = "0" >初期状態では隠れる文字</ span >
表示例:
初期状態では隠れる文字
HTML 折りたたみ
記述例:
< details >
< summary >全曲リストを表示</ summary >
< p >この補足内容は初期状態では閉じています。</ p >
</ details >
表示例:
全曲リストを表示
この補足内容は初期状態では閉じています。
HTML の意味要素と改行
記述例:
< mark >重要</ mark >
< abbr title = "Virtual Witch Phenomenon" >V.W.P</ abbr >
< kbd >Ctrl+K</ kbd > を押す< br >
H< sub >2</ sub >O と x< sup >2</ sup >
表示例:
重要 、V.W.P 、Ctrl+K を押す
H2 O と x2
生 HTML はホワイトリスト内の静的マークアップ専用です。メディアには @[provider](...)、歌詞操作には {{lyrics-controls::ja}} を使い、操作機能はサイトコードで一元管理してください。