mcpField
M
monorepo

monorepo

github.com/epicenterhq開発4.8k79 回インストール2 週間前に更新
リポジトリ

monorepo について

monorepo のスクリプト規約、ローカル開発手順、パッケージ構成を説明するリポジトリスキルです。各パッケージで一貫した作業を行うコントリビューター向けです。

主な機能

  1. 01フォーマットと lint のスクリプト
  2. 02型チェックとテストコマンド
  3. 03ローカル開発スクリプトの規約
  4. 04新規パッケージの構成ガイド

活用シーン

  1. 01CI 前にチェックを実行
  2. 02リポジトリルートからアプリを起動
  3. 03packages/ にパッケージを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/epicenterhq/epicenter --skill monorepo

インストール後、Claude Code で/monorepoを入力して読み込まれたか確認します。

詳細

スクリプトコマンド

モノレポでは、一貫したスクリプトの命名規則を使用しています。

コマンド

コマンド目的使用するタイミング
bun formatフォーマットを修正します(biome)開発
bun format:checkフォーマットを確認しますCI
bun lintlint の問題を修正します(biome)開発
bun lint:checklint の問題を確認しますCI
bun typecheck型チェック(tsc、svelte-check、astro check)両方
bun test単体テストを実行します(*.test.ts のみ)両方
bun benchベンチマークを実行します(*.bench.ts。レポートを出力し、アサーションは行いません)手動

規則

  • サフィックスなし = 修正(ファイルを変更します)
  • :check サフィックス = チェックのみ(CI 用。変更は行いません)
  • typecheck 単体 = 型チェック(別の用途であり、自動修正できません)
  • test は *.test.ts のみを実行し、bench は *.bench.ts のみを実行します。ファイルはどちらか一方であり、両方にはなりません。ベンチマークはレポートを出力し、テストはアサーションを行います。

開発スクリプト

アプリはアプリのディレクトリに移動せず、リポジトリのルートから起動してください。ルートの bun dev:<app> は、アプリに必要なすべてのプロセスを実行します。ホスト型 API と通信するアプリ(honeycrisp、vocab、whispering、 および api dashboard)では、bun run --filter を使って localhost:8787 で @epicenter/api も起動します。ルートの bun dev:<app>:ui は、その分割がある場合にアプリのフロントエンドのみを実行します。Tauri アプリの場合は、パッケージの dev:web に対応します。bun dev:api はバックエンドのみを実行します。Local Books、Local Mail、 Super Chat には、それぞれの README に記載された独自の複数プロセスの起動手順があります。 これらにはルートの dev:* ターゲットはありません。

単一のパッケージ内では、次の規則に従います。

Tauri を使わないアプリでは、基盤となるツールを直接実行する単一の dev スクリプトを使用します (vite dev、astro dev、wrangler dev)。Tauri デスクトップアプリ (honeycrisp、whispering、matter)には、2 つの開発環境があり、明示的に名前を付けています。 dev はデスクトップシェルを起動し(dev:desktop のエイリアスです)、dev:web は Vite のみを実行します。各アプリの tauri.conf.json がこれを beforeDevCommand として呼び出します。サフィックスの規則は、主にデータベースコマンドに適用されます。

スクリプト意味
devデフォルトのローカルワークフローです。アプリのシークレット(API キーなど)を使うために Infisical へのログインが必要な場合がありますが、実行時に通信するのは常にローカルのインフラストラクチャのみです。
dev:webTauri アプリの場合、デスクトップシェルを起動せずに Vite 開発サーバーのみを実行します。tauri.conf.json から beforeDevCommand として呼び出されます。
dev:desktopTauri アプリの場合、ネイティブデスクトップアプリを起動します(tauri dev)。dev はこれのエイリアスです。
db:*:localローカルの Postgres に対して実行します。Infisical へのログインなしで動作します。
db:*:remoteinfisical run --env=prod をラップして実行します。本番データを扱うため、管理者として慎重に扱ってください。

dev:remote はありません。本番データにアクセスするのは :remote の db スクリプトと deploy に限られ、開発サーバーからアクセスすることはありません。

コード変更の完了後

型チェックを実行して検証します。

bun typecheck

これは bun run --filter '*' typecheck を実行し、各パッケージの typecheck スクリプト(例:tsc --noEmit、svelte-check)を実行します。

新しいパッケージのひな形

packages/ に新しいパッケージを作成する場合は、この構成に正確に従ってください。

package.json
{
  "name": "@epicenter/<package-name>",
  "version": "0.0.1",
  "exports": {
    ".": "./src/index.ts"
  },
  "license": "AGPL-3.0-or-later",
  "scripts": {
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {},
  "devDependencies": {
    "@types/bun": "catalog:",
    "typescript": "catalog:"
  }
}

主な規約:

  • exports のみを使用し、main/types は使用しません。exports が存在する場合、最新のリゾルバーは main/types を無視します。エントリーポイントは ./src/index.ts です。ビルド手順はなく、利用側はソースを直接インポートします。
  • 内部依存関係には "workspace:*" を使用します(例:"@epicenter/workspace": "workspace:*")。
  • ルートの package.json カタログで管理される共有バージョンには "catalog:" を使用します。
  • 利用側でもインストールする必要があるパッケージには peerDependencies を使用します(例:yjs)。
  • license:デフォルトは AGPL-3.0-or-later です(Epicenter が提供または実行するすべてのもの)。MIT を使用するのは、サードパーティの開発者が自身のソフトウェアに組み込むことを想定したパッケージ(ツールキット)のみです。docs/licensing/licensing-strategy.md を参照してください。MIT パッケージから AGPL パッケージに到達できる場合、bun run check:licenses は失敗します。
tsconfig.json

末端の設定では、1 つの階層を選び、ベース設定と重複する内容を追加しません。Bun ライブラリの場合:

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "types": ["bun"],
    "noUnusedLocals": true,
    "noUnusedParameters": true
  }
}

Svelte またはブラウザー向けライブラリでは、代わりに ../../tsconfig.dom.json を継承します。8 つすべての末端階層、再宣言してはならない項目の一覧、およびモジュール戦略については、tsconfig スキルを参照してください。

パッケージを作成したら、リポジトリのルートで bun install を実行し、ワークスペースに登録します。

コメント