複数の英語Ankiフラッシュカードを作成した後、今回は国語の注音(ボポモフォ)フラッシュカードを生成します。使用するプラグインは以下の通りです:
- Copilot: ChatGPTを呼び出してカード形式と注音を生成
- Note Splitter: 指定された区切り文字に基づいて1つのノートを複数のノートに分割
- Yanki: 生成された複数のノートをAnkiシステムに同期
1. Copilotでノートを生成
- Extraフィールドは音声用です。
%BEGIN%と%END%の間の各行のテキストを、指定された11行の形式で生成します。形式の定義は以下の通りです:
1行目: 完全なテキスト。ただし、最初のダブルクォーテーションは「に、2番目のダブルクォーテーションは」に変換します(例:"釐"清 は 「釐」清 に変換)。
2行目: 空行
3行目: 3つのハイフン
4行目: 3つのハイフン
5行目: 空行
6行目: ダブルクォーテーションで囲まれた文字の注音を生成します。前後にダブルクォーテーションがない文字は注音を生成しませんが、元の文字は生成します(例:"清"楚 は ㄑㄧㄥ楚 を生成)。声調記号は省略不可です。
7行目: 空行
- 7~9行目は、その下がExtraフィールドの内容であることを示します。
8行目: 3つのハイフン
9行目: 空行
10行目: 完全なテキスト。ただし、すべてのダブルクォーテーションを削除します。
11行目: 3つのシャープ記号(#)
%BEGIN%
"釐"清
傳"誦"
"謀"財害命
浪"費"
"遲"到
"逛"
%END%
生成結果:
「釐」清
---
---
ㄌㄧˊ清
---
釐清
###
「傳」誦
---
---
ㄔㄨㄢˋ誦
---
傳誦
###
「謀」財害命
---
---
ㄇㄡˊ財害命
---
謀財害命
###
「浪」費
---
---
ㄌㄤˋ費
---
浪費
###
「遲」到
---
---
ㄔˊ到
---
遲到
###
「逛」
---
---
ㄍㄨㄤˋ
---
逛
###
2. Note Splitterでファイルを分割
- Note Splitterの区切り文字(Delimiter)を
###に設定します。 - <span class='keybs'> Ctrl/Cmd+P</span>を押して<mark style="background-color:#a3be8c">Split by delimiter</mark>コマンドを実行します。
- /note-splitterフォルダ内のファイルをYankiのスキャンフォルダの対応する場所に移動します。
3. YankiでAnkiシステムに同期
- <span class='keybs'> Ctrl/Cmd+P</span>を押して<mark style="background-color:#81a1c1">Sync flashcard notes to Anki</mark>コマンドを実行します。
4. Ankiシステムのノートタイプを調整
Ankiシステム内で操作:
- ノートタイプを管理 → Yanki - Basic (and reversed card with extra) を見つける → 右側の【カード】をクリック
- 表面テンプレートにはTTSの音声再生ボタンがありますが、JavaScriptを使用して非表示にします。
- Ankiシステムのテンプレートはウェブページと見なすことができ、{{Front}}フィールドはPHP (
<?= ?>)、ASP (<%= %>)、またはJSP (<%= %>) の式タグ(Expression Tag)のようなものです。
- Ankiシステムのテンプレートはウェブページと見なすことができ、{{Front}}フィールドはPHP (
- システムフィールド「{{Deck}}」を使用してデッキ名が「Chinese」で始まるかどうかを判断し、もしそうならTTSボタンを非表示にします。
▼ 表面テンプレート
{{Front}}
<br>
{{#Extra}}
<div id="EXTRA">
{{tts en_US voices=Microsoft_Mark:Extra}}
</div>
{{/Extra}}
{{^Extra}}
<div id="FRONT">
{{tts en_US voices=Microsoft_Mark:Front}}
</div>
{{/Extra}}
<script>
var sDeck = "{{Deck}}";
if (sDeck.indexOf("Chinese") >= 0) {
elem = document.getElementById("FRONT");
if (elem) {
elem.style.display = "none";
}
elem = document.getElementById("EXTRA");
if (elem) {
elem.style.display = "none";
}
}
</script>
裏面で中国語音声を再生するには?
AnkiシステムのTTSフィールドは静的に解析されるため、{{tts}}が存在するとJavaScriptで無効にできません。もし{{tts}}があると、不要な英語の裏面でも音声が再生されてしまうため、裏面テンプレートで{{tts}}を使用することはできません。
5. テンプレートで直接音声ファイルを使用
中国語フラッシュカードの裏面での音声再生は、最終的にAwesomeTTSを使用して静的な音声ファイルを生成することで対応します。
- 処理したいフラッシュカードのデッキを参照して見つけます。
- すべてのカードを選択 → メニュー AwesomeTTS → 【Add Audio to Selected...】
- Microsoft Speech API JScript または Google Translate を使用し、右側の Source Field で音声再生したい Extra フィールドを選択し、音声を Back パネルに挿入します。
- Generate を押して mp3 ファイルを生成します。mp3 ファイルは
C:\Users\ユーザーアカウント\AppData\Roaming\Anki2\プロファイル名\collection.media内に生成されます。

6. 💡 関連リンク
💡 解説記事: https://jdev.tw/blog/8494/
✅Copilot: https://github.com/logancyang/obsidian-copilot
✅Note Splitter plugin: https://github.com/decaf-dev/obsidian-note-splitter
✅Yanki plugin: https://github.com/kitschpatrol/yanki-obsidian
✅ テンプレート例: https://gist.github.com/emisjerry/eaada7ec56f8ceba24f74490049e645f