📖

言語学習者向けボキャブラリ追跡ツール

に公開

言語学習者向けのボキャラブラリ追跡ツール trailsnail を開発している kazimir です。

このツールは自分のフラストレーションから始まりました 🌱
私と同じく外国語の学習を続けている方に、触っていただければ幸いです。

フィードバックをいただけるとなお嬉しいです 🙇‍♂️ (No pressure at all)
※フィードバックの項目はこのページの最後をご覧ください。

🤔 解決したかった課題

  • 新しい語に出会って、意味を調べて「理解した」と思っても、後日その意味や背景の文脈を忘れてしまう。
  • 市販の単語帳にはない「自分だけの語彙集」を作りたい。しかし、スプレッドシートでは機能が不足している。
  • 登録も復習もブラウザから行いたい。特に復習は時間軸にもとづいて短時間/高頻度で行いたい(フラッシュカードをいちいちめくっていくのではこの要求定義を満たせない)

🧪 現在の状況

✅ MVPをデモ版として公開済み: https://trailsnail.fly.dev
(※初回アクセス時は Fly.io の性質上、数秒かかる場合があります)
⚠️ デモ環境はAPI制限あり(コスト制御のため)
📮 開発ログ(Substack): https://trailsnail.substack.com/p/cloze-it-or-lose-it

🎥 使い方説明動画

https://www.youtube.com/watch?v=9WUYAJ5KfxY&ab_channel=TrailSnail

🌟 主な機能

  • 文脈ごと記録: 語と一緒に、出会った文や URL を保存
  • AI定義補助: 文脈をもとに意味候補を自動生成(OpenAI API使用)
  • ホバー翻訳: 基本的に target language で理解するが、忘れてしまった時に
  • 穴埋め問題(Clozeテスト): 文脈で active recall
  • 学習進捗チャート: 語彙の記録・定着の可視化
  • 時系列ビュー: 語彙の出会いを時間軸で整理
  • コマンドマップによる表示切り替え: 究極の UI は CLI に行き着く

📸 スクリーンショット


🧑‍💻コマンドマップについて

検索フォームにおいて :(コロン)で終わる特定の語は「検索対象」ではなく「コマンド」として機能します。

コマンド 機能
view: tl タイムライン表示に切り替える
chart: チャート表示に切り替える
view: cloze 虫食い表示に切り替える
view: cloze hint2 虫食い表示に切り替えて先頭 2 文字のヒントを出す
after: 20250601 時間指定によるフィルタ
view: tl within: 3 直近 3 日間のみをタイムライン表示かつ虫食い表示にする

噂によると sq: をはじめ、いくつかの隠しコマンドもあるとか...😆

コマンドマップ設計ドキュメント(個人 Notion から抜粋)

⚙️ 技術スタック

各環境共通

  • Framework: Ruby on Rails 8
  • API: OpenAI API, LinguaRobot, datamuse
  • NLP: spaCy
  • AI Agents: Junie, Claude Code, Amazon Q Developer

デモ環境

  • SaaS: Fly.io

本番環境

  • SaaS: AWS(ALB + ECS Fargate + Aurora Serverless V2 compatible PostgreSQL + Cognito + CloudFormation + SecretManager + CloudWatch)

🔭 今後の展開

  • 認証機能およびユーザーテーブルの実装(すでに完了)
  • spaCy による形態素解析による検索/ハイライト機能の精度向上(AppRunner で API 化)とキャッシュ化
  • CLI 拡張
    • view: compact で sentence のみ表示
    • add: i: yolo, s: You Only Live Once で登録可能
  • 同意語/反意語(synonym/antonym) サポート
  • 紛らわしい語(lexical competition 候補)のサポート
  • 略語やスラングサポート(thingamabob, yolo)
  • AI による記憶しやすい例文の生成(crunch の意味は一般業界とコンピュータ業界では違う)
  • Software Engineer 特化型語彙集
    • Spec で利用する語彙集/例文集
    • Github Issue, commit での頻出語
  • Chrome拡張での語彙取り込み支援
  • エクスポート機能(CSV/Anki互換など)

🙋‍♂️ フィードバック募集中!

  • このコンセプト、語学学習者にとって魅力的に見えるか?
  • UXの流れは直感的か?
  • 動作速度や使い心地に課題はあるか?
  • 穴埋めテストの形式は記憶の助けになるか?
  • チャート表示:どんな情報がもっとも役立つ?
  • 学習の振り返り方:時系列 or タグ or ランダム?
  • 開発ログについてどう思うか?
  • 追加してほしい機能は?

🏃 これから記事にしていきたいトピック

開発環境の効率化

  • 共通の RAILS_ENV=development で開発環境(on Mac) とデモ環境(on Fly.io) を分ける仕組み(デモ環境のみ認証なしにするには)
  • AWS Cognito は複数の redirect_uri, logout_uri を設定可能なのでこれを利用して環境変数 AWS=true で callback 先を変える仕組み

語学学習

  • OpenAI Embeddings を利用したベクタ活用
  • spaCy を利用した形態素解析 API の自作と AppRunner の活用
  • AI 時代に外国語を学ぶ意味
  • 結果が出るまで長時間を必要とする活動にどう向き合うか

インフラストラクチャ

  • AWS Cognito Hosted UI のアップデート
  • Amazon Q Developer を利用した IaC の高速イテレーションとドキュメント生成
  • Aurora Severless V2 の設定
  • Fly.io と ECR における Dockerfile およびコンテナイメージ管理の共通化

その他

  • Zettelkasten x Notion x Obsidian の設計および実装

ご覧いただきありがとうございました 🐌
コメント、アドバイス、フィードバック、どんな形でも大歓迎です!

Discussion