Open11
monorepoについてのメモ
ここから探してみる
紹介されているディレクトリ構成
.
├── packages/
│ ├── lib-a/
│ | ├── src/
│ | | └──index.ts
│ │ └── package.json
│ └── lib-b/
│ ├── src/
│ | └──index.ts
│ └── package.json
├── package.json
├── pnpm-workspace.yaml
└── turbo.json
npmを利用しないように制限するTipsも...!
"engines": {
+ "npm": "use pnpm please!",
+ "yarn": "use pnpm please!",
"pnpm": ">=7.19.0"
}
packages/以下をworkspaceとしている。
workspaceを設定した後にルートで
pnpm --filter lib-a build
のようにWorkspaceを指定してコマンドを実行することも可能
Turborepo とは?
Monorepo内のタスクを依存関係を考慮して実行してくれるツール
例えばworkspacesないのbuildコマンドを一括で実行する例が記載されている。
Turborepo 参考
- 統合テストが行いやすい他、ワークフローの単純化のメリットが紹介される。
- Vercelが開発
- 提供される機能
- lint, build, testなどのタスクの並列実行
- ローカルキャッシュを利用してビルド時間を短縮可能
- 準備
- turboコマンドを利用できるようにする
- プロジェクトの作成時にturborepoプロジェクトを作成する
紹介されているディレクトリ構成
.
├── apps
│ ├── docs
│ │ ├── pages
│ │ │ └── index.tsx
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── next-env.d.ts
│ │ ├── next.config.js
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── web
│ ├── pages
│ │ └── index.tsx
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── README.md
│ ├── next-env.d.ts
│ ├── next.config.js
│ ├── package.json
│ └── tsconfig.json
├── packages
│ ├── eslint-config-custom
│ │ ├── index.js
│ │ └── package.json
│ ├── tsconfig
│ │ ├── base.json
│ │ ├── nextjs.json
│ │ ├── package.json
│ │ └── react-library.json
│ └── ui
│ ├── Button.tsx
│ ├── index.tsx
│ ├── package.json
│ └── tsconfig.json
├── .eslintrc.js
├── .gitignore
├── .npmrc
├── README.md
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
└── turbo.json
packagesはプロジェクト共有で利用するプログラムや設定が置かれている。(ESLintなど)
Webサービス開発でのmonorepo環境(Turborepo, nx)
モノレポで便利になる面はありつつ、まだ世の中に知見が少ない印象はあり、Webサービス開発で取り入れるのは少し大変かなという感想