anki について
Anki Flashcard Managementは、`anki.sh`スクリプトとAnkiConnectを使ってAnkiカードを作成、管理するスキルです。カード形式の指針を含み、追加や重要な変更の前にユーザーの承認を求めます。
主な機能
- 01AnkiConnect経由のカード作成と管理
- 02基本カードと穴埋めカードの指針
- 03Markdown、数式、コードの書式規則
- 04カード追加や変更前の承認確認
活用シーン
- 01一問一答形式のカード作成
- 02ヒントや数式を含む穴埋めカードの作成
- 03追加前のカード案の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ terkelg/ anki-markdown --skill ankiインストール後、Claude Code で/ankiを入力して読み込まれたか確認します。
同梱ファイルscripts/anki.sh
詳細
Anki フラッシュカード管理
anki.sh スクリプトを使用して、AnkiConnect 経由でフラッシュカードを作成、管理します。
ANKI="$(dirname "$SKILL_PATH")/scripts/anki.sh"
事前確認:
- Anki デスクトップが起動しており、AnkiConnect が有効になっていることを確認します
curlとjqが PATH で利用可能であることを確認します
重要:ユーザーの承認が必要です
ユーザーの明示的な承認なしに、Anki にカードを追加してはいけません。
カードを追加する前に:
- 提案するカードをすべて(表面+裏面)完全な形で表示します
- ユーザーに確認します:「これらのカードを追加してよろしいですか?」
- 明示的な「はい」/承認を得てから実行します
これは必ず守ってください。ユーザーがカードを追加する前に品質を確認する必要があります。
破壊的または取り消せない可能性のある操作について:
delete:ノートを削除する前に、明示的な確認を求めますupdate:ノートを更新する前に、対象のフィールド/IDを正確に確認しますrate:カードと提案する評価を表示し、送信前にユーザーの確認を待ちます
ガイドライン
- 基本カードには
Anki Markdownノートタイプ、穴埋め問題にはAnki Markdown Clozeを必ず使用します - 表面と裏面の両方のフィールドに Markdown を使用します
- 1 枚のカードで検証する事実や概念は 1 つだけにします
- 質問は要素ごとに分け、シンプルにします
- 質問と回答は短く、明確で、曖昧さのないものにします
- 各カードの回答は、固有で具体的なものを 1 つだけにします
- 長いリストや複数の項目を 1 枚のカードにまとめないようにします
- 将来の自分が理解できるよう、背景情報やヒントを加えます
- 役立つ場合は、例や記憶術を使って自分に関連付けます
- 重要な概念には、シンプルなカードを複数作成できます
- 重要な質問は、異なる視点から複数のバリエーションを作成します
- カードが「孤立した」事実にならないよう、自分の目標やプロジェクトと結び付けます
- コードには常にシンタックスハイライトを使用します(「コードスニペット」セクションを参照)
- 関連するカードを複数作成するときは、効率化のため一括操作を使用します
カードタイプの選択
特定の質問を書く一問一答形式には、Anki Markdown(表面/裏面)を使用します。 質問を書くよりも文の一部を隠すほうが自然な穴埋めカードには、Anki Markdown Cloze(テキスト/補足)を使用します。
数式
Anki 標準の区切り文字を使用します。インライン数式には \(x^2\)、ディスプレイ数式には \[x^2\] を使用します。レビュー画面では Anki 組み込みの MathJax が使用されます。外部スクリプトやフォントは追加しないでください。ドル記号による区切り文字はサポートされていません。TeX の記述例を文字列として示す場合は、コード書式を使用します。
穴埋めは数式を含めることができ({{c1::\(x^2\)}})、数式の中に入れることもできます(\(x + {{c1::y}}\))。数式の中では、隠された穴埋めは [...] または角括弧付きの TeX ヒントとして表示されます。表示された内容には穴埋めのスタイルは適用されず、::blur は [...] を使用します。数式全体をぼかすには、数式の区切り文字の外側に穴埋めを置きます:{{c1::\(x^2\)::blur}}。
内容が隠されても、残りの TeX が有効な状態になるようにします。\begin{aligned} の後に穴埋めを置く場合は、ヒントがオプション引数として解釈されないよう {} を追加します。
隣接する TeX の閉じ波括弧の間にはスペースを入れ、本文が } で終わる場合は、穴埋めの閉じ }} の前にもスペースを入れます。例:\(x + {{c1::\frac{1}{\sqrt{2} } }}\)。これにより、Anki が穴埋めの境界を明確に認識できます。TeX はスペースを無視します。
穴埋めカード
穴埋めカードには Anki Markdown Cloze を使用します。フィールドは Text と Extra です。
構文
形式は 3 つあります:
{{c1::answer}}- 表面に [...] を表示します{{c1::answer::hint}}- 表面に [hint] を表示します{{c1::answer::blur}}- 表面にぼかした内容を表示します(形状は分かりますが、テキストは表示されません)
穴埋めの中では、太字、斜体、ハイライト、言語タグ付きインラインコード、リンク、画像、コードブロック、表など、Markdown をすべて使用できます。
複数のカード
穴埋め番号(c1、c2、c3 など)ごとに、個別のカードが生成されます。同じノート内の異なる事実を検証するには、異なる番号を使用します:
{"Text": "{{c1::HTML}} provides structure, {{c2::CSS}} provides style."}
これにより 2 枚のカードが生成されます。カード 1 では「HTML」が隠され、カード 2 では「CSS」が隠されます。
同じ番号を複数回使用すると、同じカード上ですべての該当箇所が隠されます:
{"Text": "{{c1::React}} and {{c1::Vue}} are frontend frameworks."}
これにより、「React」と「Vue」の両方が隠されたカードが 1 枚生成されます。
共有削除
カンマ区切りの穴埋め番号は、Anki desktop 26.05 以降でのみ使用してください。同じテキストを複数のカードで隠せます:
{ "Text": "The {{c1::CPU}} and {{c2::GPU}} both execute {{c1,2::instructions}}." }
このノートからは2枚のカードが生成されます。カード1では「CPU」と「instructions」が隠されます。カード2では「GPU」と「instructions」が隠されます。
ネストされた穴埋め
穴埋め削除はネストできます。外側の穴埋めでは、内側を含むすべてが隠されます:
{"Text": "{{c1::Canberra was {{c2::founded}}}} in 1913."}
カード1では「Canberra was founded」が隠されます。カード2では「founded」のみが隠されます。
穴埋め内のインラインコード
言語タグ付きのインラインコードは穴埋め内で使用できます。コードで {lang} 構文を使う場合は、閉じ波括弧が3つ(}}})になる点に注意してください:
{"Text": "Use {{c1::`querySelector()`{js}}} to find DOM elements."}
追加フィールド
Extra フィールドはすべてのカードの裏面に表示されます。文脈、例、参考情報などに使用してください。コードブロックやコールアウトを含む完全な Markdown に対応しています。
穴埋めの例
# Basic cloze
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"The {{c1::CPU}} executes {{c2::instructions}}.","Extra":"Basic computer architecture."}' --tags "cs"
# Cloze with hint
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"{{c1::JavaScript::language}} was created in {{c2::1995::year}}.","Extra":"Created by Brendan Eich."}' --tags "history"
# Cloze with blur
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"The speed of light is {{c1::299,792,458 m/s::blur}}.","Extra":"Often approximated as 3 x 10^8 m/s."}' --tags "physics"
表面フィールドの形式
質問の対象となる重要な用語を強調するため、表面では Markdown を使用してください:
- 問われている主な概念には、太字または
==ハイライト==を使用します - 技術用語、関数、構文にはインラインコードを使用します
例:WGSL で **vertex_index** が返す値は何ですか?
裏面フィールドの形式
裏面フィールドには次の形式を使用してください:
- 答えを端的に示す太字の一文
- 空行
- 通常のテキストで追加の文脈を記述(任意)
すばやく目を通すための書式
==ハイライト==を使って、重要な用語がひと目でわかるようにします- 説明内の重要な概念には太字を使用します
- インラインコードを含むすべてのコードブロックで、シンタックスハイライトを使用します
- 素早く視覚的に確認できるように整え、読者が要点をすぐにつかめるようにします
キーボードショートカット
キーボードのキーには <kbd> タグを使用してください:
Press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> to open the command palette.
コードスニペット
常にシンタックスハイライトを使用してください:
- フェンス付きブロック:言語を指定した3つのバッククォートを使用します(
js、python、```rust など) - インラインコード:
`code`{lang}形式を使用します(例:`const x = 1`{js})
高度な機能:
- 行のハイライト:```js {2} で2行目をハイライトします
- 単語のハイライト:```js /pattern/ で特定の単語をハイライトします
- フォーカスモード:
// [!code focus]コメントを追加して、特定の行に焦点を当てます
コールアウト
重要な注記には、GitHub 形式のアラートを必要に応じて使用してください:
> [!TIP]
> Brief helpful insight here.
> [!NOTE]
> Useful context the learner should know.
> [!WARNING]
> Common mistake or gotcha to avoid.
例
Front: What does `passEncoder.draw(3)`{js} do with **no vertex buffer**?
Back:
**Invokes the ==vertex shader== 3 times.**
The shader uses `@builtin(vertex_index)`{wgsl} to generate positions ==procedurally==.
> [!TIP]
> Useful for fullscreen quads without geometry data.
一般的な操作
$ANKI <action> [args...] で実行します。
| アクション | 説明 | 例 |
|---|---|---|
sync | AnkiWeb 同期を開始する | $ANKI sync |
decks | デッキを一覧表示する | $ANKI decks --stats |
models | ノートタイプを一覧表示する | $ANKI models |
fields | モデルのフィールドを表示する | $ANKI fields "Anki Markdown" |
find | ノートを検索する | $ANKI find "deck:Spanish tag:verb" |
info | ノートの詳細を表示する | $ANKI info 1234 5678 |
add | ノートを 1 件追加する | $ANKI add "My Deck" "Anki Markdown" '{"Front":"Q","Back":"A"}' --tags "t1 t2" |
add-bulk | ノートを複数追加する | $ANKI add-bulk "My Deck" "Anki Markdown" '[{"Front":"Q1","Back":"A1"}]' |
update | フィールドを更新する | $ANKI update 1234 '{"Front":"New Q"}' |
delete | ノートを削除する | $ANKI delete 1234 5678 |
due | 学習期限のカードを取得する | $ANKI due "My Deck" --limit 5 |
review | カードを表示する | $ANKI review 1234 |
rate | カードを評価する(1~4) | $ANKI rate 1234 3 |
tags | タグを一覧表示する | $ANKI tags --pattern "verb" |
一般的なワークフロー
$ANKI sync # sync first
$ANKI decks # check available decks
$ANKI models # verify required model exists
$ANKI fields "Anki Markdown" # verify field names for selected model
$ANKI find "deck:MyDeck front:test" # check for duplicates
$ANKI add "MyDeck" "Anki Markdown" '{"Front":"...","Back":"..."}'
$ANKI sync # sync after changes