Skip to content

Latest commit

 

History

History
239 lines (153 loc) · 21.4 KB

README.ja.md

File metadata and controls

239 lines (153 loc) · 21.4 KB

tanku Anime

English | 简体中文 | 日本語

アニメと日本のドラマで学べる、ローカルファーストの日本語学習プレーヤーです。 作品を探し、自分のローカルメディアを字幕非表示のまま視聴します。聞き取れなかった一文で一時停止し、現在の文の確認、分かち書き・辞書検索、必要なときだけの AI 解説、復習用の保存を行えます。

インストール

コマンド 1 行です。git・Node.js・FFmpeg を事前に用意する必要はありません。

macOS:「ターミナル」を開き(⌘ + スペース で ターミナル と入力)、次を貼り付けます。

curl -fsSL https://raw.githubusercontent.com/DanielDcool/tankuanime/master/scripts/install.sh | bash

Windows:Win + R を押して powershell と入力し Enter で PowerShell を開き、次を貼り付けます。

irm https://raw.githubusercontent.com/DanielDcool/tankuanime/master/scripts/install.ps1 | iex

完了するとアプリが起動し、ブラウザーが開きます。以後はデスクトップの tanku Anime ショートカットをダブルクリックするだけです。同じコマンドをもう一度実行すれば更新されます。git を使いたい場合は手動でセットアップを参照してください。

インストーラーが行うこと
  • ~/tankuanime にインストールし、ダウンロードしたもの——ソースコード、アプリ専用の Node.js 22(nodejs.org 公式ビルド、SHA-256 検証済み)、FFmpeg——をすべてそのフォルダー内に置きます。管理者権限は不要で、システムの PATH やシェル設定には触れません。PATH に Node.js 22 や FFmpeg が既にあればそれを使います。
  • FFmpeg は ffmpeg.org からリンクされているビルドを使います。macOS で Homebrew がない場合は evermeet.cx の静的ビルド(Intel バイナリ。Apple Silicon では Rosetta 2 経由で動作)、Windows では gyan.dev の essentials ビルドです。
  • あわせて日本語辞書(JMdict)の取得と npm ci を行い、デスクトップに tanku Anime のショートカットを置きます。アンインストールはフォルダーとショートカットの削除だけです。
  • Windows について:インストーラーとランチャーはプッシュのたびに CI で実行していますが、実機の Windows ではまだ動かしていません。フィードバックを歓迎します。

聞き取れなかった一文で一時停止し、分かち書きと AI 解説を開いた tanku Anime のプレーヤー

聞き取れなかった一文で一時停止したところ。現在の文が分かち書きされ、クリックした語の読みと JMdict の語義が出ます。必要なときだけ AI が翻訳・文法構造・表現・ニュアンスを解説します。

作品を探す 保存した語を復習する
今季のアニメを表示する発見ページ 保存した単語と文が並ぶ単語帳

スクリーンショットは同梱のデモメディアを使用しており、著作権のある動画は含みません。

tanku Anime は初期段階のセルフホスト型 Web アプリです。メディアファイルは常にあなたのコンピューターに残り、このアプリが動画をホスト、プロキシ、ダウンロードすることはありません。

できること

  • アニメとドラマの両方を探せます。今季・前季のアニメを一覧し、アプリに同梱の厳選ドラマを開き、作品を検索し、公式の配信・情報リンクを開けます。
  • 上部ナビゲーションで アニメ と ドラマ(日本のテレビドラマ)を切り替えます。モードに合わせてサイト全体の配色が反転し、アニメは墨黒地に生成り色の文字、ドラマはその逆になります。再生ページだけはどちらのモードでも墨黒のままで、映像のとなりで大きく明るいのは解析パネルだけです。
  • ドラマは設定なしで始められます。聞き取りの重さで段階分けした手書きの厳選リストを同梱しており、職場の敬語、日常会話など「どこが学習に効くか」を一言ずつ添えています。
  • リストに無いドラマは作品名(日本語・ローマ字)で検索できます。結果はポスター・評価・話数・放送局・あらすじ付きの作品カードで、データは Bangumi から取るためトークンは要りません。カタログに無いときは、カードの下の もっと探す ボタンで同じ語をそのまま Nyaa に投げます。
  • ローカルの .mp4 / .mkv と日本語 .srt / .ass 字幕で学習できます。ブラウザー再生が必要な場合は MKV を再多重化します。
  • 大きなライブラリでも見やすいよう、動画を保存フォルダごとにまとめ、各フォルダを個別に折りたためます。
  • 再生ページでは同じフォルダ内の再生可能な動画を一覧し、前の話、次の話、直接の話数選択ができます。
  • 既定ではリスニングモードです。一時停止で現在の文を表示し、聞き直し、文単位の移動、再生位置に追従する字幕一覧の表示ができます。
  • Kuromoji によるローカル分かち書きと JMdict による辞書検索を行えます。
  • 必要なときだけ Anthropic、DeepSeek、OpenAI、Google Gemini に構造化された解説を依頼できます。結果はローカルにのみキャッシュされます。
  • 単語と文を保存し、説明、既存の AI 講解キャッシュ、時間付きの出典を確認してから、ワンクリックで Anki の tanku Anime デッキへ送れます。追加済みのカードは自動でスキップされます。
  • 任意で Jimaku の字幕照合を利用し、magnet リンクを自分のローカルダウンローダーへ渡せます。Jimaku の候補検索はアニメと実写の両方のライブラリを対象にするため、ドラマの字幕も同じ「一度だけ手動で対応付ける」流れで使えます。ドラマのリソース検索は Nyaa の Live Action カテゴリーを使い、既定では raw を対象にします。ダウンローダー RPC、動画転送、リモートのメディア管理は実装していません。

手動でセットアップ

開発者向け、または自分の git チェックアウト・Node.js・FFmpeg を使いたい場合の手順です。

必要環境: Node.js 22.x、および PATH から実行できる ffmpeg と ffprobe。macOS は実メディアで完全に確認済みです。Windows は導入と起動を確認済みですが、実機でのメディア再生は未確認です。

macOS:

git clone https://github.com/DanielDcool/tankuanime.git
cd tankuanime
brew install ffmpeg
npm ci
npm start

Windows PowerShell(先に Node.js 22 と、FFmpeg 公式ダウンロードページから案内される Windows ビルドをインストールしてください):

node --version
ffmpeg -version
ffprobe -version
git clone https://github.com/DanielDcool/tankuanime.git
cd tankuanime
npm ci
npm start

node --version は必ず v22.x を表示する必要があります。Node.js の可変な「LTS」パッケージ別名は、メジャーバージョン 22 を指すことを確認できない限り使わないでください。

npm start は起動前に環境チェックを行います。Node.js のメジャーバージョンが 22 以外の場合は案内を表示して停止し、PATH に ffmpeg または ffprobe が見つからない場合は警告を表示したうえで起動します。TANKU_OPEN_BROWSER=1 を設定するとページの準備ができた時点でブラウザーを自動で開きます(ダブルクリック用ランチャーはこれを使っています)。

初回起動

http://localhost:5173 を開きます。アプリはローカルデータベースを自動作成し、既定でホームフォルダー内の AnimeLibrary を監視します。フルパスは設定ページで変更でき、保存後にアプリを再起動すると反映されます。

ライブラリが空の場合は、メディアフォルダの指定、最初の動画、任意の字幕を置く手順が画面に表示されます。ローカル再生に API key は不要で、AI 解説と Jimaku は後から設定できます。

MEDIA_DIR は引き続き最優先のプロセス単位の上書きです。macOS または Linux でメディア保存先を一時的に上書きする場合、またはデータ保存先を変える場合は、起動前に設定してください。

export MEDIA_DIR="$HOME/Movies/TankuAnime"
export DATA_DIR="$PWD/.local-data"
npm start

Windows PowerShell では、現在のプロセスだけに適用する環境変数を使います。

$env:MEDIA_DIR = "$HOME\Videos\TankuAnime"
$env:DATA_DIR = "$PWD\.local-data"
npm start

任意の設定

日本語辞書

ローカルの語義検索を使うには、次を実行します(1 行インストールでは実行済みです)。

npm run setup:jmdict

検証済みの JMdict Simplified リリース(CC BY-SA 4.0、JMdict は EDRDG の著作物)を自動でダウンロードし、展開してローカルデータベースへ取り込みます。最新リリースを使う場合は -- --latest、再ダウンロードする場合は -- --force を付けてください。

自動ダウンロードが使えない場合は、JMdict Simplified releases から jmdict-eng-*.json.zip を手動でダウンロードし、server/vendor/jmdict-eng.json に展開してから npm run import-jmdict -w server を実行してください。

Anki へワンクリック追加

Anki でアドオンコード 2055492159 を使って AnkiConnect をインストールし、Anki を再起動して起動したままにします。単語帳ページの Anki に一括追加 を押すと、tanku Anime が同名のデッキとノートタイプを作成し、新しいカードだけを追加します。カード裏面には例文、出典、時間付きのローカル再生リンクが入ります。

接続先はローカルの AnkiConnect(127.0.0.1:8765)だけで、Anki のコレクション DB を直接変更しません。Anki または AnkiConnect が使えない場合も単語帳は変更されず、必要な設定が画面に表示されます。

新しいカードの再生リンクには APP_BASE_URL(既定:http://localhost:5173)を使います。重複判定でスキップされた既存カードは自動で書き換えません。

AI 解説

設定 / Settings で Anthropic、DeepSeek、OpenAI、Google Gemini を選び、そのプロバイダーの API key を入力します。キーと解説キャッシュはローカルの SQLite データベースだけに保存されます。キーや server/data/ ディレクトリをコミットしないでください。

解説は中国語または英語で出力されます。既定ではブラウザ / OS の言語に従い(zh-* なら中国語、それ以外は英語)、設定の AI 解説の言語 でどちらかに固定することもできます。

OpenAI には OpenAI Platform API key が必要です。ChatGPT または Codex のサブスクリプションだけでは API key にはなりません。

ドラマの検索(Bangumi)

ドラマモードにトークンは一切不要です。トップは同梱の厳選リスト、検索窓は Bangumi(api.bgm.tv、公開・キー不要)で作品名を引き、日本のテレビドラマだけを表示します(映画・バラエティ・日本以外のドラマは除外)。Bangumi はコミュニティ運営のデータベースなので、マイナーな作品や古い作品が無いことや、あらすじが日本語ではなく中国語のことがあります。カタログで見つからないものは、結果の下の もっと探す(Nyaa で直接検索) ボタンでキーワードのまま Nyaa を引けます。

字幕とローカルメディア

メディアと対応する日本語字幕を設定ページに表示されるメディアフォルダ(既定値:ホームフォルダー内の AnimeLibrary)に置きます。作品ごとにサブフォルダを作ると、ライブラリも相対フォルダごとにまとまります。例:

AnimeLibrary/Show/Show - 01.mkv
AnimeLibrary/Show/Show - 01.ja.srt

外部の日本語字幕を優先します。ない場合は、アプリが MKV から埋め込み日本語字幕の抽出を試みます。Jimaku の照合は任意であり、自分で取得した API key を設定画面で入力する必要があります。

magnet ボタンも任意機能であり、OS に登録された magnet 対応デスクトップダウンローダーが必要です。Windows では、ユーザーの確認なしにエージェントがダウンローダーを導入・再設定してはいけません。自動でライブラリへ取り込む場合は保存先を設定ページに表示されるメディアフォルダへ合わせます。ブラウザー互換性を優先するなら H.264 8-bit を選んでください。Windows の HEVC 対応は OS、ハードウェア、拡張機能、ブラウザーに左右されるため、tanku Anime は H.265 を保守的に「変換が必要な可能性あり」と表示します。

リソース検索が「Nyaa で検索」リンクしか出さないとき

候補一覧はブラウザーではなくローカルのサーバープロセスが nyaa.si から取得しており、Node.js は OS のプロキシ設定を使いません。ネットワークの都合で nyaa.si(や AniList / Jimaku)にプロキシ経由でしか届かない場合は、プロキシツールの TUN / 拡張モードを有効にするか、Node 標準のプロキシ対応で起動してください(Node 22.21 以降。ポートはお使いのプロキシに合わせます):

NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://127.0.0.1:7890 npm start

PowerShell:$env:NODE_USE_ENV_PROXY = "1"; $env:HTTPS_PROXY = "http://127.0.0.1:7890"; npm start

見分け方:エラーカードの詳細が fetch failed (ENOTFOUND) やタイムアウトならサーバーが nyaa.si に届いていません(npm start を実行した端末にも同じ理由が出ます)。「候補が見つかりませんでした」と出る場合は接続は正常で、その作品にその分類のリリースがないだけです。「字幕なし」や「すべて」に切り替えてみてください。

学習ショートカット

画面上の操作チップはクリックでき、キーボードショートカットも使えます。

キー 操作
Space 一時停止して現在の文を表示 / 再生して字幕を隠す
A 現在の文を聞き直す。素早く 2 回押すと前の文へ戻る
← / → 前の文 / 次の文
D 選択中の学習文の AI 解説を依頼
S 常時表示字幕を切り替え
T 解析パネルと字幕一覧を切り替え。字幕一覧は現在の文に移動
[ / ] 字幕タイミングを −/+100ms 調整

画面にはよく使う学習操作だけを残し、[ / ] は上級者向けのキーボード専用操作にしています。デスクトップでは、プレーヤーと解析パネルの間の仕切りをドラッグして幅を変えられます。全画面でも字幕を表示するため、アプリ内の全画面ボタンを使ってください。

字幕常時表示の切り替えは現在のブラウザーに保存されます。ページの再読み込み、プレーヤーへ戻ったとき、エピソードを切り替えたときも前回の設定を保持します。

聞き直し中も右側の解析は選択中の文を保持します。字幕が非表示でも消えず、別の文で一時停止するか字幕一覧で別の文を選んだときだけ切り替わります。

動画を開き直すと、最後に保存された視聴位置から再開します。単語詳細の出典リンクから開いた場合は、その一度だけ保存済みのセリフ位置が優先されます。

開発

npm test
npm run build -w web

このプロジェクトは server/ の Fastify サーバーと web/ の React/Vite クライアントで構成されています。ブラウザーからのリクエストはすべて web/src/api.ts を経由し、学習モードの状態は web/src/player/learningMode.ts にあります。

上級者向け:Web クライアントをサーバーに置く場合

Web クライアントと API は同じオリジンで配信し、/api をループバックだけで待ち受ける Fastify へリバースプロキシする構成を推奨します。同一オリジンなら追加の CORS 許可は不要です。別オリジンが必要な場合は、Web クライアントを VITE_API_BASE_URL で API に向けてビルドし、CORS_ORIGINS に信頼する Web オリジンをカンマ区切りで正確に指定し、Anki の再生リンク用に APP_BASE_URL も設定します。これらは認証、HTTPS、ユーザーごとのデータ分離を追加しないため、それらを実装するまでは API を公開ネットワークへ直接露出しないでください。

AI コーディングエージェントによるローカル設定

AI コーディングエージェントには、次の一文だけを伝えてください。

https://github.com/DanielDcool/tankuanime から tanku Anime をインストールして起動してください。

AGENTS.md、この README、docs/AI-SETUP.md を読むことはエージェントの責務です。これらのファイルで安全な境界、プラットフォーム確認、任意コンポーネント、検証手順を定義しているため、利用者が毎回繰り返す必要はありません。Windows では Node.js 22、2 つの FFmpeg コマンド、依存関係、テスト、起動、Web ページ、ヘルスエンドポイントをすべて確認してから、導入成功と報告します。

コントリビュート

コントリビューションを歓迎します。まず CONTRIBUTING.md、CODE_OF_CONDUCT.md、SECURITY.md を読んでください。汎用的なプラットフォーム機能を増やすのではなく、実際の学習時の摩擦を減らす変更に集中してください。

メディア、プライバシー、法的な境界

  • 利用する権利のあるメディアと字幕だけを使ってください。
  • メディアは設定済みのローカルメディアフォルダに置かれ、アプリがアップロードすることはありません。
  • 任意のリソース検索は公開メタデータを返し、magnet リンクをローカルダウンローダーへ渡すだけです。動画のダウンロード、ホスト、プロキシは行いません。
  • ドラマの検索結果と作品情報は Bangumi の公開 API から取得しています。ポスター画像は Bangumi と TMDB の CDN から直接読み込み、アプリには保存しません。tanku Anime はどちらのサービスとも提携関係にありません。
  • API key、視聴進捗、単語、対応付け、AI 解説キャッシュはローカルアプリのデータです。SQLite データディレクトリは意図的にバックアップまたは削除してください。
  • サーバーは既定で 127.0.0.1 のみを監視します。信頼できないネットワークへ公開しないでください。API key は現在ローカル SQLite データベースに平文で保存されます。報告方法と脅威モデルは SECURITY.md を参照してください。

ライセンス

tanku Anime は MIT License のもとで公開されています。

プロジェクトの状態

早期段階ですが、作者自身が日常的に使っています。学習の一連の流れは macOS で実メディアを使って確認済みです。Windows は互換修正、クロスプラットフォーム CI、新規導入と起動の確認がありますが、実機でのメディア再生は未確認です。

ドラマモードは最も新しい機能です。同梱の厳選リスト、Bangumi の作品検索と詳細ページ、ドラマのリソース検索、Jimaku のドラマ字幕はいずれも実際のサービスで確認済みです。ロードマップは docs/DEVELOPMENT.md を参照してください。