本文へ移動

08 · 仕組み

同期

読むのはカードと data/ の3つ、書き戻すのは学習ログと弱点メモだけ。カードは読むだけです。

このページの中身

バックエンドはあなたの GitHub です。このアプリのためのサーバーは存在しません。リポジトリを clone するのではなく、GitHub の API で必要なファイルだけを取りに行きます。

何を読み、何を書くか

パス
読むカードの .mdどのファイルがカードになるか)/data/reviews/YYYY-MM-DD.jsonldata/fsrs.jsondata/insights.json
書くdata/reviews/YYYY-MM-DD.jsonl(あなたの採点)/data/insights.json(弱点の一覧)/data/fsrs.json(Mac 版で最適化したときだけ)

カードを書く経路は実装されていません。 書き換えも削除も起きません。

data/insights.json は「忘れた回数の多い順に苦手カード最大15枚」と、デッキごとの総数・期限切れ・未学習の件数です。アプリは書くだけで、読み込んで使うことはありません。AI エージェントがリポジトリを開いたときに、クリップボードでの受け渡しを待たずに弱点を把握できるようにするためのものです。

取り込む範囲は許可リストで決めます

GitHub のツリー取得にはサーバー側のパス絞り込みがありません。全ツリーが返ってくるので、絞り込みは端末の責任です。

  • 除外リストではなく許可リストにしてあります。リポジトリにディレクトリが増えたとき、「知らないものは同期しない」側に倒すためです
  • さらに _references / audio / episodes / podcast / sources / .git / .github / .claude仕掛け線として持っています。構造のルールだけで全部落ちるはずなので、ここに掛かったら実装側の不具合です。黙って捨てずに設定画面の「取り込まなかったパス」に出します

実測の例:あるリポジトリでは追跡している 6,351 ファイルのうち 5,839(91%)が _references/(市販の本を OCR したもの)でした。これは端末に落としません。

更新の順番

先端を取る → ツリーを取る → 変わったファイルだけ取る → マージする → 送る
  • ファイルの中身を取りに行く前に、端末側で blob の SHA を計算して突き合わせます。変わっていないファイルは取りに行きません
  • 書き込みはファイル数によらず3リクエストで終わります
  • 送るときは「他の端末が先に進めていたら弾く」形で送ります。弾かれたら、取り直してからやり直します
  • マージは必ず送る前です。取得と送信の間にリモートの学習ログが増えていたら、マージせずに送った瞬間にその行が消えるためです

学習ログのマージは和集合

同じ日のファイルをリモートと端末の両方が持っていたら、行の和集合を取ります。重複の判定は「カードの id + 採点の時刻」です。上書きは絶対にしません。

複数の端末で同じ日に採点しても、行が足されるだけで、どちらかが消えることはありません。これが成り立つのは学習ログが追記専用だからです。

端末の中の置き場

アプリのデータ領域/
├── vault/         同期で落としたカード
├── reviews/       学習ログ
└── manifest.json  どのファイルをどの版で持っているかの台帳

台帳を vault/ の外に置いてあるので、vault/ を丸ごと消して同期し直せます。削除は台帳に記録のあるパスだけに限られ、学習ログは削除の対象から完全に外れています

設定の「端末の保存を消す」は、この端末の vault・学習ログ・トークンを消します。GitHub 側は変わりません(まだ同期していない採点は取り直せないので、消す前に同期してください)。

通信の作法

  • 読みは 1時間あたり 5,000 リクエストの枠内です。Mac 版は初回同期を待たせないために6並列で読みます(iOS / Android は1件ずつ)
  • 書き込みは直列・1.1秒間隔です。どのプラットフォームでも変えていません
  • 接続していないときに通信は起きません。デモは公開リポジトリを未認証で読むので、1時間あたり60回の枠を使います

お試しの採点は送りません

デモ・同梱サンプル・まだ一度も自分のリポジトリを選んでいない状態での採点は、端末の中の別の置き場に書かれます。自分のリポジトリを選んだ時点でそれを手放し、手放したことを画面に出します。

手元に存在しないカードの記録が data/reviews/ に紛れ込むと、追記専用なのでアプリからは二度と消せず、弱点の一覧にも最適化の入力にも混ざるためです。

置き場そのものを分けてあるのは iOS だけで、Mac と Android は送信の入口で止めます(お試しの採点は端末に残りますが、あなたのリポジトリには入りません)。

このページは Anchor Cards の公開版の仕様書です。アプリの挙動と食い違いを見つけたらお問い合わせからお知らせください。