メインコンテンツへスキップ

タスク結果のキャッシュ

タスクの実行、キャッシングなどに関しては、LernaとNxは互換性があります。「Lernaはビルドをキャッシュできる」というのは、LernaがビルドをキャッシュできるNxを使用しているという意味です。

同じコードを何度もビルドしてテストし直すのはコストがかかります。Lernaは計算キャッシュを使用して、同じコードを二度とビルドしません。

設定

Nxを介したLernaは、最も洗練され、実戦でテスト済みの計算キャッシュシステムを備えています。実行しようとしているタスクが以前に実行されたかどうかを認識し、キャッシュを使用してそのタスクの実行結果を復元できます。

ヒント

nx.jsonがない場合は、npx lerna add-cachingを実行してください。

buildtestのキャッシングを有効にするには、nx.jsontargetDefaultsプロパティを編集して、buildtestタスクを含めます。

nx.json
{
"targetDefaults": {
"build": {
"cache": true
},
"test": {
"cache": true
}
}
}
情報

キャッシュ可能な操作は副作用がない必要があります。つまり、同じ入力に対しては常に同じ出力が得られる必要があります。例として、バックエンドAPIにアクセスするe2eテスト実行は、バックエンドがテスト実行の結果に影響を与える可能性があるため、キャッシュできません。

次に、次のコマンドを2回実行します。2回目は瞬時に実行されます。

lerna run build --scope=header
ターミナル出力
> lerna run build --scope=header

> header:build [existing outputs match the cache, left as is]

> header@0.0.0 build
> rimraf dist && rollup --config


src/index.tsx → dist...
created dist in 858ms

—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Lerna (powered by Nx) Successfully ran target test for project header (4ms)

Nx read the output from the cache instead of running the command for 1 out of 1 tasks.

キャッシュからの再生

Lernaは、タスクの入力が変更されていないと判断した場合、実際にマシン上で実行した場合と同じようにタスクの出力を再作成します。ただし、はるかに高速です。キャッシュされたタスクの出力には、ターミナル出力と、そのタスクに対して定義されたoutputディレクトリに作成されたファイルの両方が含まれます。

header:buildタスクが出力するdistフォルダを削除してから、lerna run build --scope=headerを再度実行することで、これをテストできます。キャッシュされたタスクは瞬時に再生され、正しいファイルがdistフォルダに存在します。

header/
└── dist/ <-- this folder gets recreated

タスクが別の場所に出力アーティファクトを作成する場合は、キャッシュされる出力フォルダを変更できます。また、変更された場合にキャッシュを無効にする入力をカスタマイズすることもできます。

高度なキャッシング

キャッシングの実装の詳細な理解と、リポジトリのキャッシングの微調整については、キャッシングの仕組みを参照してください。

ローカル計算キャッシュ

デフォルトでは、Lerna(Nx経由)はローカル計算キャッシュを使用します。Nxはキャッシュされた値を1週間だけ保存し、その後削除されます。キャッシュをクリアするにはnx resetを実行します。Nxは次回アクセスしようとしたときに新しいキャッシュを作成します。