冬休みを前に、最強のフラッシュカードを手にしよう

これは、.emacs Advent Calendarの 20 日目の記事です。

さて、org-mode の contrib パッケージには、org-drill という暗記支援の拡張機能が収録されています。

これは一般的にはフラッシュカードや単語帳と呼ばれる類のもので、SRS (Spaced Repetition System)*1 をベースに、クイズの反復練習間隔を賢く管理してくれます。

同種のツールは他にも様々なプラットフォーム向けに存在していますが、org-drill には次の利点があります。

  • フラッシュカードの内容にあまり制約がない
  • 最強のフラッシュカード編集環境
  • フラッシュカードと通常のメモが共存できる
  • カスタマイズし放題

org-mode のツリー形式に変換するだけで既存の単語帳データをそのままインポートできる他、メモの中で気になる部分だけクイズ形式で書いておいて後からまとめて復習する、といったことも可能です。

逆に、次のような欠点もあります。

  • ちょっとした待ち時間に携帯端末でクイズを実行、は難しい
  • 結果の自己評価がすこし面倒 (ツールによっては選択肢を提示し、解答結果を元に自動評価してくれるものもあります)

最初の問題は android であれば emacs アプリを使って頑張れるかも知れませんが、あまり現実的ではなさそうです。

ともあれ、普段 org-mode をメモの道具として使っていれば、導入はとても簡単なので、気軽に試してみてください。

インストール

Debian パッケージの org-mode を使っている場合は、ファイル自体は含まれていますので、contrib への load-path を追加で指定してください。
emacs の packages を使っている場合*2は、org-mode.org が配布しているバージョンが必要*3ですので、リポジトリに追加した上で、org-plus-contrib パッケージをインストールします。
他の方法を使っている場合は、どうとでもできるでしょうから、どうとでもしてください。

次回起動時から有効になるように、.emacs への追記もお忘れなく。

; Debian パッケージを使っている場合
;(setq load-path (cons "/usr/share/org-mode/lisp" load-path))

(require 'org-drill)

単語帳の作成

org-drill では、当然ですが org-mode でカードを書きます。サンプルとして単語帳ファイルも付属しているのですが、題材がスペイン語 (spanish.org) なので、日本人的には扱いにくいように思えます。
ですので、まずは簡単に英語の単語帳を作ってみることにしましょう。新しく org ファイルを作成 (e.g. english.org) してみてください。

org-drill には、デフォルトでカードの形式がいくつか用意されています。そのうちいくつかの例を紹介しますので参考にしてください。その他の形式の詳細や、カード形式のユーザ定義などについてはマニュアルをどうぞ。

おおまかな前提として、org-drill は :drill: タグをヘッダにつけたエントリを問題カードとみなします。子ヘッダはカード形式によって使われたり使われなかったりします。

シンプル

問題があって、解答を下敷で隠して考える、というイメージのカード形式です。

適当なヘッダに :drill: タグをつけましょう。
ヘッダの深さは関係なく、:drill: タグのあるエントリが一組のカードと見做されます。また、ヘッダの内容自体は無視されるので、自由に使うことができます。

ヘッダ直下のエリアに、問題となる内容を記述します。ここに書いた内容は、クイズセッション中にそのまま表示されます。

* Quiz                                                                :drill:

tuberculosis

続けて、ヘッダを一段下げて、解答となる内容を記述します。ここに書いた内容は、クイズセッション中、問題が表示されている時に何かキーを押すと表示されます。

* Quiz                                                                :drill:

tuberculosis

* Answer
肺結核
穴埋め問題

マーキングした単語に、半透明の赤いフィルムをかぶせて、問題文の一部をマスクするイメージのカード形式です。

この形式では、子ヘッダは不要です。問題文中でマスクしたい部分をブラケットで囲んでおけば、問題ではその部分がマスクされ、何かキーを押すとその部分が表示されます。

* Quiz                                                                :drill:
He died of [tuberculosis].

彼は肺結核で死んだ。
両面カード

小さいカードの表と裏にそれぞれ対応する内容が書かれているイメージのカード形式です。一方通行ではなく、どちらの内容も問題として使われますが、残念ながらどちらが使われるかはセッション毎にランダムになります。

この形式では、カードの表と裏をそれぞれ子ヘッダとして書きます。正確には、子ヘッダのうち最初の 2 つがカードとして扱われます。カード形式を明示するため、親ヘッダにはプロパティの追記が必要です。

* Quiz                                                                :drill:
:PROPERTIES:
:ORG_DRILL_CARD_TYPE: twosided
:END:

** English
tuberculosis

** 日本語
肺結核

クイズの実行

単語帳ファイルができたら、M-x org-drill を実行してみてください。そのとき開いているバッファを単語帳として、クイズセッションが開始されます。

クイズセッションは、次の順序で進みます。

  1. 問題が表示されるので思い出そうとしてみる
  2. 何かキーを押して解答を見る
  3. 暗記レベルを自己評価してスコアをつける
  4. (オプション) 次回の復習タイミングをスケジュールする
  5. 終了条件を満たすまで繰り返す
  6. セッションのサマリを表示して終了

初めて実行したのであれば、最初のエントリが問題として表示されているはずです。

訳語を思い出したら、あるいは思い出せなくて諦めたら、何かキーを押せば解答が表示されます。
次の問題に進む前に、暗記状況の自己申告が求められますので、1 〜 5 のうち当てはまるものを押してください。場合によっては次回のスケジュールを聞かれたりしますが、こだわりがなければそのまま C-m (RET) すれば問題ありません。ここで思い出せなかったエントリは、思い出せるようになるまで何度も何度も問題として出現します。

これを繰り返していき、一定の条件 (デフォルトでは、30 件の暗記テストに成功するか、20 分が経過) を満たせば、クイズセッションは終了です。結果のサマリが表示されますので、そっと涙を拭くなどしましょう。

おおむね、こういうものは継続的に行うことで効果が増すものですが、常時目の前にある環境だと「いつでもできるわー」とズルズル後回しにしてしまいがちです。個人的には、セッションに入る特定の状況を決めてしまうことをオススメします。例えば、通勤/通学途中で PC を開く余裕があるならそこでとか、警備任務から帰投するまでの 20 分とか、あるいは帰宅後にダラダラ TL を眺めながら、など。日々繰り返していて、20 分程度までの待ちが発生する状況がうまく見つかるといいですね。

ちょっとした小ネタ

org-capture で単語帳を作る

次のような org-capture テンプレートを使って、簡単にカードエントリを追加していくことができます。リージョン選択していた部分を表側に自動で入力してくれるので、若干手間が省けるでしょう。ヘッダの名前やカードの種別は私が使っているそのままなので、適当に修正してください。

("v" "Vocabulary" entry
(file+headline "~/path/to/wordbook.org" "Vocabulary")
"* Quiz :drill:\n:PROPERTIES:\n:DRILL_CARD_TYPE: twosided\n:END:\n** 表\n%?%i\n** 裏\n** Context\n%l\n** 補足\n")

英語の単語帳として使うなら、expand-region や mark-word あたりを適当なキー (C-@ など) にバインドしておくとさらに便利に使えます。
w3m-el や org-mode で英語文書を眺めながら「あーこの単語わからん」と思ったら、C-@ C-M-r *4 でその単語が入力されたカード編集画面になるので、カードの裏に訳語を追記して C-c C-c、で備忘録を残しながらすぐに元作業に復帰することができます。

カードを作った時点で、入力された単語の位置にカーソルがいるので、そのままそこで C-x C-y *5 すれば辞書をひくことができます。


中断と再開

単語帳が育ってくると、あるいは一度に大量のエントリを投入したりすると、クイズセッションにかかる時間がバカにならなくなってきます。そういう場合は、無理せずにできるところまでやって中断しましょう。
クイズ表示中に q (quit) もしくは e (edit) を押せば、クイズセッションはその場で終了します。もう一度 M-x org-drill とやってしまうと、最初からになってしまいますが、かわりに M-x org-drill-resume を実行すれば、前回中断したところからセッションを再開することができます。

一夜漬け(おさらい)モード

問題の出現頻度は SRS によって管理されているのですが、もう覚えたハズのものも含めてランスルーしたくなる場合もあると思います。その時は、M-x org-drill-cram とすると、これまでの解答履歴データを無視して、全てのカードを復習することができます。

マルチメディア

emacs ですし org-mode ですので、普通に画像をはりつけることが可能です。org-player を併用すれば音声や動画へのリンクを集約することもできます。

深みにハマったら

org-drill は、適切なデフォルト設定をもっているので、あまり設定を意識せずにそのまま便利に使うことができます。ですが、当然というかやっぱりというか、やろうと思えばいくらでもカスタマイズすることができます。

  • 表示色
  • 単語帳ファイルの分割
  • SRS アルゴリズム (いくつかの種類から選択)
  • スケジューリング
  • 内部マーキング条件
  • etc.

このあたりに手を出して org-drill 自体をしゃぶりつくすのもいいでしょうし、単語帳を育てに育てて公開する (そのための機能も用意されています) のもまた楽しいかもしれません。

最後に

ざっと駆け足で、org-drill によるフラッシュカードの導入方法を紹介してきました。いかがでしたか?
用途は単語の暗記に限らないので、普段「あーなんか毎回これググってんなー」と思うようなことがあれば放りこんでみるのもいいでしょうし、読書しながら、付箋やマーキングのかわりに使用してもいいでしょう。

折しも冬休みが目前ですね。まとまった時間がとれる(で、あろう)この時期に、気分をかえて自然言語に手を出してみる*6のも面白いかもしれません。

Happy Anking!

*1:SRS の詳細はてきとーにググってください

*2:アップグレードができず、毎回 org を消して再インストールが必要なので要注意

*3:http://orgmode.org/elpa.html

*4:私は org-capture を C-M-r にバインドしています

*5:私が使っている lookup2 の場合

*6:機械の言語ではなく