Earthworm

接続詞を使って文を組み立て、英語を学ぶ OSS(cuixueshe/earthworm)

1 — 概要

Earthworm は、接続詞(conjunctions)を用いて文を組み立てる体験で英語学習を補助するアプリケーション。クライアントは Nuxt、API は NestJS。データ層に Drizzle ORM と PostgreSQL、キャッシュに Redis。認証まわりは Logto(初期データは logto_db_init_data.zip から復元)を想定した構成。

Nuxtapps/client
Nestapps/api
pnpmworkspace
Drizzle@earthworm/db
2 — 実行要件(README 準拠)
項目内容
Node.jsv20 以上(.node-version 記載版の利用推奨)
パッケージマネージャpnpm 8+(root の package.json では pnpm 9 系を指定)
DB / キャッシュPostgres 14+、Redis 5+(docker compose で起動可能)
Dockerローカルで DB/Redis/Logto を立てる前提
3 — リポジトリ構成

ルート pnpm-workspace.yaml により apps/* と packages/* を束ねる。API は @earthworm/schema / @earthworm/db を参照し、クライアントは主に API とやり取り。コース JSON は xingrong-courses 経由で DB に流し込む。

Monorepo
flowchart TD subgraph apps["apps/"] CL["client (Nuxt)"] API["api (NestJS)"] end subgraph packages["packages/"] DB["@earthworm/db"] SCH["@earthworm/schema"] end CL -->|HTTP| API API --> DB API --> SCH DB --> SCH
  • packages/docs — VitePress ドキュメント(pnpm docs:dev)
  • packages/schema / packages/db — スキーマ定義とマイグレーション
4 — ローカル起動の流れ
  1. 依存取得: pnpm install
  2. 環境: apps/api/.env.example → apps/api/.env、同様に apps/client。
  3. Logto: logto_db_init_data.zip を .volumes/ に展開(README 記載の管理 URL/初期ユーザーあり)。
  4. pnpm docker:start(Postgres / Redis 等)
  5. pnpm db:init — 少し待ってから失敗時は再実行。
  6. 初回のみ: pnpm db:upload でコース投入。
  7. API: pnpm dev:serve、別ターミナルでクライアント: pnpm dev:client。
# 例: 圧縮展開(プロジェクトルート)
unzip logto_db_init_data.zip -d .volumes/

# Docker → DB 初期化 → コース(初回のみ)→ 開発
pnpm docker:start
pnpm db:init
pnpm db:upload
pnpm dev:serve
# 別シェル
pnpm dev:client
補足: ルート package.json には db:init の前段で schema:build を走らせるスクリプトが定義されている。DB 接続エラーは .env の有無と接続先を先に確認する(README FAQ)。
5 — DB とコースデータ
操作スクリプト意味
スキーマビルド + DB 反映pnpm db:initDrizzle でスキーマを push
コース投入(初期化時のみ想定)pnpm db:uploadxingrong-courses パッケージ経由
GUI で DB 確認pnpm db:studioDrizzle Studio
6 — テストとドキュメント

リポジトリ推奨どおり、コミット前に pnpm test(API + client)を通す。API 側は Jest、クライアントは Vitest + Cypress。API の E2E/ユニットは apps/api/.env.test と Docker のテスト用 DB/Redis が揃った状態で実行する想定(README 参照)。

# ルート
pnpm test

# フロントのみ(apps/client)
cd apps/client && pnpm test:unit:run
cd apps/client && pnpm test:e2e:run

# バックエンド(apps/api、.env.test 準備後)
cd apps/api && pnpm test:unit
cd apps/api && pnpm test:e2e

VitePress のドキュメントは pnpm docs:dev、本番用ビルドは pnpm build:docs。