モノレポ管理ガイド
このプロジェクトは、Turborepo + Bun Workspacesを使用したモノレポ構造です。このドキュメントでは、モノレポの管理方法について説明します。
モノレポ構造の概要
ワークスペース構成
./├── apps/ # アプリケーション層│ ├── web/ # Remix + Cloudflare Pages│ ├── api/ # Hono + Cloudflare Workers│ ├── admin/ # React + Vite│ └── wiki/ # Astro + Starlight├── packages/ # 共通パッケージ層│ ├── ui/ # Design System│ ├── api/ # API定義統合│ ├── db/ # Database (Prisma + D1)│ └── auth/ # Better-auth共通設定└── tooling/ # 開発ツール設定 ├── storybook/ # Storybook共通設定 ├── config/ # 各種ツールのBase Config ├── biome/ # Biome Base Config ├── tailwind/ # Tailwind Base Config └── tsconfig/ # TypeScript Base ConfigsTurborepo の基本操作
ビルド
# すべてのワークスペースをビルドturbo run build
# 特定のワークスペースのみビルドturbo run build --filter=@portfolio/web
# 依存関係も含めてビルドturbo run build --filter=@portfolio/web...テスト
# すべてのワークスペースのテストを実行turbo run test
# 特定のワークスペースのテストのみ実行turbo run test --filter=@portfolio/web
# 変更されたワークスペースのテストのみ実行turbo run test --filter=...[origin/main]開発サーバー
# すべてのワークスペースの開発サーバーを起動bun run dev
# 特定のワークスペースの開発サーバーのみ起動turbo run dev --filter=@portfolio/webキャッシュの活用
Turborepoは、ビルド結果をキャッシュして高速化します。
# キャッシュをクリアrm -rf .turbo
# キャッシュを無視してビルドturbo run build --force
# キャッシュの状態を確認turbo run build --dry-runBun Workspaces の基本操作
パッケージの追加
# ルートにパッケージを追加bun add package-name
# 特定のワークスペースにパッケージを追加bun add --filter @portfolio/web package-name
# 開発依存関係として追加bun add --dev --filter @portfolio/web package-nameパッケージの削除
# 特定のワークスペースからパッケージを削除bun remove --filter @portfolio/web package-nameワークスペース間の依存関係
ワークスペース間で依存関係を設定する場合、package.json で workspace:* を使用します。
{ "dependencies": { "@portfolio/ui": "workspace:*", "@portfolio/db": "workspace:*" }}パッケージの作成
新しいパッケージの追加
-
ディレクトリの作成
Terminal window mkdir -p packages/new-packagecd packages/new-package -
package.json の作成
{"name": "@portfolio/new-package","version": "0.0.0","private": true,"type": "module","main": "./src/index.ts","types": "./src/index.ts","scripts": {"build": "tsc","test": "vitest run","lint": "biome lint .","fmt": "biome format --write ."},"dependencies": {},"devDependencies": {"@portfolio/biome-config": "workspace:*","@portfolio/tsconfig": "workspace:*","@portfolio/vitest-config": "workspace:*","typescript": "5.9.3"}} -
ルートの package.json に追加
ルートの
package.jsonのworkspacesに新しいパッケージを追加します。{"workspaces": ["apps/*","packages/*","tooling/*"]} -
依存関係のインストール
Terminal window bun install
パッケージの検索
パッケージの場所を確認
# パッケージの場所を検索turbo run where @portfolio/web
# または、bunを使用bun pm ls | grep @portfolio/web依存関係の管理
依存関係の確認
# すべての依存関係を確認bun pm ls
# 特定のパッケージの依存関係を確認bun pm ls --filter @portfolio/web
# 依存関係のバージョンを確認bun pm outdated依存関係の更新
# すべての依存関係を更新bun update
# 特定のパッケージを更新bun update --filter @portfolio/web package-name
# Renovateを使用した自動更新# .github/renovate.json を参照ビルドパイプラインの設定
turbo.json の設定
turbo.json でビルドパイプラインを定義します。
{ "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**", "build/**"] }, "test": { "dependsOn": ["build"], "outputs": [] }, "lint": { "outputs": [] }, "dev": { "cache": false, "persistent": true } }}パイプラインの依存関係
dependsOn: ["^build"]: 依存パッケージのビルドが完了してから実行dependsOn: ["build"]: 同じワークスペースのビルドが完了してから実行cache: false: キャッシュを無効化persistent: true: 長時間実行されるタスク(開発サーバーなど)
ワークスペース間のインポート
パスエイリアスの設定
各ワークスペースで、パスエイリアスを設定できます。
{ "compilerOptions": { "paths": { "~/*": ["./app/*"], "~/shared/*": ["./app/shared/*"] } }}ワークスペースパッケージのインポート
import { Button } from "@portfolio/ui";import { createPrismaClient } from "@portfolio/db";コード品質ツールの統合
Biome
Biomeは、フォーマットとリントを統合したツールです。
# すべてのワークスペースをフォーマットturbo run fmt
# 特定のワークスペースのみフォーマットturbo run fmt --filter=@portfolio/web
# リントチェックturbo run lintTypeScript
# すべてのワークスペースの型チェックturbo run typecheck
# 特定のワークスペースのみ型チェックturbo run typecheck --filter=@portfolio/webデバッグ
ビルドのデバッグ
# 詳細なログを出力turbo run build --verbose
# ビルドグラフを表示turbo run build --graph
# 実行されるタスクを確認(実際には実行しない)turbo run build --dry-run依存関係のデバッグ
# 依存関係ツリーを表示bun pm ls --depth=3
# 循環依存を検出bun pm ls --cyclesパフォーマンス最適化
Turborepoキャッシュの活用
Turborepoのキャッシュを最大限に活用します。
# リモートキャッシュの設定(オプション)# Vercelやその他のサービスを使用
# キャッシュの状態を確認turbo run build --dry-run並列実行
Turborepoは、依存関係に基づいて並列実行を最適化します。
{ "pipeline": { "build": { "dependsOn": ["^build"] } }}よくある問題
ワークスペースが見つからない
# 依存関係を再インストールbun install
# ワークスペースの設定を確認cat package.json | grep workspacesビルドが失敗する
# キャッシュをクリアrm -rf .turbo
# 依存関係を再インストールrm -rf node_modulesbun install
# 再ビルドturbo run build循環依存
# 循環依存を検出bun pm ls --cycles
# 依存関係を見直す# 必要に応じて、依存関係の構造を変更