カードは vault(あなたのリポジトリ)の中の Markdown ファイルです。新しく書くカードはすべてこの v2 の形で書きます。古い v1 の形も読めますが、新規では使いません(v1 の形)。
書式の正本は公開リポジトリにあります — anchor-card-format(SPEC.md・英語)。3つのアプリと検査ツールが従っている厳密な定義はそちらで、食い違いがあればそちらが正です。このページはそれを日本語で読める形にしたものです。
AI エージェントに書式を教えるときは、アプリ内の「使い方」から渡せるプロンプト(仕様書を読ませる指示が入っています)か、実例とvault に置くテンプレを直接渡してください。
書式そのものへの提案・不具合は Issues で受け付けています。
1枚まるごとの例
---
id: stat-sd-reading
deck: 統計/基礎
tags: [記述統計]
---
# 標準偏差から何が読み取れるか
平均が同じ2つのデータについて、どちらがばらついているかを数ひとつで言いたい。
<!-- back -->
**定義** [[stat-sd-def]]
データと同じ単位なので「だいたい平均からこれくらい離れている」と読める。
<!-- hint -->
大小は単位に引きずられる。単位をまたいで比べるなら 標準偏差 ÷ 平均。
<!-- note -->
出典:統計学の入門書であればどれでも。
構文は frontmatter・# タイトル・3つのマーカー行・[[id]] の参照だけです。本文のそれ以外は、何を書いても構文になりません。
どのファイルがカードになるか
次のすべてを満たすファイルが v2 のカードとして読まれます(パスは vault からの相対)。
- ファイル名が
.mdで終わり、INDEX.mdではなく、_で始まらない - 1つ以上のディレクトリの中にある(vault 直下のファイルは決してカードになりません。
README.mdやCLAUDE.mdの置き場だからです) - パス上のどのディレクトリも
_や.で始まらない(_drafts/や.github/は読みません) - ファイルの1行目が、前後の空白を除いて
---ちょうどである
深さとファイル名はこれ以外に制約がありません。4を満たさないファイルは v2 のカードではありません。
1行目の判定にしてあるのは、条件が1つで済み、どのエディタでも目で見えて、普通のメモと衝突しないためです。
frontmatter
最初の --- と、次に現れる「前後の空白を除いて --- の行」に挟まれた範囲です。閉じる --- が無いファイルはカードになりません(構文がどこで終わるか決まらないため)。本文は閉じた次の行から始まり、それ以降の --- はただの本文です。
ここは YAML ではありません。 読み方は次の4つだけです。
- 空行と
#で始まる行は無視する - それ以外は最初の
:で切り、前がキー、後ろが値(前後の空白は落とす)。:の無い行は無視する - 値の両端が対になる
"か'なら、その対を外す。エスケープは処理しない - リストは1行だけの
key: [a, b, c]。,で切って前後の空白と引用符を落とす。- aを並べる形は読まない
同じキーが2回出たら後のほうが勝ちます。書く側は繰り返さないでください。
YAML ライブラリを使わないのは、iOS・Android・macOS の3実装に別々の YAML を入れると、
noや日付の解釈といった端で挙動が割れるためです。同じバイト列を同じに読むことのほうが大事です。
キー
| キー | 必須 | 意味 |
|---|---|---|
id | 必須 | カードの不変の名前 |
deck | 書く側は必須 | まとまり。/ 区切り |
tags | 任意 | 1行のリスト。絞り込み用 |
ask | 任意 | false(大小無視)なら出題されない。[[id]] で引かれるためだけに存在するカードに使う |
知らないキーは無視されます。挙動を変えるつもりのキーを勝手に増やさないでください。
id
^[A-Za-z0-9][A-Za-z0-9-]{2,63}$:ASCII の英数字とハイフンで3〜64文字、先頭はハイフン以外。大文字と小文字は区別します。アンダースコアは使えませんidが無い、または形が違うファイルはカードになりません。 読み取りで回復しない唯一の壊れ方です(鍵が無ければ採点を記録できず、こちらで作ると履歴が混ざるため)- 学習ログには書いたとおりの文字列が入ります。アプリは大小を変えたり正規化したりしません
- 新しいカードには ULID(26文字の大文字)でも、読めるスラッグ(
stat-sd-01)でも構いません。1つの vault に混ざっていても問題ありません - 既存の
idを変えない。消したカードのidを再利用しない。 変えれば履歴が迷子になり、再利用すれば別の問いに昔の履歴が付きます。ファイル名の変更・移動・本文の書き直しはすべて安全です - 同じ
idのファイルが2つあると、パスの昇順で先のほうが採られます(検査はduplicate-idエラー)
deck
deck: A/B/Cを/で切り、各要素の前後の空白を落とし、空の要素は捨てます- デッキはファイルの置き場所と独立です。ファイルを移してもデッキは変わらず、
deck:を直せば変わります(履歴はidで結ぶので、どちらも履歴には影響しません) deckが無いときは、そのファイルのディレクトリのパスが使われます(統計/基礎/x.md→統計/基礎)。黙って失わないための受け皿で、検査はmissing-deckエラーを出します
本文
タイトル
本文の中で最初に現れる「# で始まり、後ろに文字のある行」がタイトルです。マーカーより前、本文の先頭に置いてください。 タイトルが無いときはファイル名(.md を除く)が使われます(検査は missing-title 警告)。
タイトル行はどの面にも属さず、カードと一緒に表示されます。ここに答えを書かないでください。
マーカーと面
マーカーは3つだけです。行を前後の空白を除いたものが、ちょうど次のどれかであるときにマーカーになります。
| マーカー | 始まる面 | いつ見えるか |
|---|---|---|
| (なし=本文の先頭) | 表 | 問いとして最初に出る |
<!-- back --> | 裏 | 「答えを見る」のあと |
<!-- hint --> | ヒント | 裏と一緒に。答えへの道筋・引っかかりやすい所 |
<!-- note --> | 補足 | 裏と一緒に。文脈・例外・出典 |
- 最初のマーカーより前が表(タイトル行を除く)
- 各マーカーは次のマーカーまでの面を切り替えます。順番は自由ですが、表 → 裏 → ヒント → 補足 を推奨します
- 各面の先頭と末尾の空行は落ちます。途中の空行は残ります
---・絵文字・表・見出し・コードフェンスは、ただの本文です。 面を切りません- それ以外の
<!-- … -->行はその面の本文として残ります。表示はアプリによって違うので、ほかの HTML コメントを書かないでください <!-- back -->が無い、または後ろに何も無いカードは裏が空です。 読み込みはされますが、検査はempty-backエラーを出します。ask: falseのカードも同じで、裏こそが[[id]]で引かれる中身だからです
参照 [[id]]
共有する文を1か所にだけ書き、必要なすべてのカードの中で見せる仕組みです。典型は ask: false の定義カードです。
- 書き方は
[[id]]。行のどこにあっても構いません - 展開するのは裏の中の参照だけです。ほかの面では書いたまま表示されます
- 参照を含む裏の行は、こう描かれます
- その行から
[[id]]を取り除き、空白を詰めたもの(残りが無ければ省く)。**定義** [[stat-sd-def]]なら**定義**がラベルとして残ります - 続けて、参照の順に参照先の裏
- 解決できない
idは「参照が見つかりません:id」と出ます。黙って消えることはありません
- その行から
- 1段だけです。差し込まれた裏の中の参照はもう展開しません
- 保存されているファイルは展開で書き換わりません
[[…]]の書き方はいわゆる wiki リンクと同じなので、ノートアプリと共有している vault でも自然に読めます。
描画
本文は Markdown です。アプリは共通の範囲(段落・強調・箇条書き・引用・表・コード)を描きます。理解できないものは文字のまま出るか落ちます。カードの中のスクリプトは実行しません。生の HTML に頼らないでください。
- 表は iPhone では横スクロールさせず折り返します(親のスクロールと競合するため)
- 引用(
>)は地の文より一段小さく組みます。条文の引用で画面が埋まっても、自分の言葉で書いた部分が埋もれないようにするためです
検査(lint)
vault を機械で検査できます(lint)。エラーが1件でもあれば終了コード 1、警告と情報では落ちません。「AI が書く → 検査が落ちる → AI が直す」の輪を、アプリを開かずに回すための道具です。
| 規則 | 段階 | いつ当たるか |
|---|---|---|
unterminated-frontmatter | エラー | 最初の --- に閉じが無い |
missing-id | エラー | id が無い |
invalid-id | エラー | id の形が違う |
duplicate-id | エラー | 2つのファイルが同じ id |
missing-deck | エラー | deck が無い(ディレクトリで代用している) |
empty-back | エラー | 裏に中身のある行が無い |
broken-ref | エラー | 裏の [[id]] がどのカードにも解決しない |
long-back | 警告 | 裏が空行を除いて12行超=小論文であってカードではない |
many-refs | 警告 | 裏の参照が2本超 |
front-not-a-question | 警告 | 表が20文字以内の1行で句読点も無い=問いではなく題目 |
missing-title | 警告 | # タイトル が無い |
note-without-source | 情報 | 補足に出典らしきもの(出典・Source・URL など)が無い |
閾値は書式の一部です。当たったカードは、id を変えるのではなく、履歴が付く前に問いを割るか、共有部分を ask: false のカードへ移して直します。
既に長いカードを大量に抱えている vault のために、
long-backは抑止リストを置けます。リストに載っているものは警告のまま、載っていないカードで当たったらエラーになります(新しく書かれた長いカードだけを止める)。リストは減る方向にしか動かしません。
v1 の形(旧式・読み取り専用)
v2 より前の vault のために、見出しベースの v1 も読めます。新しく書かないでください。
## 基-02 標準偏差の読み方
<!-- id: 01KB6M2QX40000000000000002 -->
**表面:**
平均が同じ2つのデータについて、どちらがばらついているかを数ひとつで言いたい。
**裏面:**
各値と平均の差を2乗して平均し、その平方根を取る。
📌 **定義**: [標準偏差](../用語定義/定-標準偏差.md)
💡 大小は単位に引きずられる。
**補足:**
出典:統計学の入門書であればどれでも。
| v1 | |
|---|---|
| 置き場 | 科目/デッキ/カード.md のちょうど3階層。それ以外の深さでは読みません |
| 1ファイルの枚数 | 複数枚(## 見出しごとに1枚) |
| 不変 ID | 見出しの直下の <!-- id: ULID -->。無ければ見出しキーで引きます |
| 見出しの区切り | (全角空白) / : / : の3つ。半角スペースは区切りではありません |
| 面ラベル | **表面:** **裏面:** **補足:**。英語なら **Front:** **Back:** **Note:**(コロンは全角・半角どちらでも) |
| ヒント | 行頭 💡 |
| ルーブリック | 行頭 🎯 のあと、キーワードを 、 か , で区切って並べる(復習する)。v1 だけの機能です |
| 参照 | 📌 **<ラベル>**: [表示名](相対パス.md)。ラベルは任意の語で、展開したときの 【…】 見出しにそのまま使われます |
| 裏の終わり | **補足:** / **表面:** / 💡 / 🎯 / --- のいずれか |
英語の面ラベルは行がラベルだけのときしか受け付けません。**Note:** the index is separate. のような英語の注記はありふれた書き方で、併記を許すと本文が面ラベルとして食われ、めくる前に答えが表に漏れるためです。日本語のラベルは散文に出てこないので、同じ行に本文を続けられます。
面ラベルはそのカードで使われている形をそのまま残してください。別の形に言い換えると出題できなくなります(日本語の vault を英語ラベルに訳し直さない。逆も同じ)。