Earthworm
接続詞を使って文を組み立て、英語を学ぶ OSS(cuixueshe/earthworm)
何をするアプリか
Earthworm は、接続詞(conjunctions)を用いて文を組み立てる体験で英語学習を補助するアプリケーション。クライアントは Nuxt、API は NestJS。データ層に Drizzle ORM と PostgreSQL、キャッシュに Redis。認証まわりは Logto(初期データは logto_db_init_data.zip から復元)を想定した構成。
Nuxtapps/client
Nestapps/api
pnpmworkspace
Drizzle@earthworm/db
前提
| 項目 | 内容 |
|---|---|
| Node.js | v20 以上(.node-version 記載版の利用推奨) |
| パッケージマネージャ | pnpm 8+(root の package.json では pnpm 9 系を指定) |
| DB / キャッシュ | Postgres 14+、Redis 5+(docker compose で起動可能) |
| Docker | ローカルで DB/Redis/Logto を立てる前提 |
ざっくり依存
ルート pnpm-workspace.yaml により apps/* と packages/* を束ねる。API は @earthworm/schema / @earthworm/db を参照し、クライアントは主に API とやり取り。コース JSON は xingrong-courses 経由で DB に流し込む。
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— スキーマ定義とマイグレーション
手順
- 依存取得:
pnpm install - 環境:
apps/api/.env.example→apps/api/.env、同様にapps/client。 - Logto:
logto_db_init_data.zipを.volumes/に展開(README 記載の管理 URL/初期ユーザーあり)。 pnpm docker:start(Postgres / Redis 等)pnpm db:init— 少し待ってから失敗時は再実行。- 初回のみ:
pnpm db:uploadでコース投入。 - 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)。
役割
| 操作 | スクリプト | 意味 |
|---|---|---|
| スキーマビルド + DB 反映 | pnpm db:init | Drizzle でスキーマを push |
| コース投入(初期化時のみ想定) | pnpm db:upload | xingrong-courses パッケージ経由 |
| GUI で DB 確認 | pnpm db:studio | Drizzle Studio |
方針
リポジトリ推奨どおり、コミット前に 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。
公式
- GitHub: cuixueshe/earthworm
- ライセンス: リポジトリ同梱の
LICENSE(本文量が多いため要約は省略)