リポジトリ
ドキュメント
ワークスペース

ワークスペース

ワークスペースは、モノレポの構成要素です。モノレポに追加する各アプリとパッケージは、独自のワークスペース内に配置されます。

ワークスペースは、パッケージマネージャーによって管理されるため、まずパッケージマネージャーを設定しておいてください。

ワークスペースの構成

ワークスペースを使用するには、まず、そのファイルシステムの場所をパッケージマネージャーに宣言する必要があります。

推奨される一般的な規則は、トップレベルに 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"
}

この名前は次の用途に使用されます。

  1. パッケージをインストールするワークスペースを指定します
  2. 他のワークスペースでこのワークスペースを使用します
  3. パッケージの公開:指定したnameで npm に公開されます。

npm 上の既存のパッケージとの衝突を避けるために、npm の組織またはユーザースコープを使用できます。たとえば、@mycompany/shared-utils のように使用できます。

相互に依存するワークスペース

あるワークスペース内で別のワークスペースを使用するには、その名前を使用して依存関係として指定する必要があります。

たとえば、apps/docspackages/shared-utils をインポートしたい場合は、apps/docs/package.json 内で shared-utils を依存関係として追加する必要があります。

{
  "dependencies": {
    "shared-utils": "*"
  }
}

* を使用すると、依存関係の最新バージョンを参照できます。パッケージのバージョンが変更された場合に、依存関係のバージョンを上げる必要がなくなります。

通常のパッケージと同様に、その後ルートから install を実行する必要があります。インストールが完了すると、node_modules からの他のパッケージと同様にワークスペースを使用できます。詳細については、コードの共有に関するセクションを参照してください。

ワークスペースの管理

モノレポでは、ルートから install コマンドを実行すると、いくつかの処理が行われます。

  1. インストールされているワークスペースの依存関係がチェックされます。
  2. ワークスペースは、シンボリックリンク (新しいタブで開きます)node_modules に配置されるため、通常のパッケージのようにインポートできます。
  3. その他のパッケージはダウンロードされ、node_modules にインストールされます。

つまり、ワークスペースを追加/削除したり、ファイルシステム上の場所を変更したりする場合は、ルートから install コマンドを再実行して、ワークスペースを再度設定する必要があります。

パッケージ内のソースコードが変更されるたびに再インストールする必要はありません。ワークスペースの場所(または設定)を何らかの方法で変更した場合のみです。

問題が発生した場合は、リポジトリ内の各 node_modules フォルダーを削除し、install を再実行して修正する必要がある場合があります。