eitango - TUI English Vocabulary Tool
オフラインで動く英単語トレーニング TUI です。Bubble Tea ベースの対話UIとローカル SQLite を使い、待ち時間に短く回せる学習セッションを想定しています。
SRS での復習に加えて、選択式の choice と入力式の write の 2 モードを用意していて、音声再生もサポートしています。
デフォルトで内部に語彙が組み込まれており(現在の語彙数: 約8000)、外部 CSV / JSONL からの辞書インポートもサポートしています。学習統計や進捗管理、更新通知、診断ツールも備えています。
English README / コントリビューションガイド / Security Policy
eitangoでホーム画面を表示し、TUIでモード選択や設定変更が可能
choice mode
write mode
- ホーム画面で
Tabによりchoice / writeを切り替え、Enterで play、rで review を開始 - ホーム設定で Write 難易度
basic / hardを切り替え可能 - ホーム設定で
default / no_color / neon / customのテーマモードを切り替え可能 - ホーム設定から Key Bindings Editor を開き、キーバインドを保存して即時反映可能
- macOS / Windows では
Ctrl+Pで現在の単語を発話し、Shift+Tabでセッション内の自動再生を切り替え可能 eitango play [choice|write]で通常学習セッションを開始eitango review [choice|write]で復習セッションを開始- due があれば通常の due-only 復習を開始
- due が 0 件でも、確認後に「過去に出題済み語だけのランダム復習」を開始可能
- reviewed-only fallback では SRS を更新せず、feedback は
Enterで次へ進むだけ
eitango statsで学習統計を表示eitango versionで現在のビルド情報と最新 release を確認eitango doctorで DB と辞書の read-only 診断を実行eitango validateで組み込み辞書や外部 CSV / JSONL を検証eitango import/eitango export/eitango resetで辞書と進捗を保守
Windows では winget から install できます。manifest は GitHub Releases に公開した Windows zip を参照します。
winget install HarumiWeb.Eitango更新は次です。
winget upgrade HarumiWeb.Eitangowinget を使わない場合は後述の GitHub Releases の zip からも利用できます。
Note
winget は 都合上、他の配布手段よりリリースからの反映が遅れる可能性があります。最新 release をすぐに使いたい場合は、次のいずれかを選択してください。
macOS / Linux では Homebrew tap からも install できます。formula は GitHub Releases に公開した darwin / linux の tar.gz を参照します。
brew tap harumiWeb/eitango
brew install eitango更新は次です。
brew upgrade eitangoinstall.sh は --version を省略した場合に GitHub Releases API (/releases/latest) へアクセスして最新 version を解決し、そのうえで対応する archive と checksums.txt を取得します。SHA256 検証が通ったときだけ ~/.eitango/ へ展開し、shell rc は自動変更しません。
curl -fsSL https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh | sh特定 version を入れるときは次を使ってください。
curl -fsSL https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh | sh -s -- --version v0.2.0インストール後は次が配置されます。
~/.eitango/bin/eitango~/.eitango/version~/.eitango/share/
法務ファイルと notice は ~/.eitango/share/ に保持されます。PATH に ~/.eitango/bin が無い場合は次を shell 設定へ追加してください。
export PATH="$HOME/.eitango/bin:$PATH"script を pipe せず確認してから実行したい場合は次でも同じです。
curl -fsSLo install.sh https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh
sh install.sh --version v0.2.0アンインストールは次です。既定では学習データを残します。
curl -fsSL https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh | sh -s -- --uninstall学習データも消す場合は --purge-data を付けます。EITANGO_DATA_DIR を使っている場合は、同じ env を付けて実行してください。
curl -fsSL https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh | sh -s -- --uninstall --purge-data必要ツールは sh, curl, tar, mktemp と、sha256sum / shasum / openssl のいずれか 1 つです。Windows は今回の installer 対象外なので、winget か release zip を使ってください。
公開アーカイブにはバイナリに加えて LICENSE、THIRD_PARTY_NOTICES.md、third_party/licenses/ が同梱されます。自分のOS向けの成果物を展開して eitango を実行してください。
※ PATHへの追加は手動で行う必要があります。
Go 1.26 以降を前提にしています。
go install github.com/harumiWeb/eitango/cmd/eitango@latestgo install で導入した build でも、eitango version は埋め込まれた module version を表示します。
eitangoモード指定で起動することもできます。
eitango play
eitango play write
eitango review --focus-mode
eitango review write
eitango stats
eitango version
eitango doctoreitango learn は後方互換の alias として残っています。新しい案内では eitango play を使います。
学習データは初回起動時にローカル DB へ初期化されます。デフォルトでは組み込みの assets/words_core.jsonl を seed として使用します。
- 対応 OS は Windows / macOS / Linux です
- 音声再生の初期対応 OS は macOS / Windows です
- Linux では音声再生なしで、学習・復習・統計・辞書管理などの主要機能を利用できます
- 対応範囲やサポート方針は、将来の release で変わる可能性があります
- 脆弱性報告の手順と対応バージョン方針は SECURITY.md を参照してください
- 主要画面では、最小幅以上なら同じ layout が panel の枠を保ったまま terminal 幅へ連続的に追従して縮みます
- 収まらない key guide や keymap 表示などの単一行 UI は
...付きで省略します - さらに狭い幅では、レイアウト崩れを避けるため通常 UI の代わりに専用メッセージを表示します
- ターミナルの横幅を広げると、自動で通常表示へ戻ります
- 分割ペインや SSH 先などで表示が簡略化された場合は、まず横幅を広げてください
write_mode_difficulty = "basic"が既定値ですbasicでは Learn + Write の新規枠に、Choice で一度出題された語だけを使いますhardでは従来どおり、Choice 未出題語も Write に出しますbasicでは候補が少ないと session の新規問題数が減ることがあります
config.toml では次の key で切り替えます。
write_mode_difficulty = "basic"theme_mode = "default"は既定の配色ですtheme_mode = "no_color"は色指定を外し、terminal の既定色で表示しますtheme_mode = "neon"はライトグリーン基調の高コントラスト preset ですtheme_mode = "custom"はtheme_paletteで role ごとの色を上書きします- ホーム設定 overlay では theme mode だけを切り替え、
customの詳細色はconfig.tomlで編集します
最小設定は次です。
theme_mode = "no_color"カスタムテーマは次です。
theme_mode = "custom"
[theme_palette]
accent = "#00D7FF"
success = "#00FF87"
danger = "#FF5F5F"
muted = "#B2B2B2"
border = "#FFFFFF"- 初期対応 OS は macOS / Windows です。Linux では音声 backend を持たず、学習機能だけそのまま使えます
Ctrl+Pで現在の単語を手動再生できますShift+Tabで現在セッションだけの自動再生 ON/OFF を切り替えできます- 自動再生は session 開始直後と次の問題表示直後に動きます
config.toml では次の key を使います。
audio_enabled = true
audio_autoplay = false
audio_voice = "Samantha"audio_voiceを空文字または未指定にすると、既定の英語 voice を自動選択します- ホーム設定 overlay の
Local voice行から、利用可能な local voice を切り替えられます audio_enabled = falseでも voice 候補の確認と保存はできます- 保存済み voice が見つからない場合は、自動選択へ fallback して音声再生を継続します
- ホーム設定の
キーバインド行から editor を開けます - editor では context ごとに add / clear / reset / save を行えます
- keymap を保存すると、settings overlay 上でまだ未保存だった設定変更も一緒に保存されます
- 保存後は help と各画面の key guide にその場で反映されます
quiz.writeでは answer 入力と衝突する英字 1 文字 key は保存できません- record 中の cancel は
Ctrl+Gです。Esc自体も editor から割り当てできます
config.toml では [keymap] を使います。
[keymap]
version = 1
[keymap.home]
toggle_answer_mode = ["x"]
[keymap.quiz.write]
hint = ["tab"]
skip = ["ctrl+s"]
confirm = ["enter"]
write_quit = ["esc"]- Windows:
%AppData%\\eitango-cli\\ - macOS:
~/Library/Application Support/eitango-cli/ - Linux:
~/.local/share/eitango-cli/
次のファイルが作成されます。
user.dbconfig.tomllogs/update-check.json
保存先は EITANGO_DATA_DIR で上書きできます。
通常の学習データはローカル SQLite に保存され、日常的な学習フローはオフラインで完結します。ネットワーク通信が発生するのは主に更新チェックで、eitango / eitango play / eitango review / eitango version が GitHub Releases の latest release 情報を確認するときです。
- 更新チェックは補助機能であり、学習開始や回答処理の必須要件ではありません
- 取得するのは主に最新 release の version / URL などの更新案内に必要な情報です
- ホーム画面の通知は既定では起動ごとに非同期で latest release を再確認し、ホーム設定または
config.tomlのstartup_update_checkで ON/OFF できます - 初回の成功確認では通知せず、次回以降の起動で差分があればホーム画面に軽く表示します
update-check.jsonには直前の successful check 結果を保存し、タイムアウトやオフライン時の fallback に使いますeitango versionは現在の build info に加えて latest release URL も表示します- タイムアウトやオフライン時は黙ってスキップし、学習体験を止めません
EITANGO_DISABLE_UPDATE_CHECK=1で完全に無効化できます
更新自体は自動化していません。必要に応じて GitHub Releases の最新成果物を取り直すか、Go インストールなら次を再実行してください。
go install github.com/harumiWeb/eitango/cmd/eitango@latestcurl | sh で入れた場合も self-update はしません。最新版へ上げるときは installer を再実行してください。
curl -fsSL https://raw.githubusercontent.com/harumiWeb/eitango/main/install.sh | sh| コマンド | 役割 |
|---|---|
eitango version |
現在の build info と latest release を表示 |
eitango play [choice write] [--focus-mode] [--questions N] |
通常学習セッションを開始 |
eitango review [choice write] [--focus-mode] [--questions N] [--restart] |
復習を開始。due が 0 件なら SRS 非反映の reviewed-only ランダム復習へ入れる |
eitango stats |
統計を表示 |
eitango --license |
同梱ライセンスと notice を表示 |
eitango doctor |
DB / 辞書の診断 |
eitango validate --embedded-core |
組み込み core 辞書を検証 |
eitango validate --file words.csv --format csv --kind import |
import 用辞書を検証 |
eitango import --file words.jsonl --format jsonl --source my-pack |
外部辞書を取り込み |
eitango export wrong-words --output wrong.csv |
苦手語を CSV 出力 |
eitango export progress --output progress.json |
進捗を JSON 出力 |
eitango reset --progress / eitango reset --reseed |
学習履歴の初期化 / 組み込み core 再投入 |
TUI のホーム画面では、Tab で choice / write を切り替え、Enter で play、r で review を開始します。write は日本語の意味を見て英単語を入力するモードで、Tab で段階ヒント、Ctrl+S でスキップできます。
quiz / feedback では Ctrl+P で現在語を再生し、Shift+Tab でそのセッションだけの自動再生を切り替えられます。write では答えを露出しすぎないため、音声再生と自動再生は正解/不正解の feedback 画面でのみ有効です。Write 難易度と音声既定値はホーム設定または config.toml で管理し、CLI flag での一時 override はありません。
eitango のコードは Apache License 2.0 です。ただし、配布物に含まれる assets/words_core.jsonl はコードとは別に出所を持つ語彙データであり、Apache-2.0 だけで完結するものとして扱っていません。
このリポジトリでは、bundled core の語彙由来を Leipzig Corpora Collection English News 2024 1M word list と Japanese WordNet (wnjpn.db) に限定しています。
assets/words_core.jsonlはプロジェクトが編集・整備した core 語彙データですmeaning_jaは Japanese WordNet を参照して整備した日本語意味データですfrequency_rankは Leipzig Corpora Collection English News 2024 1M word list 由来の bundled-core ranking ですlevelはcore-1からcore-4の内部バケットであり、上流データセットのラベルではありません- 語彙生成スクリプトはローカル入力の
tmp/eng_news_2024_1M-words.txtとtmp/wnjpn.dbを参照します - raw の Leipzig / WordNet 入力は配布物に含めず、生成条件は
scripts/vocab/source_manifest.jsonに固定します - Japanese WordNet を直接・間接に使った成果公開や再配布では、
third_party/licenses/Japanese-WordNet.txtにまとめた上流推奨のクレジット文言・リンク・ライセンス案内を保持してください
公開成果物での Japanese WordNet 帰属表示は、少なくとも次のような文言を含める想定です(ローカル入力を別版に差し替えた場合は版番号も合わせて更新してください)。
Japanese Wordnet (v1.1) © 2009-2011 NICT, 2012-2015 Francis Bond and 2016-2024 Francis Bond, Takayuki Kuribayashi
https://bond-lab.github.io/wnja/index.en.html
日本語ワードネット(1.1版)© 2009-2011 NICT, 2012-2015 Francis Bond and 2016-2024 Francis Bond, Takayuki Kuribayashi
https://bond-lab.github.io/wnja/index.ja.html
再配布や派生利用の前に、必ず次を確認してください。
特に words_core.jsonl を含む再配布物では、第三者データ由来の注意書きに加えて、Japanese WordNet の帰属表示案内も保持する前提で扱ってください。
アプリ本体は Go だけで動作しますが、辞書生成パイプラインには Python 3.11 以降を使います。
uv sync
go test ./...
go build ./...
shellcheck install.sh
golangci-lint run
go run ./cmd/eitango --helpコミット前の補助として lefthook の pre-commit では goimports -w cmd internal assets、golangci-lint run、go test ./... を自動実行します。hook は開発体験向上のための補助で、CI では golangci-lint run、shellcheck install.sh、go test ./...、go build ./... を必須チェックとして扱います。
CI の lint が失敗したときは、同じコマンドをローカルで順に再実行すると原因を切り分けやすくなります。
辞書生成スクリプトは scripts/vocab/ にあり、tmp/eng_news_2024_1M-words.txt と tmp/wnjpn.db のようなローカル入力を前提とします。これらはエンドユーザーの通常利用には不要です。
- アプリコード: Apache License 2.0
- 第三者ソフトウェアとデータ: THIRD_PARTY_NOTICES.md
- 参照用ライセンス原文とデータ出所メモ:
third_party/licenses/





