現在の状態
① 起動
JS 起動中...
0s 経過

PoC #4 — 翻訳 (MarianMT vs DeepL Free) v1

日本語日記 → 英語 / フランス語 翻訳の ローカル MarianMTDeepL Free API を並列比較。①翻訳ブロックの実現性と品質を実日記サンプルで判定。

📚 PoC #4 の狙い: オーナー方針「ローカル完結の厳密度は PoC 結果を見てから決める」を進めるため、同じ日記を A/B 両方で訳出し、品質・速度・サイズのトレードオフを実測する。

📚 案 A (MarianMT): Helsinki-NLP/opus-mt の ONNX 量子化版を transformers.js で実行。 日→英: 直接 (約 103MB) / 日→仏: リレー (日→英→仏、約 206MB)。Xenova/opus-mt-ja-fr は存在せず Helsinki-NLP は ONNX 未提供。

📚 案 B (DeepL Free): 月 50 万文字無料。DeepL は CORS 不可 (Access-Control-Allow-Origin なし) → 本 PoC は同一オリジン Cloudflare Pages Function (/api/deepl) をプロキシとして経由。API キーはサーバー保管しない (リクエスト毎に転送のみ・ログ無し)。
⚠ 正直な制約 (本 PoC で確認すべき):
MarianMT 初回 DL (ja→en)約 103MB / モバイル回線では数分
MarianMT 初回 DL (ja→fr リレー)約 206MB / モバイル端末では現実的か要実測 🟡
MarianMT 推論速度1段落 (200字) で 5〜30秒 予想 🟡 (Whisper-tiny より重い)
DeepL Free CORS❌ ブラウザ直叩き不可 → Cloudflare Pages Function プロキシ必須 ✅
DeepL API キー露出リスクセッション内のみ保持。localStorage 非保存。プロキシでログ無し
📚 出典: HF Hub 実測 / DeepL 公式 CORS ドキュメント / PoC #2,#3 実測との比較。
1. 日本語日記入力
0 字
2. 翻訳エンジン選択 (両方ONで並列比較)
3. 目標言語
4. DeepL API キー (案 B 使用時のみ)
🔒 セキュリティ: API キーは localStorage に保存されません。ページリロードで消えます (セッション内のみ)。 /api/deepl プロキシは Cloudflare Pages Function でサーバー側 fetch を行い、ログには残しません。 本 PoC は「ユーザー本人のキーをユーザー本人のブラウザで使う」前提です。
5. MarianMT モデル準備 (案 A 使用時)
未準備
6. 翻訳実行
🟡 ローカル MarianMT はキャンセル中断不可 (transformers.js の制限・PoC #3 と同じ)。
8. 診断ログ
このページについて (PoC #4 詳細)

PoC #4 翻訳ブロック: 日本語日記 → 英語 / フランス語 翻訳の実現性検証。①翻訳ブロックは PoC 計画上 最後の未検証ブロック。

確定済みブロック: ②TTS = Piper TTS (✅ GO 確定 / PoC #2) / ③LRC = Whisper + forced alignment (✅ GO 確定 / PoC #3)

案 A: MarianMT — Xenova/opus-mt-ja-en (HF Hub 実在確認・量子化 ONNX あり) を transformers.js v3.1.2 で実行。日→仏は Xenova の直接モデルが存在しないため日→英→仏 リレー。

案 B: DeepL Free — CORS 不可 (DeepL 公式ドキュメントで明示) のため Cloudflare Pages Function (/functions/api/deepl.js) でサーバー側プロキシを経由。Free 版エンドポイント api-free.deepl.com に転送。

判定の核: 同じ日記サンプルを A/B 両方で訳出 → オーナーが読み比べて品質判定 (F5 戒め: カンで決めない・実データで決める)。

機密性 vs コスト: 案 A は日記が端末外に出ない / 案 B は DeepL サーバーへ送信される。両者のトレードオフを実走してから方針決定。