terminal-quest
v1.3.0
Published
ストーリー駆動型ターミナルコマンド学習CLI - Learn terminal commands through interactive stories
Maintainers
Readme
Terminal Quest
ストーリーを進めながらターミナルコマンドを学べるインタラクティブCLIアプリ。
╔══════════════════════════════════════════╗
║ ║
║ ◆ TERMINAL QUEST ◆ ║
║ ~ターミナルの冒険~ ║
║ ║
╚══════════════════════════════════════════╝はじめかた
Node.js(v18以上)がインストールされていれば、すぐに遊べます。
npx terminal-questグローバルインストールする場合:
npm install -g terminal-quest
terminal-quest動作環境
- macOS / Linux / Windows(WSL)
- Node.js v18 以上
- 外部依存なし(Docker不要、GUI不要、ネットワーク不要)
純粋なnpmパッケージとして動作するTUIアプリです。Ink(React for CLI)で構築されており、ターミナルさえあればどこでも動きます。
特徴
- 安全な仮想環境 - すべてのコマンドはインメモリの仮想ファイルシステム上で動作。実際のファイルには一切触れません
- ストーリー駆動 - 物語を進めながら自然にコマンドを習得
- 3つのコース - 小学生向け・はじめて・エンジニアの3コースで、レベルに合わせた学習体験
- 結果ベースの判定 - コマンドの文字列ではなく実行結果で目標達成を判定。
grep foo fileでもcat file | grep fooでも正解になります - 到達目標 - 各ミッションに「何ができるようになるか」を明示
- 段階的ヒント - 困ったら3段階(方向性→コマンド候補→ほぼ答え)のヒントで学習をサポート
- 間違いフィードバック - タイプミスには類似コマンドを提案、間違ったコマンドにはミッション固有のガイダンスを表示
- ふりかえり問題 - ミッション完了後に4択クイズで理解度チェック
- Tab補完 - コマンド名やファイルパスをTabキーで補完
- 達成バッジ - 学習の進捗に応じてバッジを獲得
- やりなおし機能 - 進捗のあるストーリーを「はじめから」やりなおせる
コース一覧
全コースで 21コマンド を10ミッションで学べます。コースごとにストーリーとテーマが異なります。
✨ 小学生向けコース
冒険の世界を舞台に、はじめてのコマンドを楽しく学びます。ひらがな中心のガイダンスで小学生でも安心。
たからさがし大冒険(10ミッション)
| # | ミッション | 学べるコマンド |
|---|-----------|--------------|
| 1 | 冒険のはじまり | pwd ls |
| 2 | 森を冒険しよう | cd cat |
| 3 | 秘密基地を作ろう | mkdir touch |
| 4 | 宝物を集めよう | cp mv |
| 5 | トラップを片付けよう | rm find |
| 6 | 暗号を解読しよう | grep echo |
| 7 | 古い書物を読もう | head tail wc |
| 8 | 仲間リストを整理しよう | sort uniq cut |
| 9 | 封印を解こう | chmod |
| 10 | 冒険の記録をつけよう | git |
💻 はじめてコース
自分のパソコンを探検しながら、基本操作を身につけます。
はじめてのパソコン冒険(10ミッション)
| # | ミッション | 学べるコマンド |
|---|-----------|--------------|
| 1 | ここはどこ? | pwd ls |
| 2 | フォルダの中を見て回ろう | cd cat |
| 3 | 写真アルバムを作ろう | mkdir touch |
| 4 | ファイルを整理しよう | cp mv |
| 5 | いらないファイルを片付けよう | rm find |
| 6 | 日記を書こう | echo grep |
| 7 | 長いレポートを確認しよう | head tail wc |
| 8 | 連絡先を整理しよう | sort uniq cut |
| 9 | 共有ファイルの設定 | chmod |
| 10 | 変更履歴を管理しよう | git |
🖥️ エンジニアコース
サーバー管理やGit操作など、実践的なスキルを7つのストーリーで段階的に習得します。
| # | ストーリー | 学べるコマンド |
|---|-----------|--------------|
| 1 | 初めてのサーバー管理 | pwd ls cd cat grep cp echo |
| 2 | 散らかったプロジェクト | mkdir mv rm find touch wc |
| 3 | ログ探偵 | head tail sort uniq grep応用 |
| 4 | デプロイの日 | chmod cp -r rm -rf mkdir -p |
| 5 | Git大事件 | git status log diff stash branch merge |
| 6 | パイプの達人 | パイプ(\|) cut 複合コマンド |
| 7 | 危険なコマンド | rm安全運用 バックアップ find→削除 |
学べるコマンド一覧
pwd ls cd cat mkdir touch cp mv rm find grep echo head tail wc sort uniq cut chmod git + パイプ(|)・リダイレクト(> >>)
操作方法
| キー | 操作 |
|------|------|
| Tab | コマンド名・ファイルパスを補完 |
| ↑ ↓ | コマンド履歴 |
| Ctrl+H | ヒントを表示 |
| Enter | コマンド実行 / 選択決定 |
| Esc | 前の画面に戻る |
ゲーム内コマンド:
help 使えるコマンド一覧
hint ヒントを表示
objectives 現在の目標を確認
cmds このミッションの新コマンドを確認
man <cmd> コマンドのマニュアルアーキテクチャ
src/
├── engine/ コアエンジン(UI非依存)
│ ├── VirtualFS インメモリ仮想ファイルシステム
│ ├── CommandHandler 23コマンド実装(パイプ・リダイレクト対応)
│ ├── MissionEngine 結果ベースの目標判定
│ ├── HintEngine 3段階ヒント管理
│ ├── CommandFeedback タイプミス検出・ミッション固有フィードバック
│ └── TabCompletion コマンド名・パス補完
├── data/stories/ ストーリーデータ(コース別、全9ストーリー)
├── screens/ 7画面コンポーネント(Ink/React)
├── components/ 再利用UIコンポーネント
└── state/ ゲーム状態管理(~/.terminal-quest/progress.json に永続化)- 仮想FS上で完結 — 実際のファイルシステムやシェルは一切使用しません
- 結果ベースの判定 — ObjectiveCheck がコマンドの出力・FS状態を検査し、解法の自由度を確保
- コース別UX — kids コースはひらがな中心のガイダンスとエラーメッセージ、engineer コースは実務寄りの表現
開発
git clone https://github.com/nasuda/terminal-quest.git
cd terminal-quest
npm install
npm run dev # 開発実行
npm test # テスト実行(184件)
npm run build # ビルド技術スタック
- TypeScript (ESM) + Ink 5 (React for CLI)
- Vitest(テスト)
- npm配布(
bin/terminal-quest.js→dist/index.js直接import、tsx不要)
ライセンス
MIT
