Skip to content

Altria1979/yomori

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yomori

AI を活用した日本語リーディング学習ワークスペース。実際の日本語資料を読みながら、理解、解析、音声、復習用の知識化まで行えます。

日本語 | English | 中文

Next.js React TypeScript Tailwind CSS License

概要

Yomori(読守)は、日本語学習者のためのローカル優先型リーディングワークスペースです。単なる翻訳ツールではなく、PDF、Office 文書、Markdown、Web テキストなどを読みやすい内容に変換し、AI によって文単位の翻訳、語彙、文法、ニュアンス、音声サポートを提供します。

教科書、試験問題、小説、論文、授業資料、自作の学習資料に向いています。

主な機能

  • 多形式インポートPDFTXTMarkdownHTMLDOCXEPUBXLS/XLSXPPT/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 install

環境変数

cp .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 dev

http://localhost:3000 を開きます。

使い方

  1. 上部バーの 導入材料 をクリックします。
  2. PDF、Markdown、DOCX、EPUB、Excel、PowerPoint などのファイルをインポートします。
  3. 中央のリーダーで原文を読み、ページ番号または文書チャンクを切り替えます。
  4. 右側の AI パネルで AI 知識抽出 をクリックします。
  5. 文単位の翻訳、語彙、文法説明を確認し、重要な内容をブックマークします。

対応ファイル形式

種類 拡張子 処理方法
PDF .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     # ESLint

データとプライバシー

Yomori は標準ではバックエンドデータベースを必要としません。教材メタデータ、読書位置、解析結果、ブックマークはブラウザ内に保存されます。大きなファイル Blob と文書チャンクは IndexedDB に保存されます。AI 解析時には、現在のページまたは現在のテキストチャンクのみが設定済みの AI サービスへ送信されます。

ロードマップ

  • 画像インポートと OCR ワークフロー
  • より充実した学習ノートとタグ機能
  • ブックマークした内容の復習キュー
  • 一括インポートと教材検索
  • デスクトップ版パッケージとローカルファイル連携の強化

コントリビュート

このプロジェクトはまだ高速に変更されています。変更を提出する前に、以下を実行してください。

pnpm lint
pnpm build

ライセンス

このプロジェクトは Apache License 2.0 の下で公開されています。

About

AI を活用した日本語リーディング学習ワークスペース。実際の日本語資料を読みながら、理解、解析、音声、復習用の知識化まで行えます。

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages