Microsoft社製のモノレポ構成管理ツールRushを触り始めたため、勉強の記録も兼ねてここに書いていくことにしました。記念すべき第一回目は、以下。
前回、Rush で、依存パッケージを追加するには、各パッケージで$ rush add REPO_NAME
を実行しますと書きました。
一からパッケージを作っていく場合はいいかもしれませんが、フレームワークが独自のジェネレーターを持っているようなタイプの場合はどうすればいいのでしょうか。よくあるのは、パッケージのディレクトリをジェネレータコマンドが自動生成し、依存管理もパッケージ生成時に行うため、勝手にnode_modulesもできてしまうというパターンです。
以下は、ひょっとしたら別の方法もあるのかもしれませんが、僕なりの解決方法を書いてみます。
Angularのようなパッケージジェネレーター型のフレームワークをmonorepoに組み込む
前回紹介したように、以下のような構成のRushリポジトリがあるとします。
- common/
- packages/
- package_A/
- src/
- package.json
- node_modules
- package_B/
- src/
- package.json
- node_modules
- package_A/
- rush.json
ここに、Angularベースのプロジェクトmy-angular
を追加してみましょう。
Angularは、ng
というCLIツールがあり、これを使ってパッケージを自動生成することができます。新規にアプリケーションを作成する場合は$ ng new APP_NAME
という感じで使います。
さて、この方法で従来通りパッケージを作成すると、以下の問題が発生します。
- Git関係の初期化が行われる
- 自動で依存パッケージのインストールが行われるため、
node_modules
が生成される
そこで、上記を新規パッケージ時に実行されないように指定しましょう。--skipInstall=true
と--skipGit=true
のオプションをつけて生成します。
$ cd packages
$ ng new my-angular --skipInstall=true --skipGit=true
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? SCSS [ https://sass-lang.com/documentation/syntax#scss ]
CREATE my-angular/README.md (1030 bytes)
CREATE my-angular/.editorconfig (274 bytes)
CREATE my-angular/.gitignore (631 bytes)
CREATE my-angular/angular.json (3718 bytes)
CREATE my-angular/package.json (1257 bytes)
CREATE my-angular/tsconfig.base.json (458 bytes)
CREATE my-angular/tsconfig.json (426 bytes)
CREATE my-angular/tslint.json (3184 bytes)
CREATE my-angular/.browserslistrc (853 bytes)
CREATE my-angular/karma.conf.js (1026 bytes)
CREATE my-angular/tsconfig.app.json (292 bytes)
CREATE my-angular/tsconfig.spec.json (338 bytes)
CREATE my-angular/src/favicon.ico (948 bytes)
CREATE my-angular/src/index.html (298 bytes)
CREATE my-angular/src/main.ts (372 bytes)
CREATE my-angular/src/polyfills.ts (2835 bytes)
CREATE my-angular/src/styles.scss (80 bytes)
CREATE my-angular/src/test.ts (753 bytes)
CREATE my-angular/src/assets/.gitkeep (0 bytes)
CREATE my-angular/src/environments/environment.prod.ts (51 bytes)
CREATE my-angular/src/environments/environment.ts (662 bytes)
CREATE my-angular/src/app/app-routing.module.ts (245 bytes)
CREATE my-angular/src/app/app.module.ts (393 bytes)
CREATE my-angular/src/app/app.component.scss (0 bytes)
CREATE my-angular/src/app/app.component.html (25757 bytes)
CREATE my-angular/src/app/app.component.spec.ts (1083 bytes)
CREATE my-angular/src/app/app.component.ts (219 bytes)
CREATE my-angular/e2e/protractor.conf.js (869 bytes)
CREATE my-angular/e2e/tsconfig.json (299 bytes)
CREATE my-angular/e2e/src/app.e2e-spec.ts (647 bytes)
CREATE my-angular/e2e/src/app.po.ts (301 bytes)
こんな感じで、新規パッケージ作成時にnode_module
の生成が行われませんでした。
このあとは、前回のようにrush.json
を編集して、プロジェクトに追加をします。
{
...
"projects": [
...
{
"packageName": "my-angular",
"projectFolder": "packages/my-angular"
},
...
],
...
}
編集が完了したら、プロジェクトのルートに戻り、update
コマンドを実行するようにしましょう。
$ rush update
これで、Angularのパッケージがリポジトリ内に登録されました。
ARTICLES
AUTHOR

原 一浩
カンソクインダストリーズ代表 / グレーティブ合同会社代表
1998年に独立し、同年、ウェブデザイン専門のメールメディア DesignWedgeの発行を開始。Webデザイン業の傍ら、海外のWebデザインに関する情報発信を行う。
雑誌への寄稿多数。主な著書に『はじめてのフロントエンド開発』『プロセスオブウェブデザイン』、『Play framework徹底入門』、『ウェブデザインコーディネートカタログ』など。自社製のWebデザインのクロール&キャプチャシステムvaqumをベースに、様々なリサーチを行っている。Web 検定プロジェクトメンバー。