AI を活用した日本語リーディング学習ワークスペース。実際の日本語資料を読みながら、理解、解析、音声、復習用の知識化まで行えます。
Yomori(読守)は、日本語学習者のためのローカル優先型リーディングワークスペースです。単なる翻訳ツールではなく、PDF、Office 文書、Markdown、Web テキストなどを読みやすい内容に変換し、AI によって文単位の翻訳、語彙、文法、ニュアンス、音声サポートを提供します。
教科書、試験問題、小説、論文、授業資料、自作の学習資料に向いています。
- 多形式インポート:
PDF、TXT、Markdown、HTML、DOCX、EPUB、XLS/XLSX、PPT/PPTXに対応。 - 大きなファイルに対応:元ファイルと解析済みチャンクを IndexedDB に保存し、長い文書はページ、章、またはテキストチャンク単位で読み込みます。
- PDF リーダー:読書位置の復元、目次ナビゲーション、ページジャンプ、ウィンドウ化ページレンダリング。
- AI 知識抽出:現在のページまたはチャンクから、日本語文、翻訳、語彙、文法、語感を解析。
- スキャン資料対応:PDF の文字抽出が不十分な場合、視覚モデルまたは OCR フローにフォールバック。
- 音声と復習:日本語 TTS、語彙/文法のブックマーク、旅行フレーズ、会話練習、JLPT 解析。
- ローカル優先ストレージ:教材、読書位置、解析結果、ブックマークは標準でブラウザ内に保存。
- モデル設定:智譜、MiniMax、OpenAI-compatible サービス、カスタムサービス、ローカル Ollama などを設定可能。
- Node.js 18+
- pnpm
- 智譜 GLM や MiniMax など、利用可能な AI サービスの API Key
git clone <repo-url> yomori
cd yomori
pnpm installcp .env.example .env.local.env.local を編集します:
# Zhipu GLM
ZHIPU_API_KEY="your-zhipu-api-key"
ZHIPU_BASE_URL="https://open.bigmodel.cn/api/paas/v4"
ZHIPU_MODEL="glm-4-flash-250414"
# MiniMax(任意)
MINIMAX_API_KEY="your-minimax-api-key"
MINIMAX_BASE_URL="https://api.minimaxi.com/v1"行動ログは任意機能です。読書や解析などのイベントを Supabase に書き込みたい場合は、あわせて以下を設定してください。
NEXT_PUBLIC_SUPABASE_URL="your-supabase-url"
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY="your-supabase-publishable-key"
SUPABASE_SECRET_KEY="your-supabase-secret-key"
EVENT_FINGERPRINT_SALT="a-long-random-secret"Vercel にデプロイする場合は、Project Settings → Environment Variables で対象環境ごとにこれらの変数を設定する必要があります。ローカルの .env.local は本番環境へ自動同期されません。未設定の場合、行動ログ API はイベントを受け取ったうえでスキップし、読書機能には影響しません。
pnpm devhttp://localhost:3000 を開きます。
- 上部バーの 導入材料 をクリックします。
- PDF、Markdown、DOCX、EPUB、Excel、PowerPoint などのファイルをインポートします。
- 中央のリーダーで原文を読み、ページ番号または文書チャンクを切り替えます。
- 右側の AI パネルで AI 知識抽出 をクリックします。
- 文単位の翻訳、語彙、文法説明を確認し、重要な内容をブックマークします。
| 種類 | 拡張子 | 処理方法 |
|---|---|---|
.pdf |
元ページを表示し、現在ページを AI 解析。スキャンページは視覚/OCR にフォールバック | |
| Text | .txt |
テキストチャンク単位で閲覧・解析 |
| Markdown | .md, .markdown |
HTML に変換し、サニタイズ後にチャンク化 |
| HTML | .html, .htm |
信頼できない内容をサニタイズして表示 |
| Word | .docx |
読みやすい HTML/テキストチャンクに変換 |
| EPUB | .epub |
章単位で読み込み、章の内容を必要に応じてキャッシュ |
| Excel | .xlsx, .xls |
シートと行範囲ごとに表チャンクを生成 |
| PowerPoint | .pptx, .ppt |
PPTX はスライド単位でテキスト抽出、旧 PPT はベストエフォート抽出 |
- Framework:Next.js 16 App Router
- UI:React 19、Tailwind CSS 4、next-themes
- State:Zustand + localStorage
- Storage:元ファイルと文書チャンク保存用の IndexedDB
- Document parsing:react-pdf、mammoth、epubjs、marked、DOMPurify、xlsx、jszip、cfb
- AI / TTS:AI SDK、OpenAI-compatible providers、edge-tts-universal
src/
app/ # Next.js のページ、レイアウト、API routes
components/ # リーダー、インポートモーダル、サイドバー、AI パネル、練習機能
lib/ # 状態管理、文書インポート、IndexedDB、AI provider、TTS
public/ # PWA アイコンと静的ファイル
主なファイル:
src/lib/document-import.ts:ファイル判定、解析、サニタイズ、チャンク化。src/lib/pdf-storage.ts:ファイルと chunk の IndexedDB 保存。src/components/original-viewer.tsx:中央リーダーと読書位置復元。src/components/knowledge-panel.tsx:AI 解析、ストリーミング表示、ブックマーク。
pnpm dev # ローカル開発
pnpm build # 本番ビルド
pnpm start # 本番サーバー起動
pnpm lint # ESLintYomori は標準ではバックエンドデータベースを必要としません。教材メタデータ、読書位置、解析結果、ブックマークはブラウザ内に保存されます。大きなファイル Blob と文書チャンクは IndexedDB に保存されます。AI 解析時には、現在のページまたは現在のテキストチャンクのみが設定済みの AI サービスへ送信されます。
- 画像インポートと OCR ワークフロー
- より充実した学習ノートとタグ機能
- ブックマークした内容の復習キュー
- 一括インポートと教材検索
- デスクトップ版パッケージとローカルファイル連携の強化
このプロジェクトはまだ高速に変更されています。変更を提出する前に、以下を実行してください。
pnpm lint
pnpm buildこのプロジェクトは Apache License 2.0 の下で公開されています。