概要
今回のブログポストではYarn
のWorkspaces
を使ってモノレポを構成する際に、各プロジェクトのscripts
に設定されたコマンドを実行する方法について説明します。
ブログシリーズ
このブログはシリーズで作成されました。次のリンクを通じて他のブログポストも確認してください。
- [プロジェクト管理] リポジトリ戦略
- [JavaScript] モノレポ(Monorepo)のためのツール
- [Monorepo] NodeJS のモジュールの読み込み
- [Monorepo] Symlink
- [Monoepo] Yarn Workspaces
- [Monoepo] Yarn Workspaces の依存性の Hoisting
- [Monoepo] Yarn Workspaces のコマンド
- [Monoepo] pnpm を使ってモノレポを作る方法
例題
各プロジェクトのscripts
に設定されたコマンドを実行する方法を調べるために、例題を作成したみましょう。まず、次のようなフォルダとファイル構造を作成します。
.
├── package.json
└── src
├── module-a
│ ├── index.js
│ └── package.json
└── module-b
├── index.js
└── package.json
module-a
のpackage.json
は次のようになります。
// src/module-a/package.json
{
"name": "module-a",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
}
}
module-b
のpackage.json
は次のようになります。
// src/module-b/package.json
{
"name": "module-b",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
}
}
そして、module-b
のindex.js
は次のようになります。
// src/module-b/index.js
console.log('module-b');
module-a
のindex.js
は次のようになります。
// src/module-a/index.js
console.log('module-a');
require('module-b');
最後にルートフォルダのあるpackage.json
ファイルを次のように修正します。
{
"name": "monorepo",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"workspaces": {
"packages": ["src/*"]
}
}
そしたら、次のコマンドを実行してパッケージをインストールし、module-a
とmodule-b
のscripts
に設定されたコマンドを実行してみましょう。
yarn install
cd ./src/module-a
yarn start
cd ../..
cd ./src/module-b
yarn start
すると、次のようにmodule-a
とmodule-b
が正常に実行されることが確認できます。
# cd ./src/module-a
# yarn start
module-a
module-b
# cd ./src/module-b
# yarn start
module-b
Workspaces のコマンド
上記の例題のように、次のコマンドを使って各プロジェクトに設定されたコマンドを実行できます。
yarn install
cd ./src/module-a
yarn start
cd ../..
cd ./src/module-b
yarn start
しかし、毎回プロジェクトに移動してからコマンドを実行するのは効率的ではありません。
Yarn
はこの問題を解決するために、次のようなWorkspaces
のコマンドをサポートしています。
yarn workspace <workspace_name> <command>
このコマンドを使うと、プロジェクトのフォルダに移動せずにコマンドを実行することができます。<workspace_name>
にはpackage.json
のname
に設定された値が入り、<command>
にはscripts
に設定されたコマンドが入ります。先ほどの例題のコマンドを次のように実行できます。
yarn workspace module-a start
yarn workspace module-b start
コマンドを実行すると、次のように結果が正しく表示されることが確認できます。
# yarn workspace module-a start
module-a
module-b
# yarn workspace module-b start
module-b
完了
これでYarn
のWorkspaces
を使って構成されたモノレポで各プロジェクトのscripts
に設定されたコマンドを簡単に実行する方法について説明しました。皆さんも毎回該当プロジェクトに移動してコマンドを実行していたら、Workspaces
のコマンドを使ってもっと簡単にコマンドを実行してみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。