このプロジェクトについて
Amgi(韓国語で「暗記」の意)は、オープンソースでオフライン優先のAnki互換フラッシュカードクライアントであり、iOS向けに加えて、コンパニオンとなるwatchOSアプリも提供しています。Ankiのロジックを再実装するのではなく、公式のankitects/anki RustバックエンドをC FFI経由でラップしているため、スケジューリング、カードテンプレート、検索、インポート/エクスポート、統計、同期はすべて、Anki DesktopやAnkiDroidで使用されているものと同じエンジンで動作します。
READMEに記載されている主な機能は以下の通りです。
- オフライン優先の動作:ネットワーク接続なしで動作し、接続が利用可能になった時点で同期します。
- AnkiWebやセルフホストの同期サーバーを含む、互換性のある任意のサーバーとの同期。コレクションが分岐した場合の安全なマージにも対応。
- FSRSスケジューリングと、デッキごとのFSRSシミュレーター。
- オフラインで動作するYomitan互換の辞書検索を備えた内蔵EPUBリーダー。読書中にカードを作成することを目的としています。
- 画像オクルージョン、カードテンプレート、デッキとタグのフィルターチップを備えたAnki検索、連続学習日数や将来の期限予測を含む統計など、パワーユーザー向け機能。
- スマートフォン以外にも、ホーム画面ウィジェット、デバイス上でエンジンを実行するApple Watchアプリ、ショートカット/Siriアクションに対応。
アーキテクチャ:SwiftUIフィーチャーモジュールは、依存性注入クライアント、サービスファサード、型付きprotobufリクエスト、バックエンドをラップするSwiftラッパー、4つの関数からなるC FFIシーム、そして最終的にRust動的フレームワークの上に配置されています。SwiftがUIを所有し、Rustがデータベース(SQLite)、同期、スケジューリング、テンプレート、検索、インポート/エクスポート、統計を所有します。シリアライゼーションにはProtocol Buffersを使用し、25の.protoサービス定義があります。
技術スタック:Swift 6.2(厳格な並行性、言語モードv6)、依存性注入用のswift-dependencies、ライブラリとフィーチャーモジュール用のSPM、アプリ・ウィジェット・watchターゲット用のxcodegen。EPUBサポートはEPUBKit(MIT)をベンダー化し、Yomitan辞書にはhoshidictsを使用しています。
ビルドには、Xcode 26、Rust(stableとnightly、後者はwatchOSスライス用)、protoc、xcodegenが必要です。プロジェクトはチェックインされるのではなく生成されます。READMEには、Rust xcframeworkのビルド、protobuf Swift型の生成、Xcodeプロジェクトの生成コマンドが記載されています。ドキュメントは、機能、ビルド、アーキテクチャ、Rustブリッジ、データフロー、コードスタイルをカバーしています。
ライセンス:AGPL-3.0。これは、同じくAGPL-3.0であるankitects/ankiを組み込んでいるためです。READMEには、ソフトウェアの配布やネットワークサービスとしての実行には、同じライセンスの下で完全なソースコードを利用可能にすることが必要であると記載されています。貢献はCONTRIBUTING.mdを通じて歓迎されており、READMEでは、Ankiプロジェクト、画像オクルージョンとテーマ設定の作業に貢献した以前のフォーク、モバイル向けRustブリッジパターンのAnkiDroid、swift-dependenciesのPoint-Freeに謝意が示されています。
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.