モールス信号学習支援・分析システム
モールス信号の習得を支援する、学習進捗管理および技能分析ツールです。
🔗 Repository: https://github.com/hiroshi131206/morse-learning-system
本アプリは、モールス信号の習得を目指すユーザーを対象とした、学習進捗管理および技能分析ツールです。単なる符号の変換機能にとどまらず、練習結果をデータベース化して自身の苦手傾向を論理的に分析できる仕組みを提供します。
モールス信号のような特殊な技能習得において、上達の妨げとなるのは以下の点です:
- ❌ どの符号が苦手か客観視しにくい
- ❌ どの速度域でミスが増えるか把握できない
- ❌ 漠然と練習するため効率が悪い
本アプリは、日々の練習結果を詳細に記録・集計することで、効率的な反復学習を実現します。
和文・欧文のモールス符号および略符号をSQLiteで管理し、文字と符号の双方向検索を可能にします。
- 和文符号(イロハ48文字)
- 欧文符号(A-Z, 0-9)
- 略符号(SOS, CQ, TNX等)
練習の実施日時、正解率、および符号ごとの応答速度をミリ秒単位でSQLiteに保存します。
- セッション管理
- 設定速度(WPM)記録
- 正解/不正解判定
- 応答時間計測
過去の練習ログをSQLで集計し、正解率が低い符号や、応答に時間がかかっている符号をランキング形式で表示します。
- 苦手符号TOP10
- 速度別の正解率グラフ
- 進捗トレンド分析
- FastAPI 0.109+: 高速なPythonフレームワーク
- SQLite3: 軽量データベース(オフライン動作)
- SQLAlchemy 2.0: ORM
- Pydantic: バリデーション
- pytest: テストフレームワーク
- React 18: UIフレームワーク
- TypeScript 5: 型安全
- Material-UI (MUI) v5: コンポーネントライブラリ
- React Query (TanStack Query): データフェッチング
- Chart.js / Recharts: データ可視化
- Vite: ビルドツール
- Docker + Docker Compose: コンテナ化
- Nginx: リバースプロキシ(本番環境)
- Docker & Docker Compose
- Node.js 16+
- Python 3.9+
- pip
Windows:
# リポジトリをクローン
git clone https://github.com/YOUR_USERNAME/morse-learning-system.git
cd morse-learning-system
# 起動スクリプトを実行
start.batMac/Linux:
# リポジトリをクローン
git clone https://github.com/YOUR_USERNAME/morse-learning-system.git
cd morse-learning-system
# 起動スクリプトに実行権限を付与
chmod +x start.sh
# 起動スクリプトを実行
./start.sh手動で起動:
# 1. バックエンドのセットアップと起動
cd backend
pip install -r requirements.txt
python -m uvicorn app.main:app --host 0.0.0.0 --port 8001 --reload
# 2. 新しいターミナルを開いてフロントエンドのセットアップと起動
cd frontend
npm install
npm run devアクセス:
- フロントエンド: http://localhost:5173
- バックエンドAPI: http://localhost:8001
- APIドキュメント: http://localhost:8001/docs
# リポジトリをクローン
git clone https://github.com/YOUR_USERNAME/morse-learning-system.git
cd morse-learning-system
# Dockerで起動
docker-compose up -d
# ブラウザで開く
open http://localhost:3000 # Frontend
open http://localhost:8000/docs # API Docs- トップページから「符号辞書」を選択
- 文字または符号パターンで検索
- 結果から詳細を確認
- 「トレーニング」を選択
- 速度(WPM)を設定
- 練習開始
- 符号を聞いて文字を入力
- 結果を記録
- 「分析」を選択
- 苦手符号ランキングを確認
- 進捗グラフで成長を実感
| カラム | 型 | 説明 |
|---|---|---|
| id | INTEGER (PK) | 符号ID |
| character | TEXT (UNIQUE) | 文字 (例: 'A', 'イ') |
| code_pattern | TEXT | 符号パターン (例: '・ー') |
| category | TEXT | カテゴリ (和文/欧文/略符号) |
| created_at | TIMESTAMP | 作成日時 |
| カラム | 型 | 説明 |
|---|---|---|
| id | INTEGER (PK) | ログID |
| code_id | INTEGER (FK) | 符号ID |
| session_id | TEXT | セッションID |
| is_correct | BOOLEAN | 正解/不正解 |
| response_time_ms | INTEGER | 応答時間(ミリ秒) |
| speed_wpm | INTEGER | 設定速度(WPM) |
| practiced_at | TIMESTAMP | 実施日時 |
- 1NF: すべてのカラムが原子値
- 2NF: 部分関数従属性の排除
- 3NF: 推移的関数従属性の排除
cd backend
# 仮想環境作成
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 依存関係インストール
pip install -r requirements.txt
# 開発サーバー起動
uvicorn app.main:app --reload
# テスト実行
pytest
# リント
ruff check .
# 型チェック
mypy appcd frontend
# 依存関係インストール
npm install
# 開発サーバー起動
npm run dev
# テスト実行
npm test
# リント
npm run lint
# ビルド
npm run build単なる○×の記録ではなく、応答速度(反応時間)を保持することで、無意識に反応できるレベルまで習熟しているかを数値で判定します。
SQLの集計結果に基づき、苦手な符号のみを重点的に出題する動的な問題作成機能を備えます。
SQLiteを採用することで、外部サーバーを必要とせず、端末内ですべての分析処理が完結する高速な動作環境を実現します。
MIT License
このプロジェクトは Claude Universal Config を使用して開発されています。