プログラミング言語を「自分で書いて・実行して・テストに通して」学べる学習用 Web アプリ。 問題を解きながらコードを書いて実行 → 隠しテストケースに全て通れば次へ進める、という演習中心の学習ループを提供します。
- 問題を見ながらブラウザ上のエディタ(Monaco)でコードを書く
- サーバーでコードを実行し、隠しテストケースで自動判定
- 通らなければ何度でも再挑戦、詰まったら解説・解答例を確認
- 言語ごとにコースを用意(v1 は Python から)
- フロントエンド: React + Monaco Editor(
web/) - バックエンド: Go(
api/) - API 設計: API ファースト(TypeSpec → OpenAPI 3.0 → Go / oapi-codegen)(
typespec/) - データベース: PostgreSQL(ドライバ pgx)
- コード実行: Piston(Docker・自己ホスト)
- ツール管理: mise / コマンド実行: go-task
learning_language/
├── api/ # Go バックエンド(層構造: handler / service / repository ...)
├── typespec/ # TypeSpec による API 定義(OpenAPI を生成)
├── web/ # React + Monaco のフロント(開発予定)
├── docs/ # ドキュメント(仕様書 docs/spec.md)
├── infra/ # docker-compose(PostgreSQL + Piston)
├── CLAUDE.md # Claude Code 用のプロジェクト文脈・ルール
└── Taskfile.yml # 開発コマンド集
- mise(go / node / task のバージョン管理)
- Docker(PostgreSQL と Piston をローカルで起動)
mise install # ツールを揃える
task infra:up # PostgreSQL + Piston を起動
task gen # TypeSpec → OpenAPI → Go コード生成
task migrate # DB スキーマ作成
task seed # サンプル問題を投入
task run # バックエンドを起動動作確認:
task check # 提出 API のスモークテスト- API を変えるときは Go を直接書かず、
typespec/main.tspを編集してtask genで再生成します(生成コードは手編集しない)。 - バックエンドは層構造(handler → service → repository、境界は interface)で、依存は外→内の一方向です。
- 詳しい仕様は docs/spec.md、開発ルールは CLAUDE.md を参照してください。
現在はローカルで動くバックエンドの縦スライス(コード提出 → Piston 実行 → 隠しテスト判定)を構築中です。
- バックエンドの縦スライス(Python の1問が通る)
- 問題を増やしてコース化(初級 → 応用)
- React + Monaco のフロント
- 言語追加(JavaScript / TypeScript → C++ → C# …)
- 公開(認証・進捗のクラウド保存・デプロイ)