目的

LingQMigakuKimchi Readerjpdbなど、似ているようなソフトウェアと比べたら、asbplayer は完成したものだとは言えないんですが、完成させるとしたら、最低限いくつかの機能が必要になってきます。

  • 学習対象の言語のコンテンツを利用したフラッシュカードの作成(すでに asbplayer では可能)
  • フラッシュカードを復習するための間隔反復システム
  • 学習済み単語の管理システム
  • 文章の見出し語化と辞書検索

asbplayer はツールを選ぶ自由を守るように開発されており、実際に辞書として Yomitan を使っているユーザー、そしてフラッシュカードアプリとして Anki を使っているユーザーは多くいます。真剣に言語学習に向き合っている人は、目標を達成するためになら、様々なツールを取り入れるのも含めて、必要なことはやります。そのため、asbplayer は他のツールとの互換性をなるべく制限しないように作られています。

とはいえ、言語学習ツールに詳しくない、あるいはパソコンが苦手な人にもぜひ asbplayer を使ってほしいと思っています。asbplayer をだれでも使えるようなツールにするためには、他のアプリをインストールしなくても済むように、言語学習に必要な基本機能が asbplayer に搭載されていなければなりません。それで、asbplayer には何かしらのバックエンドが必要になってきます。もちろん、僕がサービスとしてホスティングしたものを使うか、自分でセルフホストするか、あるいは asbplayer の バックエンド を無視して Anki を使い続けるかは、全部ユーザーに任せます。

asbplayer のバックエンド

フラッシュカードとその復習状態など、ユーザーの学習進捗を永続に保存するためにはバックエンドが必要です。言うまでもありませんが、データをユーザー側のストレージに保存すると、データ損失のリスクがでてくるからです。その上、インターネットに保存したほうが、Anki Webのように、そのデータを利用した他のユースケースも考えられます。

僕自身が運用するオンラインサービスは完全無料で提供することができませんが、ユーザーが使いたいツールを選ぶ自由を守り続けます。Anki を使い続けたいのであれば、使っても良いし、asbplayer のバックエンドをセルフホストしたいのであれば、セルフホストしても良いのです。オープンソースを守りながら、利益のあるビジネスを作れたPlausible に倣い、コード自体はユーザーがいつまでも自由に変えられて、実行できるように、AGPLライセンスのもとで公開します。

技術

低コスト、任意、再利用可能という条件を考慮しながら、今まで考えてきた、技術をどうするかに関する話は以下の通りです。長期的なプロジェクトなので、変わる可能最が高いです。

  • 間隔反復システムは最先端のアルゴリズムであるFSRSを採用します。
  • プログラミング言語は Go にしたいです。Go を書いた経験はとても少ないですが、このサイドプロジェクトを学ぶ機会にもしたいのです。Go は早い言語の上、プロフェッショナルな面でも役に立つでしょう。
  • データ保存はリレーショナルデータベースを使います。NoSQL よりも、リレーショナルデータベースのほうが適応性が高く、常に進化していくはずのこのプロジェクトにとっては使い勝手が良いはずです。
  • コストを抑えるためには、それ以外のインフラは、必要なときにだけ考えてみます。
  • AWS のような、大企業のクラウドサービスは使いません。
  • 既存のツールとの互換性を守るためには、フラッシュカード API はAnkiConnectを一部実装します。
  • 任意性を守るためには、フラッシュカードの同期を行える Anki プラグインを開発したほうが良いです。これによって、ユーザーが自由にフラッシュカードを Anki に移動することができますし、その逆もありえます。
  • API の悪用を防ぐには、ユーザー認証が必要ですが、それをなるべく使いやすくしたいです。グーグル Chrome で拡張機能を使っているユーザーは拡張機能の APIで認証が行えますが、他のユーザーは他の OAuth プロバイダーでカバーできます。
  • 文章の見出し語化と単語の辞書検索はネットワーク通信を通さずにユーザーのデバイスで行います。無料で合法な辞書は、Wiktionary が検討できます。
  • フロントエンドはサバー側のコンピュートを消費しないで、シングルページアプリケーションでユーザーのデバイス側でランダリングさせます。React を採用する可能性が高いですが、Material UI 以外のフレームワークを使ってみたい気持ちもあります。

誰にも頼まれていない機能

最後に話しますが、コンテンツを利用した言語学習はとても孤独で長い道ですが、それをもっと他人に共通できる経験にできたらなとも思います。言語学習者を繋ぐソーシャルネットワークは未だにみたことがありません。なのに、自分と同じ言語学習者たちがどういうコンテンツをみているのか、そしてどこまで進んでいるのかが簡単に見えていたら、みんなと一緒に頑張っている体験をもっと味わってもらえたら、どうでしょうか。フラッシュカードを通して、それを可能にできるかもしれません。誰にも頼まれていませんが、実現してみたいなと思います。