Loading...
Loading...
Turborepo と pnpm でモノレポを構成・運用する。apps と packages の分離、workspace:* による内部依存、共有 tsconfig、責務パッケージ、turbo.json のタスク定義とキャッシュ、pnpm コマンドによる package.json 生成、Cargo や Go など非 JavaScript プロジェクトの取り込み。パッケージの追加、turbo.json や pnpm-workspace.yaml や tsconfig の編集、apps や packages の構成変更を行うときに使う。
npx skill4agent add philtzjp/skills turborepopnpm exec turbomy-monorepo/
pnpm-workspace.yaml
turbo.json
package.json
apps/ デプロイ可能なアプリケーション
packages/ 共有ライブラリと設定@<org>/"private": trueworkspace:*@<org>/logworkspace:*pnpm init # package.json を生成する
pnpm create <template> # フレームワークの scaffolder を使うpnpm add -D -w turbo typescript # ルートの devDependency
pnpm add --filter @<org>/dashboard zod # 特定パッケージの外部依存
pnpm add --filter @<org>/dashboard --workspace @<org>/log # 内部依存を workspace:* で解決
pnpm update --filter @<org>/dashboard
pnpm remove --filter @<org>/dashboard zod--filter--workspace# ルートワークスペース
mkdir my-monorepo && cd my-monorepo
pnpm init
# pnpm-workspace.yaml に apps/* と packages/* を定義する
pnpm add -D -w turbo typescript
# 責務パッケージ
mkdir -p packages/log
(cd packages/log && pnpm init)
# name を @<org>/log にし、private と exports を設定する
# アプリ
pnpm create next-app@latest apps/dashboard
pnpm add --filter @<org>/dashboard --workspace @<org>/log{
"$schema": "https://turborepo.dev/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"lint": {},
"test": { "dependsOn": ["^build"] },
"dev": { "cache": false, "persistent": true }
}
}^buildcache: falsepersistent: true{
"name": "@<org>/engine",
"private": true,
"scripts": {
"build": "cargo build --release",
"test": "cargo test",
"lint": "cargo clippy -- -D warnings"
}
}{
"tasks": {
"build": {
"inputs": ["src/**", "Cargo.toml", "Cargo.lock"],
"outputs": ["target/release/**"]
}
}
}{
"futureFlags": { "experimentalGoWorkspaces": true }
}workspace:*