ワークスペース
ワークスペースは、モノレポの構成要素です。モノレポに追加する各アプリとパッケージは、独自のワークスペース内に配置されます。
ワークスペースは、パッケージマネージャーによって管理されるため、まずパッケージマネージャーを設定しておいてください。
ワークスペースの構成
ワークスペースを使用するには、まず、そのファイルシステムの場所をパッケージマネージャーに宣言する必要があります。
推奨される一般的な規則は、トップレベルに apps/
および packages/
ディレクトリを持つことです。これは必須ではありません。あくまで推奨されるディレクトリ構造です。
apps
フォルダーには、Next.js (新しいタブで開きます) や Svelte (新しいタブで開きます) アプリなど、起動可能なアプリのワークスペースを含める必要があります。
packages
フォルダーには、アプリまたは別のパッケージによって使用されるパッケージのワークスペースを含める必要があります。
ワークスペースとして構成するフォルダーを、ルートの package.json
ファイルの workspaces
フィールドに追加します。このフィールドには、グロブの形式でワークスペースフォルダーのリストが含まれています。
{
"name": "my-monorepo",
"version": "1.0.0",
"workspaces": [
"docs",
"apps/*",
"packages/*"
]
}
my-monorepo
├─ docs
├─ apps
│ ├─ api
│ └─ mobile
├─ packages
│ ├─ tsconfig
│ └─ shared-utils
└─ sdk
上記の例では、my-monorepo/apps/
および my-monorepo/packages/
内のすべてのディレクトリがワークスペースであり、my-monorepo/docs
ディレクトリ自体もワークスペースです。my-monorepo/sdk/
は、ワークスペース構成に含まれていないため、ワークスペースでは_ありません_。
ワークスペースの名前付け
各ワークスペースには一意の名前があり、その名前は package.json
で指定されます。
{
"name": "shared-utils"
}
この名前は次の用途に使用されます。
- パッケージをインストールするワークスペースを指定します
- 他のワークスペースでこのワークスペースを使用します
- パッケージの公開:指定した
name
で npm に公開されます。
npm 上の既存のパッケージとの衝突を避けるために、npm の組織またはユーザースコープを使用できます。たとえば、@mycompany/shared-utils
のように使用できます。
相互に依存するワークスペース
あるワークスペース内で別のワークスペースを使用するには、その名前を使用して依存関係として指定する必要があります。
たとえば、apps/docs
が packages/shared-utils
をインポートしたい場合は、apps/docs/package.json
内で shared-utils
を依存関係として追加する必要があります。
{
"dependencies": {
"shared-utils": "*"
}
}
*
を使用すると、依存関係の最新バージョンを参照できます。パッケージのバージョンが変更された場合に、依存関係のバージョンを上げる必要がなくなります。
通常のパッケージと同様に、その後ルートから install
を実行する必要があります。インストールが完了すると、node_modules
からの他のパッケージと同様にワークスペースを使用できます。詳細については、コードの共有に関するセクションを参照してください。
ワークスペースの管理
モノレポでは、ルートから install
コマンドを実行すると、いくつかの処理が行われます。
- インストールされているワークスペースの依存関係がチェックされます。
- ワークスペースは、シンボリックリンク (新しいタブで開きます) で
node_modules
に配置されるため、通常のパッケージのようにインポートできます。 - その他のパッケージはダウンロードされ、
node_modules
にインストールされます。
つまり、ワークスペースを追加/削除したり、ファイルシステム上の場所を変更したりする場合は、ルートから install
コマンドを再実行して、ワークスペースを再度設定する必要があります。
パッケージ内のソースコードが変更されるたびに再インストールする必要はありません。ワークスペースの場所(または設定)を何らかの方法で変更した場合のみです。
問題が発生した場合は、リポジトリ内の各 node_modules
フォルダーを削除し、install
を再実行して修正する必要がある場合があります。