6 ポイント 投稿者 GN⁺ 2025-12-15 | 1件のコメント | WhatsAppで共有
  • Hashcards は、ローカルファースト(local-first) 方式の 間隔反復学習(spaced repetition) アプリで、AnkiMochi に似ているが、データベースの代わりにMarkdownファイルを使用する
  • 各フラッシュカードはプレーンテキストで記述され、質問(Q)回答(A)クローズ削除(C) 形式をサポートし、FSRSアルゴリズムで復習スケジュールを管理する
  • カードデータは テキストハッシュ値で識別され、復習履歴は SQLite に保存され、Gitリポジトリ を通じてバージョン管理と共有が可能
  • 既存のAnkiの 複雑なインターフェース とMochiの 非効率なアルゴリズム の問題を解決するため、入力の摩擦を最小化し完全な所有権を目標に設計されている
  • Markdownベース、Git統合、FSRSスケジューラ の組み合わせにより、開発者と学習者が 透明で自動化された学習管理 を行える新しいアプローチを提供する

Hashcards の概要

  • Hashcards は ローカルで動作するオープンソースの間隔反復システム で、Anki や Mochi に似た学習体験を提供する
    • 復習スケジュールは FSRS(Free Spaced Repetition Scheduler) アルゴリズムで管理される
    • Webインターフェースは localhost:8000 で動作し、復習履歴は SQLiteデータベース に保存される
  • 中核的な差別化ポイントは データベースを使わず、各フラッシュカードを Markdownファイル として管理する構造にある
    • 例: Cards/Math.md, Cards/Chemistry.md などで構成
    • 各ファイルには複数のQ/Aまたはクローズ削除(C)カードが含まれる

テキストベースのカード構造

  • フラッシュカードはシンプルなテキスト形式で記述する
    • Q: 質問、A: 回答、C: クローズ削除の形式
    • 例:
      Q: What is the role of synaptic vesicles?
      A: They store neurotransmitters for release at the synaptic terminal.
      C: Speech is [produced] in [Broca's] area.
      
  • Markdown構文 をそのまま活用できるため、通常のノート作成に近い体験を提供する
  • 復習実行コマンドは $ hashcards drill <path> 形式で実行する

設計思想と利点

  • Hashcards の設計は 「摩擦のないカード作成」 を最優先の目標としている
    • カードの入力と編集が速く直感的であるほど、学習量は増える
    • 角括弧([]) の使用によりクローズ削除の入力を短縮できる(Shiftキー不要)
  • Gitリポジトリとの統合 により、次のような利点がある
    • バージョン管理、変更追跡、共同作業、公開共有が可能
    • 標準的なUnixツール やスクリプトを使ってカードの検索・修正が可能
    • CSVなどの構造化データ からカードを自動生成できる
  • カードは テキストハッシュ値で識別 されるため、内容ベースの安定した参照が可能

既存システム(Anki, Mochi)への評価

  • Anki
    • 長所: オープンソース、FSRS対応、豊富な統計、自動カード生成(note types)機能
    • 短所: 複雑で直感的でないインターフェースWYSIWYG入力の非効率性プラグイン依存
  • Mochi
    • 長所: すっきりしたUIMarkdownベースの入力ショートカットキー中心の操作
    • 短所: クローズ削除構文が冗長note typesの不在単純なアルゴリズム
    • 従来のアルゴリズムは 単純な倍率ベース(multiplier) 方式で、長期記憶の維持には非効率
    • 最近FSRSベータ対応が追加されたが、既存カードのスケジューリング問題は依然として残っている

Hashcards の実装とワークフロー

  • ユーザーは テキストエディタ で直接カードを作成・修正できる
    • 例: Q: What is the atomic number of carbon? / A: 6
    • 複数行カードや複雑な形式もMarkdown内で自然に表現できる
  • 知識の変化に応じたカード修正 が容易
    • 章ごとのMarkdownファイルで構成し、教材の構造と一致させられる
    • 関連概念を隣接カードとして配置し、修正時の探索効率を高められる
  • Gitベースの管理 により次の機能を活用できる
    • コミット、ブランチ、マージ、PRなど完全なバージョン管理
    • 公開リポジトリを通じた学習共有と共同作業が可能

テキストベースアプローチの相乗効果

  • エディタマクロ によるカード自動生成と探索が可能
  • Unixコマンド(wc, awk など) でカード統計や一括修正が可能
  • スクリプトとMakefile を使って、CSVなどの外部データからカードを自動生成できる
  • GitHubでの公開 により個人の学習過程を共有でき、学習文化の拡散に貢献する

結論

  • Hashcards は シンプルなテキストフォーマット高度なスケジューリングアルゴリズム(FSRS)Git統合 を組み合わせた新しい形の間隔反復システム
  • カード作成の摩擦を最小化 し、データの完全な所有権 を保証し、自動化と拡張性 を同時に提供する
  • 開発者と学習者の双方に 透明で制御可能な学習環境 を提供するツールとして提示されている

1件のコメント

 
GN⁺ 2025-12-15
Hacker Newsのコメント
  • spaced repetition の本当の力は、フラッシュカードアプリではなく 行動変容 にあると思う。
    例えば、妻が歯の問題で腹を立てた出来事をきっかけに、「感情的に共感し、十分に話を聞く」ことを習慣化するため、この状況を自分のSRSに入れた。
    この復習は30秒ほどで済むので、生涯繰り返しても合計15分もかからないはず。
    それ以来、同じ間違いを一度もしておらず、妻は私が完全に変わったと言っている。
    要するに、spaced repetitionを「学習ツール」ではなく 構造化された強化システム として見るということ。

    • この例は本当に興味深い。私は職業柄すぐに問題解決を試みるタイプなので、相手がただ不満を話したいだけのときにどう反応すべきか分からない。
      問題を解決せず、ただ共感だけすべきだなんて、自分の考え方とはまったく違う。
    • 私もこの例が気に入った。Kindleのハイライト をそのままSRSに入れているが、定期的な復習のおかげで引用文が自然と頭に刻み込まれる。
    • とても素晴らしいアプローチだ。どのアプリを使っているのか、inboxを空にする頻度 はどれくらいか、そしてその作業にどのくらい時間がかかるのか気になる。
    • 「妻が怒った」という部分を見ると、君だけが悪かったわけではないようにも思える。
      もし妻が先に共感なしで提案してきたら、君も腹が立っただろうか? そしてその時点でもう手遅れだっただろうか?
    • 本当に 刺激を与えてくれる事例 だ。愛する人をより深く理解するために、こうした努力をしているのは素晴らしい。
      SRSに記録するとき、具体的な出来事を書くのか、それとも一般化したパターンを書くのか気になる。カードの表裏構造や cloze 形式があるのかも知りたい。
  • こういうプロジェクトをAnkiと比較するのは自然なことだが、Ankiへの批判のかなりの部分は 主観的だったり誇張されていたりする と感じる。
    Ankiの 階層型デッキ構造 はむしろ強みであり、WYSIWYG編集も対象ユーザーにとっては当然の選択だ。
    LaTeX数式も簡単に使え、プラグインは「ハック的だが便利な」エコシステムになっている。
    いくつもの代替を試したが、結局またAnkiに戻ってくる。ターミナルベースのツールが好きな自分にとってさえ、それだけ機能的だ。

    • 彼のリストは単なる 動機づけの理由 であって、他人を説得するためのものではない。
      共感できるならプロジェクトを見ればいいし、そうでなければ無視すればいい。
    • 私は毎日30分くらいAnkiを使っている。正直、完璧ではないが、ほかのアプリを探す理由がない程度には十分使える。
  • カードが テキストのハッシュ値 で識別されるなら、タイプミスを直すたびにカードの復習履歴が消えてしまうのではないかと気になる。

  • spaced repetitionベースのソーシャルネットワーク が可能か気になる。
    フィードで気に入った投稿を「復習予約」のようにマークすれば、それが一種のリツイートになって、継続的に価値のあるコンテンツ が広まるかもしれない。

  • 私は knowledge base + spaced repetition プロジェクトを進めている。
    Markdownファイルは本当に便利だ。どこでも見られて、Gitでバージョン管理でき、cross-linking も自由にできる。
    プロジェクトリンク: https://github.com/odosui/mt

    • これは本当に面白い。私は 知識中心の科目 を勉強していて、ノートの中からそのままフラッシュカードを作って復習できるツールを探していた。
      ローカルノートを維持したいのでクラウドベースのソリューションは避けていたが、MarkdownをAnki用にパースするツールがあると知った。
  • Emacsユーザー なら、plain textベースのspaced repetitionツールである org-drill を勧める。

  • 私は Ankivalenz というライブラリを作った。構造化されたMarkdownをAnkiデッキに変換してくれる。
    例えば Path: Solar System > Planets > Color のような階層構造をカードに含められるので、文脈のある復習 が可能になる。
    通常のノートとカードを同じMarkdownファイル内で共存させることもできる。
    https://github.com/vangberg/ankivalenz/

  • 他のSRSプロジェクトがAnkiからの データ取り込み(import) 機能をきちんと実装していないのは残念だ。
    たいていのユーザーはすでにAnkiに数千枚のカードを持っているので、簡単には移行できない。
    Ankiのデータ形式は複雑だが、SQLiteベースなので共有は可能だ。

    • 私も自分でフラッシュカードアプリを作る中でAnkiのimport機能を実装してみたが、最初はfront/backだけを取り込んでいて データ損失 が大きかった。
      Ankiの ノート–モデル–テンプレート構造 を理解して初めて、その精巧さに気づいた。
      テキストベースの 共有可能なデッキフォーマット があれば、GitHubでの共同作業がずっとやりやすくなると思う。
      各ノートを個別ファイルにして一意なIDを付ければ、更新管理もしやすくなるはずだ。
    • 多くの開発者は、Ankiが最近 Rustベースにリファクタリング されたことを知らないようだ。
      今ではコアロジックがRust crateとして分離されているので、同じDBをそのまま使って 代替フロントエンド を簡単に作れる。
    • SQL dumpも結局はテキストファイルなので、GitHubで共有しにくいわけではないと思う。
  • 私はデータ入力のために Googleスプレッドシート を使ったことがある。
    UUIDで各行を一意に管理すれば、修正時にも追跡しやすい。
    同じデータをもとに複数のデッキ(例: 中国語ピンイン→漢字、漢字→英語)を作ることもできる。
    こうしたシートをテキストフォーマットでバックエンド化したインターフェースがあれば、本当に良さそうだ。

    • ただし content-addressing 方式だと、カードの修正が難しい点は欠点に見える。
  • 長年spaced repetitionを使ってきた立場から、いくつかコツを共有したい。
    1️⃣ 何が重要かを決める 必要がある。些細な情報までカードにすると、毎日何百枚も復習することになる。
    2️⃣ 重要な概念は、複数の角度から理解を試す 多様なカード で構成すべきだ。
    3️⃣ 一定期間後には、二次カード や実際の応用へ移行すべきだ。1年間一度も使っていない概念なら、重要ではないのかもしれない。
    結論として、spaced repetitionは非常に効率的な学習ツールだが、優先順位付けの失敗 が最大の落とし穴だ。