Ankiで暗記ペンを実現する方法Ⅰ 基本仕様編 | 学習メモ。

学習メモ。

長男(開成中高→東大理1[2016現役・専願]→東大大学院情報理工学系研究科→大手外資系IT企業)、長女(桜蔭中高→東大文1[2020現役・専願・TLP仏語]→東大大学院人文社会系研究科)の生活,中学・大学受験。暗記はAnkiが9割。リスニングは英語アニメ日英同時字幕視聴が10割。

Ankiで暗記ペンを実現する方法【目次】

Ⅰ 基本仕様編

  1.はじめに

  2.暗記ペン形式の動作

  3.暗記ペン形式の実装方法

    (1) フィールドへのタグ付け

    (2) スタイル(CSS)の設定

    (3) JavaScriptの設定

  4.サンプルデッキのダウンロード

  5.モバイル版アプリでのタップ動作の設定

    (1) AnkiMobile (iOS)の場合

    (2) AnkiDroid (Android) の場合

  6.おわりに

 Ⅱ 拡張仕様編

 

1.はじめに

  当ブログではかねてから,暗記学習に効果的なツールとして,分散学習システム Ankiの使用を推奨している。
  Ankiは設計の自由度が高いため,既存の様々な出題形式に対応できる。
  さしあたりはAnkiが用意しているフォーマットにしたがい一問一答形式、そのバリエーションとしての○×単純正誤問題形式,記述形式,空欄補充形式,多肢選択形式での利用が一般的だろう。

  この記事では,Ankiの活用場面を広げるために,Ankiで暗記ペン形式を実現する方法を提案する。

 

■暗記ペン形式とは
  前提として,暗記ペン形式とはどういうものかをみておこう。一般名称は確定していない。「チェックペン」「チェックシート」「暗記シート」「暗記マーカー」といった呼称がある。最も代表的な「チェックペン」の販売元ZEBRAのサイトから引用する。

「覚えたい部分にのペンでマークし,のシートをかぶせると,マークした部分が隠れるので繰り返して覚えられます。」
「覚えたい部分にのペンでマークし,のシートをかぶせると,マークした部分が隠れるので繰り返して覚えられます。」

  このほか,“覚えたい部分をのペン(または色鉛筆)で書き,のシートをかぶせると,で書いた部分が隠れるので繰り返して覚えられる”という使い方も一般的である。赤シート付きの印刷教材のほとんどはこの方式である。

  いずれにせよ,マークの色や隠す道具の形状は本質的には重要でない。要するに,ひとまとまりの文章の中に複数存在する覚えたい部分について個別に表示/非表示の切り替えを繰り返し,記憶を強化するというメカニズムこそが重要である。

■複数空欄補充方式の弱点
  従来,Ankiでは,ひとまとまりの文章の中に覚えたい部分が複数ある場合には,次のいずれかの対応をするほかなかった。

  1. 覚えたい部分ごとに,内容を分割して別の問題とし,1問1答形式または空欄補充形式とする(分割方式)。
  2. ひとまとまりの文章をそのまま1つの問題とし,その中の覚えたい複数の部分をすべて空欄にし,空欄補充の正誤確認は,裏面で一括して行う(複数空欄補充方式)。
  3. ひとまとまりの文章の中の覚えたい複数の部分を一つずつ空欄にした別の問題にし(ひとまとまりの文章自体はどの問題にも掲載される)、空欄補充の正誤確認は,問題ごとに行う(空欄箇所を変えて複数問題化方式)。

  覚えたい部分ごとに個別にAnkiシステムでスケジュール管理できる点では1.分割方式が好ましい(「知識を定式化する20個のルール 4 最小情報原則を守るべし」参照)。しかし,1.のような分割が常に可能・容易であるとは限らない。たとえば,『DUO3.0』のような例文をまるごと覚えたい場合,例文を細かく分割して別問題とするのは,文脈の中で効果的に記憶するという教材の長所を殺すことになり現実的でない(そこで『DUO3.0』例文暗記目的にAnkiBlankというiOSアプリが開発され,一定の利用者もいたようだが,2016年3月をもってサービスを終了した。その「開発後記」をも参照)。
  一方で,2.複数空欄補充方式の場合,すべてのマーク部分についての正誤確認を「一括して」しか行えないのが弱点である。学習の初期には,覚えていない部分がほとんどなので,長い時間頭をひねっても無駄だからさっさと裏面に移らざるをえず,かといって裏面を表示させてしまえばすべての正解が見えてしまうので,部分ごとに想起する訓練にとって障害になる。

 かといって、3.空欄箇所を変えて複数化問題化方式も、スマートではない。たしかに空欄ごとにスケジュール管理でき、個別に正誤確認できるというメリットは維持できるが、その反面で、ひとまとまりの長い文章が複数の問題に何度も登場するのが、うんざりする。

 

■暗記ペン形式の優位性

  これらの弱点を解消するのが、暗記ペン形式である。紙の上での暗記ペン、すなわち、問題文中の覚えたい部分について個別に正解の表示/非表示を切り換えて部分ごとに想起する訓練をしながら,一応すべてを想起できるようになってから解答面に進む…を繰り返す学習法をAnkiで実現することができる出題形式である。文脈の中で覚えるべき素材をAnkiデッキ化するのに最適な形式である(後述「大学受験倶楽部 ザ・ドリル」の思い出」参照)。

  この暗記ペン形式を実装したAnkiデッキは、Windows・Mac・AnkiWeb(Safari/Chrome/Firefox/IE 10以降)・AnkiMobile (iOS)・AnkiDroid (Android)での正常動作を確認している。

【Anki標準の「画像穴埋め問題」ノートタイプとの違い】   「画像穴埋め問題」は,図版に対して暗記ペンを適用するノートタイプである。
  これに対し,この記事で提案する暗記ペン形式は,文章中の文字列に対して適用するものである。
 また「画像穴埋め問題」は複数の穴埋め箇所に対して一括してしか表示/非表示切り換えができないのに対し,本記事の暗記ペン方式は個別の表示/非表示切り換えが可能である。
【Anki標準の「穴埋め」ノートタイプとの違い】   Ankiには、空欄補充形式の問題を容易に作成するための特別のノートタイプ(穴埋め(Cloze))が用意されている(外部記事「Ankiにおける空欄補充問題の作り方」参照)。このノートタイプは、Anki上で空欄を設定する作業をしやすくしたり(ボタン操作で穴埋め箇所を設定できる)、複数指定した空欄ごとに問題を複製する作業を自動化したりする点に特徴がある。しかし、空欄部分の個別の表示/非表示切り換えを可能とするものではなく、本文で述べた複数空欄補充方式の弱点を依然として抱えている。
【類似機能を持つadd-onの登場】  当記事の初出は2016年だが、2021年頃から当記事の暗記ペン方式と類似機能をもつadd-onが登場している(Enhanced Cloze)。add-on形式なので、そちらのほうが一般人に使いやすいかもしれない。説明をみるかぎり、付加機能がいろいろ充実していそうである。ただし、開発者は日本人ではないので、ルビ対応などができているのか不明である。指定のノートタイプを使う必要がある。そうした制限のない当記事の暗記ペン方式のほうが自由度は高いはずである。
【「大学受験倶楽部 ザ・ドリル」の思い出】   文脈の中で覚えるべき素材をAnkiに対応させるのに最適なのが暗記ペン形式である。私がそう確信するのには理由がある。
  2012年6月〜2015年5月、NTTラーニングシステムズが、人気問題集をドリル化して「大学受験倶楽部 ザ・ドリル」というサービスを有償で提供していた(開始当時のプレスリリース)。対応教材は当初は33教材、最終的には83教材(同じプラットフォームを利用する提携教材[ハイブリッドコード対応書籍、四谷学院のスマホ教材など]も含めればその倍以上である)。現在まで一度もアプリ化されたことのない多種多様な参考書がラインナップにあり貴重だった(ただし、Webベースでオンライン必須な点で使い勝手はいま一つだった)。ザ・ドリルでは、文脈の中で覚えるべき教材にはすべて暗記ペン形式を採用していたのである。大手企業が多数の問題集をドリル形式に落とし込むために最善を尽くした結果である。
  いまはなきザ・ドリルに敬意を表し、この記事で実装を提唱するマークの色   は、ザ・ドリル稼働時のHTMLカラーコードと完全に一致させている(ただし、シャドウは私の趣味で独自に追加している。影があったほうが付箋ぽくてクールだろう)。
参考〜2024年現在も稼働中のサンプル:きめる!地学基礎 要点チェック

 

2.暗記ペン形式の動作

  Ankiでの暗記ペン形式は、次のように動作する。
  複数空欄補充形式をベースとしつつ,表面の複数の覚えたい部分を[  ]のような空欄ではなく   のようなマーク表示にし,かつ,そこをクリックするとマークが解除され正解をその場で確認できる。個別に正解の表示/非表示を切り換えながら,全部を一応想起できるようになってから,裏面に進む。そこではすべての正解を一括して表示する

 

  こちらのリンクは、前述の英単語集『DUO3.0』を暗記ペン形式にした動作デモである。実際にマーク部分をクリックすることで動作を確認できる

  また、こちらのリンクは、公開用サンプルAnkiデッキ「日本国憲法」の表面の動作デモである。実際にマーク部分をクリックすることで動作を確認できる

  • 覚えたい部分が多数のマーク色で隠されている。マーク部分にカーソルを移動すると,カーソル形状が手に変わる。
  • マーク部分をクリックするとその場で正解が表示される。同じ部分をもう一度クリックすれば,また隠れる。何度でも繰り返せる。
  • 全部のマーク部分について想起してはマーク解除するという作業を繰り返し,一応は全部を想起できるようにしてから「解答を表示」ボタンをクリックして裏面に移ろう(上記は説明用デモなのでボタンはない)

  裏面では,すべての正解を表示する。全体的な覚え具合の実感をもとに,定着度を申告する。

裏面

 

3.暗記ペン形式の実装方法

  Ankiデッキに暗記ペン形式を実装するための作業は,おおまかには,以下の3段階で構成される。
(1)フィールドへのタグ付け
  覚えるためにマーク表示としたい文字列にclozeクラスのタグを付ける。同じ部分については裏面でも強調色のためのタグを付ける。
(2)スタイル(CSS)の設定
  作業としては後述の文字列(CSS)をテンプレートに貼り付けるだけである。その働きは次のとおりである。(1)のclozeクラスに対して,背景色をマーク色に設定し,文字色を透明に設定する。マーク表示状態なのに文字列を選択することによって文字が浮かび上がる事態を防ぐために文字列選択を制限する。マーク上ではカーソル形状が手になる(PCのみ)。マーク表示状態ではルビは非表示とする。裏面での正解文字列の強調色も設定する。
(3)JavaScriptの設定
  作業としては後述の文字列(JavaScript)をテンプレートに貼り付けるだけである。その働きは,マーク表示となっている覚えたい部分をクリックしたら,文字色を透明から本来の文字色にし,ルビを表示し,背景色を透明にする,逆に,背景色がすでに透明の場合は,背景色をマーク色に,文字色を透明にし,ルビを非表示にする,というものである。

  以下に具体的な設定内容を示す。

 

(1) フィールドへのタグ付け

ア.表面

 

  Ankiでのタグ付けは、フィールド内で直接行うことはできない。ノート編集画面の各フィールド右上の「< >」マークからHTMLエディタに切り替えて行う(もちろん、Excelなどでタブ区切りテキストを作成し、それをAnkiに読み込んでデッキ化する方法も可能である。その場合はExcelなどでタグ付け作業することになる)。

    ↓

  覚えるためにマーク表示としたい文字列(例では「国会における代表者」)を以下のようにタグ付けする。

…された<span class="cloze" onclick="cloze(this.id);">国会における代表者</span>を通じて行動し…

  ノート内にマークが複数あっても,そこに付するべきタグの内容はすべて同一である。ノート内にとどまらずデッキ内のすべてのマークについて同一である。

  したがって、AnkiのHTMLエディタでのタグ付け作業は、マーク部分前後に同じ文字列をペーストするだけの単純作業ですむ。

  また、ExcelなどでAnki読み込み用タブ区切りテキストを作成する場合は、「{{」「}}」などの単純な(しかしノートには登場しない)括弧記号でマーク部分の文字列をくくっておき,作業の最後に括弧記号からタグへ一括置換するのが楽である。さらに進めて、入力用のセルには「{{」「}}」などの括弧記号で入力し、Anki用タブ区切りテキスト出力用のセルでは計算式で括弧記号からタグに自動変換するのも便利だろう。


イ.裏面

  表面の暗記ペン動作には無関係だが,表面でマーク表示とされた部分は裏面では強調色表示されるのが洗練されている。そのようにするためには、裏面の正解表示用フィールドには以下のようにタグ付けする。次述の(2)スタイル(CSS)の設定もそれに合わせてある(「.hot」以下の部分)。

…された<span class="hot">国会における代表者</span>を通じて行動し…

 

(2) スタイル(CSS)の設定

  テンプレート編集画面の「スタイル」に以下の文字列を追加する。

/* 暗記ペン */
.cloze {

  color: transparent;
  background-color: #f68385; /* マーク色 */
  cursor: pointer;
  -webkit-user-select: none; /* Anki PC・Mac / AnkiMobile / AnkiDroid / Chrome / Safari */
  -moz-user-select: none; /* Firefox */
  -ms-user-select: none; /* IE 10+ */
  box-shadow: 0 3px 2px #777;
}
.cloze rt {
  visibility: hidden;
}

ruby {

  position: relative;

}

ruby rt {

  position: relative;

}

.hot {
  color: red; /* 裏面正解文字色 */
}

  /* マーク色 */の左の#f68385の部分は,好みで変更してよい(HTMLカラーコード参照)。ただし,(3)JavaScriptの設定のマーク色と一致させること。

 

▼スタイル

 

(3) JavaScriptの設定

  テンプレート編集画面の「表面のテンプレート」に以下の文字列を追加する(裏面にマークを設定する場合には「裏面のテンプレート」で同様にする)。

<script type="text/javascript">

if (window.addEventListener) {

  window.addEventListener('load', load);

} else if (window.attachEvent) {

  window.attachEvent('onload', load);

}

window.onload = load();

 

function load() {

  var tags = document.getElementsByTagName("span");

  var count = 0;

  for (var i = 0; i < tags.length; i++) {

    if (tags[i].className == "cloze")

    tags[i].id = "c" + (++count).toString();

  }

}

 

function cloze(id) {

  var e = document.getElementById(id);

  var rt = e.getElementsByTagName("rt");

  var num = rt.length;

  if (e.style.backgroundColor == "transparent") {

    e.style.backgroundColor = "#f68385"; // マーク色

    e.style.boxShadow = "0 3px 2px #777";

    e.style.color = "transparent";

    for (var count = 0; count < num; count++) {

      rt[count].style.visibility = "hidden";

    }

  } else {

    e.style.backgroundColor = "transparent";

    e.style.boxShadow = "0 0px 0px #777";

    e.style.color = "red"; // 正解文字色

    for (var count = 0; count < num; count++) {

      rt[count].style.visibility = "visible";

    }

  }

}

</script>

  「// マーク色」「// 正解文字色」の左のカラー指定(HTMLカラーコード参照)で,それぞれマーク色、マーク解除時の正解文字色を任意に設定できる。ただし、マーク色は、(2)スタイル(CSS)の設定で指定したマーク色と一致させること。

 

▼「表面のテンプレート」

 

4.サンプルデッキのダウンロード

  以上で解説した方法により,Ankiで暗記ペンを実現したサンプルデッキとして,「日本国憲法.apkg」を提供する。以下からダウンロードし,Ankiに読み込めば使用できる。
日本国憲法.apkgを
 今すぐダウンロード

  実際に,憲法の全文(「前文」ではない)を暗記ペンで学習できるように設定してあるので,単なるサンプルにはとどまらない。憲法暗記のための実用性をもたせてある。もちろん,学習目標により必要な条文は異なるので,各自の目標にとって不要な条文を削除するなり,必要な条文のみをフィルターデッキにするなりして使用するのがよいだろう。

  穴埋め部分は,実務法律研究会『分解穴うめ六法 憲法』実務教育出版(絶版)と全く同じに設定してある(だから,第11章 補則(第100条-第103条)には穴埋め部分の設定はない。ふつうは覚える必要ないし)。

 

 

【分解穴うめ六法 憲法】  同書は,条文を分節に分解し,分節同士の修飾・被修飾関係,等位関係を構造化して示している点で,理解しながらの暗記に適する非常に合理的な内容である。法文改正に追随できずにシリーズごと絶版になってしまったが,改正のない憲法まで道連れになったのは惜しいことである(同書も国会法部分が古くなっているが)。AKB48内山奈月のように本気で憲法全文を暗記したい場合は,同書をAmazonマーケットプレイスで入手して構造を意識しながら暗記し,その確認にこの記事のAnkiデッキ「日本国憲法」を使用するのがベストである(Ankiデッキでは条文の分解・構造化までは再現していない)。

 

5.モバイル版アプリでのタップ動作の設定

  暗記ペン形式を採用したAnkiデッキは、モバイル版アプリ、すなわち、AnkiMobile (iOS),AnkiDroid (Android)でも正常に動作する。

  ただし、マークを解除するためのタップのつもりが「答えを表示」するためのタップであるとアプリに誤認識されて、意図しないうちに解答面に進んでしまう場合がある。

  マークの上を正確にタップするかぎりはそうした誤認識は起きないが、小さい画面の中で少し指がズレただけでいちいち誤認識されては面倒である。

  そこで、おすすめなのは、アプリのタップ動作の設定を変更し、マークと競合しそうな場所のタップには機能を割り当てないようにすることである。以下、(1) AnkiMobile (iOS) 、(2) AnkiDroid (Android) について設定手順を示す。

 

(1) AnkiMobile (iOS) の場合

 

トップ画面右上の歯車をタップする。

  ↓

「復習」をタップする。

  ↓

「タップ」をタップする。

  ↓

「問題が表示されるとき」について、すべての「答えを表示」を「オフ」に変更する(裏面にもマークを設定するAnkiデッキであれば、「答えが表示されるとき」についても同様の設定をするとよい)。

  ↓

赤枠内のように変更すれば完了。

 

(2) AnkiDroid (Android) の場合

 

  AnkiDroidは、デフォルトの状態でジェスチャーがオフに設定されているので、とくに設定変更していないかぎりは、設定をいじる必要はない。ジェスチャーをオンにしながらマーク部分と競合するタップ動作だけを無効にしたい場合には、以下の手順のとおりにする。

 

トップ画面左上のメニューをタップする。

  ↓

「設定」をタップする。

  ↓

「ジェスチャー」をタップする。

  ↓

「ジェスチャーを有効にする」にチェックが入っていない状態(下図)ならばそのままでよい。あえてジェスチャーを有効にして使用したい場合にかぎり次以降の設定に進む。

  ↓

「ジェスチャーを有効にする」にチェックを入れる。

  ↓

デフォルトでは赤枠内の各項目は次のようになっている。

  ↓

赤枠内の各項目を次のように変更すれば完了。

 

6.おわりに

  以上、暗記ペン形式の基本仕様を紹介した。ほとんどの場合に、このⅠ基本仕様編だけで十分に目的を果たせるはずである。

  次回のⅡ拡張仕様編では、さらに、(1)問題文中に選択肢を埋め込んだ選択問題への対応を実現し(選択式暗記ペン)、(2)正解の文字数とは無関係にマークの幅を決められるようにする(文字列追加文字列削除)。また(3)マーク上に文字(選択肢やマーク番号など自在)を表示できるようになる(合わせ技)。必要に応じて参照してほしい。

 

更新履歴


2016年1月4日

  • 初出。
  • 「カメレオン方式」。文字色と背景色(マーク色)を一致させることにより文字を見えなくするという手法。JavaScriptでは背景色のみを切り換える。文字のみの表示時に視認性のよいマーク色しか選べないという難点がある。

2016年2月15日

  • ルビに対応。マーク表示時にはルビ非表示とし,マーク解除時にはルビを表示する(従来はマーク内にルビがあると,マークから飛び出してルビが表示されてしまい,カンニング状態だった)。
  • 「透明人間方式」。文字色を透明に設定することにより文字を見えなくする。JavaScriptでは,文字色と背景色を切り換える。マーク色も文字色も自由な色を選べるのが利点である。

2016年2月20日

  • サンプルのマーク色を落ち着いた色にし,マーク色にシャドウをかけて浮かび上がらせ,マーカーというより,附箋風にした。

2016年5月1日

  • モバイル版アプリのタップ動作の設定変更について説明(AnkiMobile (iOS) 用)を追加。

2016年5月9日

  • モバイル版アプリのタップ動作の設定変更について説明(AnkiDroid (Android) 用)を追加。

2016年5月14日

2016年5月15日

  • clozeクラスのタグに事前にIDを付与する方式を正式版とし、ID付与をJavaScriptで自動的に付与する方式を簡略版と位置付け、叙述を再構成した。

2016年5月18日

  • window.onloadに加え、あらたにwindow.addEventListenerを併用することで、AnkiDroidでもJavaScriptによるロード時のID付与が可能となり、事前のタグ付けの際にIDを付与する必要が全面的になくなった。
  • 正式版と簡略版の区別をなくし、方式を一本化した。

2024年4月19日

  • Ankiの最新版の表示・用語に合わせて説明を調整。
  • 「画像穴埋め問題」ノートタイプとの関係を補足。