[Monoepo] Yarn Workspacesのコマンド

2024-04-12 hit count image

YarnのWorkspacesを使って構成されたモノレポで、各プロジェクトのscriptsに設定されたコマンドを実行する方法について説明します。

概要

今回のブログポストではYarnWorkspacesを使ってモノレポを構成する際に、各プロジェクトのscriptsに設定されたコマンドを実行する方法について説明します。

ブログシリーズ

このブログはシリーズで作成されました。次のリンクを通じて他のブログポストも確認してください。

例題

各プロジェクトのscriptsに設定されたコマンドを実行する方法を調べるために、例題を作成したみましょう。まず、次のようなフォルダとファイル構造を作成します。

.
├── package.json
└── src
    ├── module-a
    │   ├── index.js
    │   └── package.json
    └── module-b
        ├── index.js
        └── package.json

module-apackage.jsonは次のようになります。

// src/module-a/package.json
{
  "name": "module-a",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  }
}

module-bpackage.jsonは次のようになります。

// src/module-b/package.json
{
  "name": "module-b",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  }
}

そして、module-bindex.jsは次のようになります。

// src/module-b/index.js
console.log('module-b');

module-aindex.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-amodule-bscriptsに設定されたコマンドを実行してみましょう。

yarn install
cd ./src/module-a
yarn start

cd ../..

cd ./src/module-b
yarn start

すると、次のようにmodule-amodule-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.jsonnameに設定された値が入り、<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

完了

これでYarnWorkspacesを使って構成されたモノレポで各プロジェクトのscriptsに設定されたコマンドを簡単に実行する方法について説明しました。皆さんも毎回該当プロジェクトに移動してコマンドを実行していたら、Workspacesのコマンドを使ってもっと簡単にコマンドを実行してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts