Opus.88
ピアノ初心者 × AI/ツール作りを temptation bundling(抱き合わせ)した趣味プロジェクト。狙いは 上達速度ではなく 「辞めない × 楽しい」 の最大化。名は Claude(Opus) × 作品番号 Op.88 × ピアノ88鍵。
- 状態:初期実装完了(2026-06-17, Dispatch経由)。正典は repo 直下
opus-88/DESIGN.md。 - 実装済み:§5.5 生成素材 / §5.3 間隔反復(FSRS) / §5.2 練習ジャーナル の3機能。
- 起動方法:正典=コンテナ内で
python main.py(opus-88/backend)→http://localhost:8000。start.ps1は非正典の Windows ホスト用例外経路。※ Ollama (ollama serve) を先に起動(gemma4:12b 必須)。 - 設定(2026-06-18):
load_dotenv(override=False)。優先順位 env >.env(gitignore) > code default。 ground truth は code default(gemma4:12b/172.23.32.1)と.env.example。起動時 resolved 行を出力。
実装構成(2026-06-17 時点)
| ファイル | 役割 |
|---|---|
opus-88/backend/main.py | FastAPI バックエンド(ABC生成・ジャーナル・FSRS) |
opus-88/web/index.html | 単一HTML フロントエンド(abcjs 組み込み) |
opus-88/backend/data/cards.json | FSRS カードデータ(自動生成) |
opus-88/backend/data/journal.md | 練習ジャーナル(追記式) |
opus-88/start.ps1 | Windows ホスト用起動スクリプト |
3タブ構成
- 生成タブ:調・種類(スケール/アルペジオ/メロディ/5指練習)・難易度・小節数を指定し、gemma4:12b → ABC記法 → abcjs で楽譜表示+Web Audio 再生。
- ジャーナルタブ:練習メモを Markdown 形式で追記。生成フレーズをそのまま保存するボタンあり。
- 復習タブ:曲名・パッセージを登録し FSRS 間隔反復(Again/Hard/Good/Easy の4択)で管理。
技術スタック
- バックエンド:FastAPI + httpx + fsrs + pydantic + uvicorn
- フロントエンド:Vanilla JS + abcjs(楽譜表示・Web Audio 再生)
- Ollama 接続:WSL2 → Windows ホスト IP
172.23.32.1:11434(start.ps1 ではホスト側なのでlocalhost:11434)
展望(棚・未着手)
- ロガー → アンビエント可視化(Web MIDI / React・Three.js)
- 練習ジャーナル RAG(gemini-rag の型を流用)
- 演奏 diff(partitura/music21)
通底原則
純度と制御は気軽に妥協していい。目的(辞めない × 楽しい)だけは妥協しない。 最大の罠は「道具作りが練習を食うこと」=ツールの完成度は成果物にしない(§3)。
status/tagsの正は正典(opus-88/DESIGN.md)。この地図は派生。