本文へ移動

03 · カード

カードの書式

1ファイル1枚の Markdown。frontmatter の id と3つのマーカー、[[id]] の参照だけが構文です。

このページの中身

カードは vault(あなたのリポジトリ)の中の Markdown ファイルです。新しく書くカードはすべてこの v2 の形で書きます。古い v1 の形も読めますが、新規では使いません(v1 の形)。

書式の正本は公開リポジトリにありますanchor-card-formatSPEC.md・英語)。3つのアプリと検査ツールが従っている厳密な定義はそちらで、食い違いがあればそちらが正です。このページはそれを日本語で読める形にしたものです。

AI エージェントに書式を教えるときは、アプリ内の「使い方」から渡せるプロンプト(仕様書を読ませる指示が入っています)か、実例vault に置くテンプレを直接渡してください。

書式そのものへの提案・不具合は Issues で受け付けています。

1枚まるごとの例

---
id: stat-sd-reading
deck: 統計/基礎
tags: [記述統計]
---

# 標準偏差から何が読み取れるか

平均が同じ2つのデータについて、どちらがばらついているかを数ひとつで言いたい。

<!-- back -->

**定義** [[stat-sd-def]]

データと同じ単位なので「だいたい平均からこれくらい離れている」と読める。

<!-- hint -->

大小は単位に引きずられる。単位をまたいで比べるなら 標準偏差 ÷ 平均。

<!-- note -->

出典:統計学の入門書であればどれでも。

構文は frontmatter・# タイトル・3つのマーカー行・[[id]] の参照だけです。本文のそれ以外は、何を書いても構文になりません。

どのファイルがカードになるか

次のすべてを満たすファイルが v2 のカードとして読まれます(パスは vault からの相対)。

  1. ファイル名が .md で終わり、INDEX.md ではなく、_ で始まらない
  2. 1つ以上のディレクトリの中にある(vault 直下のファイルは決してカードになりません。README.mdCLAUDE.md の置き場だからです)
  3. パス上のどのディレクトリも _. で始まらない(_drafts/.github/ は読みません)
  4. ファイルの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]]。行のどこにあっても構いません
  • 展開するのは裏の中の参照だけです。ほかの面では書いたまま表示されます
  • 参照を含む裏の行は、こう描かれます
    1. その行から [[id]] を取り除き、空白を詰めたもの(残りが無ければ省く)。**定義** [[stat-sd-def]] なら **定義** がラベルとして残ります
    2. 続けて、参照の順に参照先の裏
    3. 解決できない 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 を英語ラベルに訳し直さない。逆も同じ)。

このページは Anchor Cards の公開版の仕様書です。アプリの挙動と食い違いを見つけたらお問い合わせからお知らせください。