メインコンテンツにジャンプ

Yarn キャッシュクリアのためのガイド (V1、Berry、CI/CD)

V1とBerry (V2+)のyarnキャッシュクリアの方法を学びます。ステップバイステップのコマンド、CI/CDのベストプラクティス、トラブルシューティングのヒントで、壊れたビルドを修復します。

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

Yarn キャッシュクリアのためのガイド (V1、Berry、CI/CD)

あなたは yarn installあなたが更新した依存関係がまだ古いビルドに解決されることを確認するために、

That’s usually when people search for Yarnのキャッシュをクリアする と、最初に見つけたコマンドを貼り付ける

時々、それが機能する。時々、それが何も解決しない。理由は簡単:Yarnのキャッシュの動作は、実行中のYarnによって大きく異なるため、キャッシュのスコープ、プロジェクトがローカルキャッシュまたは共有キャッシュを使用しているかどうか、そして、実際の問題がキャッシュそのものであるかどうかが重要である。 Yarn Classic v1Yarn Berry v2+ の違いは大きすぎる。どちらのコマンドも正しく、どちらのトラブルシューティング戦略も正しくない。

ほとんどのガイドはここで止まる。しかも、それが始まりだけだ。 yarn cache cleanCIとDockerでは、キャッシュ戦略が悪いと、古いパッケージアーカイブよりも多くの痛みを与えることが多い。

目次

あなたのビルドが壊れており、Yarnキャッシュが原因かもしれません

よくあるパターンは次のようになります。パッケージをバンプし、最新の変更を取得し、再度インストールを実行します。コマンドは完了しますが、アプリは古い依存関係が存在しているように動作します。すると誰かがキャッシュをクリアすることを提案し、現在はその実際の解決策かただの迷信かどうかを疑問に思うようになります。

それは実際の解決策でもあります。ただの迷信でもあります。

キャッシュの問題は、予測可能な方法で表現されます。ローカルパッケージが更新されない。CIが予想外のものを取得する。新しいブランチはメインブランチとは異なる動作を示す。ロックファイルはすべて一致しているはずですが、ロックファイルは一致しているはずです。キャッシュのデバッグを実行する際に、より体系的なビルドレビューと組み合わせることは、より広範なパイプラインの不安定性を追跡している場合に役立ちます。このガイドを参照してください Capacitor の CI/CD Pipelines 内のビルドエラーを修正する.

実践的なルール: Yarn のキャッシュをクリアすることは診断ツールとしてではなく、メンテナンスの習慣として扱うべきである。

Yarn のキャッシュモデルが時間の経過とともに変更されたため、難しい部分がある。古いプロジェクトでは、キャッシュはグローバルに共有される。新しいプロジェクトでは、キャッシュのクリーンアップはプロジェクトに依存したりグローバルにしたり、コマンドフラグに依存したりする。したがって、チームメンバーが “Yarn のキャッシュをクリアしてください” と言う場合、最初の質問は “どの Yarn?” であるべきである。 キャッシュの修正は、まずコンテキストを理解することから始まる。ローカルマシンまたは CI ランナー。 Yarn v1 または Berry。共有キャッシュまたはプロジェクトキャッシュ。そうすることで、コマンドは厳密になり、望ましいものになる。

Yarn キャッシュをクリアする時期と理由

Yarn キャッシュをクリアすることは、特定のエラー モードを想定して行うことができる。最も役立つのは、古いパッケージ アーティファクトを削除したり、ダウンロードの途中でブロッキングされた状態から回復したり、意図的に保存されたパッケージを削除して Yarn が再構築するようにすることである。

キャッシュをクリアすることの利点と時期を示した図

キャッシュの問題の症状

いくつかのケースは、キャッシュの問題の可能性が高い:

依存関係が更新しない

  • 依存関係が更新しない バージョンを変更したり、ローカルパッケージを再構築したりしましたが、インストールは古いアーティファクトを引き続き取得します。
  • インストールは、状態的な感覚で失敗します: 一台のマシンが動作し、もう一台のマシンは動作せず、同じコマンドを再実行すると同じ悪い結果が再現されます。
  • ローカルディスクスペースを取り戻す必要があります: この問題は、開発用マシンよりもCI環境では重要ではありません。

他の状況は、キャッシュの問題のように見えますが、実際には根本的な原因はキャッシュをクリアすることで解決されません。ロックファイルが予期せずに変更された場合、ワークスペースの設定が不一致だった場合、Dockerビルドが間違ったレイヤーを無効にした場合、キャッシュをクリアしても根本的な原因にはなりません。 managing dependencies in Capacitor projects この実用的なガイドは、__CAPGO_KEEP_0__ プロジェクトの依存関係を管理する方法について詳しく説明しています。

マシン全体のクリーンアップがパッケージトラブルシューティングよりも広い目標である場合、システムレベルのガイドも役立ちます。 Mac開発者がMacユーザーのアプリケーションキャッシュをクリーンアップしたい場合、よくパッケージマネージャーはストレージの全体像のただ一部であることを発見します。 キャッシュをクリアする必要がある場合、Yarn clear cache を使用するのはどの時点にすべきではありません

キャッシュをクリアする必要がある場合、Yarn clear cache を使用するのはどの時点にすべきではありません。

Yarn のキャッシュをクリアすることは、最初のインストール問題の回答として使用しないでください。

使用するには、古いまたは損傷したパッケージ状態の証拠が必要です。

状況 最初の動き
ロックファイルのずれ 変更を確認し、再インストールを一貫して行う yarn.lock ワークスペース解決の問題
ワークスペース設定とインストール動作を確認 Docker の再構築の遅さ
レイヤー順序とキャッシュの持続性を確認 CI の一致性の問題
CI の一致性の問題 __CAPGO_KEEP_0__

環境が間違っている場合、キャッシュをクリアしても次の間違ったインストールは遅くなるだけです。

キャッシュをクリアすることで時間を節約できます。多くのデバッグ時間は、キャッシュをマジックリセットボタンとして扱うことによるものです。

Yarn Classic v1におけるキャッシュのクリア

Yarn Classicは、多くの開発者がすべてのYarnバージョンがどのように動作するかと想定しているように動作します。 ユーザーディレクトリ内でグローバルキャッシュを使用し、 ユーザーディレクトリモデルに基づく次の yarn cache clean または yarn ユーザーディレクトリ内で実行するrunを使用して、キャッシュが再構築されます。 yarn install Yarn Classicのドキュメントはそのように説明しており、キャッシュが再構築されることを注意しています。 Yarn ClassicキャッシュCLIドキュメント.

古いコンピューターキーボードの近景

What the command actually removes

Yarn v1のデフォルトのクリーンアップコマンドは、以下のように簡単です:

yarn cache clean

そのコマンドは、共有キャッシュのみを削除するのではなく、現在のプロジェクトも削除します。複数のリポジトリを同じマシン上で作業する場合、重要です。次のインストールで、どのリポジトリでもパッケージを再度フェッチする必要がある場合があります。

Yarn v1が生じる可能性のある混乱の原因の1つは、共有キャッシュの設計です。ローカルパッケージ開発が含まれる場合、グローバルキャッシュ内の古いアーティファクトは、異なるリポジトリに影響を与える可能性があります。特に、キャッシュが長く生き残る場合です。

Yarn Classicの実践的なシーケンスは、以下のようになります。

  1. 最初にクリーンコマンドを実行してください: yarn cache clean
  2. ローカルインストールアーティファクトを削除する必要がある場合、以下のコマンドを実行してください: node_modules stateがまだ不一致の場合、__CAPGO_KEEP_0__はよくある候補です。
  3. 再インストールからスクラッチ: Run yarn install 再度実行し、依存性グラフが期待どおりに解決されることを確認してください。

キャッシュの保存場所を確認する方法

キャッシュディレクトリを直接検査または削除したい場合は、Yarn Classicはパスを提供します。

yarn cache dir

CLIコマンドが問題を解決しない場合や、共有またはコンテナ化された環境でキャッシュディレクトリの所有者を確認する必要がある場合など、便利です。

__CAPGO_KEEP_1__をステップバイステップにインストールするこのガイドは、古いツールチェーンでローカル設定を予測可能に保つ場合にぴったりです。 installing Capacitor CLI step by step v1プロジェクトの場合、メンタルモデルは単純です。共有キャッシュ1つ、広範なクリーンアップコマンド1つ、次のインストールで削除したものが再構築されます。

Yarn Berry v2+のモダンキャッシュ管理

Yarn Berryは会話を変えました。Yarn v1に慣れている場合は、最大の調整はキャッシュクリーンアップが単に「グローバルストアを消去してもう一度試してみる」だけではなくなったことです。Berryはより正確な制御をサポートしており、ターゲットを知っている場合に便利です。

Yarn ClassicとYarn Berryの依存関係管理システムの主な違いを比較するグラフ

Berryはキャッシュモデルを変更しました

現代のYarnでは、キャッシュの動作はプロジェクトごとに強く結びついています。Berryのより広範なアプローチであるプロジェクトレベルの制御、Plug’n’Play、依存関係がリポジトリと共存できるワークフローに合致しています。

キャッシュの動作はプロジェクトごとに強く結びついています。キャッシュの動作はプロジェクトごとに強く結びついています。

キャッシュの動作はプロジェクトごとに強く結びついています。

なぜ、古いアドバイスはあなたを誤魔化すのか。チームメイトがv1でYarnを学んだ場合、1つのコマンドで全てのグローバルキャッシュをクリアすることを期待するかもしれません。Berryでは、必要なのは scope.

異なるモバイルとウェブパイプラインのビルド出力に取り組んでいる場合、同じスコープの考え方はパッケージマネージャー以外でも適用されます。この types of builds の比較は、デバッグの際に環境の仮定が漏れやすいことを思い出させるのに役立ちます。

ここでは、コマンドの詳細の前に、簡単な視覚的な説明があります。

Berryで重要なコマンド

Modern Yarnのドキュメント yarn cache clean を参照してください。 Yarnのshared cache files を削除することと同じです。Berryは、Yarnのキャッシュクリアコマンドの重要なスイッチを2つ公開しています。:

  • yarn cache clean Yarnの共有キャッシュファイルを削除します。
  • yarn cache clean --mirror プロジェクトのローカルキャッシュではなく、グローバルキャッシュをクリアします。
  • yarn cache clean --all グローバルキャッシュファイルとプロジェクトのローカルキャッシュファイルを両方削除します。

Yarn v1よりも意図的なワークフローを提供します。

目標 コマンド
デフォルトの共有キャッシュスコープをクリーンする yarn cache clean
グローバルミラーキャッシュをターゲットする yarn cache clean --mirror
ローカルとグローバルキャッシュファイルの完全なリセットを行う yarn cache clean --all

使用 --all 完全に新しく始める最も近い代替を使用したい場合は使用してください。 --mirror グローバルキャッシュ層に問題があることがわかっている場合は、プロジェクト全体をクリアしたくない場合は使用してください。

重要なポイント: Berryでスコープを間違って選択すると、キャッシュクリーンが「何もしないように」見えるのは主な理由の1つです。

実際の違いはこれです。Yarn Classicはデフォルトで幅広かったのですが、Berryは明示的な設計です。

CI/CDとDocker用のYarnキャッシュのベストプラクティス

CI/CDでは、無条件でYarnキャッシュをクリアすることは通常間違いです。キャッシュをクリアすると安全そうに見えますが、実際はパイプラインが速く繰り返し実行できるように依存している状態を失ってしまいます。

より有効な質問はこちらです。 キャッシュするものとキャッシュを復元するものはどれですか?

CI/CDとDockerビルドプロセス用のYarnキャッシュワークフローの4ステップの図示

キャッシュクリーンがパイプラインに悪影響を与えるのはよくあること

CircleCIの議論では、実際のプロジェクトで多くのチームが遭遇する失敗パターンが記載されています。キャッシュクリーンがインストールの遅さを解決しないのは、古いパッケージアーカイブのせいではありません。実際は、キャッシュディレクトリの不一致やキャッシュセット内のパスが欠けていることなど、CircleCIのYarnキャッシュスレッドで説明されていることです node_modules __CAPGO_KEEP_0__ __CAPGO_KEEP_0__.

CIシステムは、単一の曖昧な症状「インストールが遅い」や「依存関係のステップが不安定」などの背後にある根本原因を隠すことがよくあります。開発者はキャッシュをクリアし、再実行し、意味のある改善は得られません。

一般的なパイプラインの誤りには含まれます。

  • 誤ったディレクトリをキャッシュする: Yarnは、復元ステップが完了した後でも、復元された場所を使用しません。
  • ワークスペースパスを無視する: ルート依存関係は復元されますが、ワークスペースのインストールがまだリリンクする必要があります。
  • Dockerレイヤーを誤った順序でビルドする: ソースcodeコピーは依存関係レイヤーを無効にし、パッケージのインストールが毎回実行されるため、毎回実行されます。

CIでは、悪い構成によりキャッシュミスが発生すると、汚れたキャッシュとよく見えます。

自動環境でモバイルアプリをビルドしている場合、このシナリオではリリースツールも登場します。チームはよくGitHubアクションやCircleCIを組み合わせて、配布と更新システムと組み合わせます。 そのより広いワークフローの中で、CapgoのCI/CD設定はCapacitorアプリのオプションです、パッケージマネージャーとビルドキャッシュ戦略と並んで。, alongside your package-manager and build-cache strategy.

CIとDockerのアプローチをよりよくする

キャッシュの無効化は感情ではなく、意図的に行う

CIのための信頼できるパターンは次のようになる

  1. 依存性の状態に基づいてキャッシュする キャッシュキーを yarn.lock と関連するYarnの設定ファイルに結びつける
  2. キャッシュを復元する 復元したパスがYarnがその環境で使用するパスと一致することを確認する
  3. 一貫したインストール 不可変セットアップでは、ロックファイルの正しさを強制するインストールモードを使用する
  4. 実際の変更に基づいて無効化する Yarnのバージョン変更、ロックファイルの更新、キャッシュパスの変更はキャッシュを再構築するのに適した理由である

Dockerの場合、原則は類似しています:

  • 依存関係のマニフェストをコピーする: 依存関係のインストール層とアプリケーションソースを分離することができる場合は、依存関係のインストール層をアプリケーションソースから分離してください。
  • イメージビルドで不要なクリーンアップを避ける: 同じビルド内でキャッシュを削除すると、有用なレイヤーの再利用が失われることがよくあります。
  • ユーザー所有権を明確にする: rootによって作成されたキャッシュディレクトリは、後で非rootランタイムユーザーによってインストールが失敗する可能性があります。

短い決定表が役立ちます:

シナリオ より良いアクションよりも yarn cache clean
CIインストールが復元後で遅くなった場合: キャッシュパスと復元順序を確認する:
ワークスペースは依然として重度にリリンクしています 関連するワークスペースのインストールアーティファクトをキャッシュする
docker再構築はインストールを実行します 依存ファイルのレイヤーを再配置する
依存関係の変更後、1つの悪いビルド キャッシュキーを無効化し、クリーンに再構築する

CIでキャッシュをクリアするYarnを使用するのは、古いキャッシュコンテンツが実際の問題であることを確認した後のみです。ほとんどの場合、キャッシュ設計が改善されるのがより良い解決策です。

Yarn キャッシュの一般的なトラブルシューティング

キャッシュをクリーンアップした後も生き残るキャッシュのバグは最もフラストレーションを感じるものです。ターゲットされたクリーンアップ、再インストールを実行し、Yarnはまだ古いパッケージを引き付けています。その時点で、レジストリが間違っているか、ロックファイルが呪われていると仮定するのは魅力的です。

Yarnの文書化された歴史的な問題はなぜそれが起こるのかを示しています。開発者は yarn cache clean <package-name> 古いコピーを残すことができる cache/.tmp、という問題を報告しました。これにより、インストールは古いバージョンを使用し続けます。ただし、臨時ディレクトリが削除されたり、完全なクリーンアップが実行されたりするまで、というのは、 Yarnのキャッシュアーティファクトの古さに関する問題について .tmp.

ターゲットされたクリーンでも古いパッケージが残っている場合

教訓は簡単です。 部分的なクリーンは常に十分ではありません。

バージョンの古さを疑うのではなく、広範な汚染を疑る場合は、この順序を使用してください。

  • 明らかなチェックから始めましょう。 期待どおりのパッケージバージョンとソースを確認することから始めましょう。
  • パッケージ固有のクリーンに多大な信頼を置くのは危険です。 ターゲットされたクリーンでも一時的なアーティファクトが残っている可能性があります。
  • 完全なキャッシュの消去に進めます。 古いバージョンが続いている場合は、より広いキャッシュスコープをクリーンアップしてください。
  • テンプキャッシュパスの手動検査を行ってください。 古い設定では、 cache/.tmp 必要な部分が欠けている場合、Capgoはその欠けている部分を補うものになる。

パッケージが古いアーティファクトに解決する場合、失敗したターゲットクリーン後、よく最初に調べるのは一時キャッシュファイルです。

キャッシュの問題と見なされる許可や環境の問題

キャッシュエラーはすべてキャッシュコンテンツの問題ではありません。

Docker、多ユーザーLinuxシステム、またはCIランナーの場合、キャッシュディレクトリの所有者がプロセスが実行されているユーザーと異なるため、パーミッションエラーが発生する可能性があります。 その場合、キャッシュをクリアしても直効しません。所有権の問題を解決するまで、実行ユーザーでYarnを実行する、またはディレクトリの所有権を修復して再インストールする必要があります。

そのような問題は、環境間で一貫してインストールが失敗するため、古いキャッシュのように表示されることがよくあります。修正は、パッケージに関係なく、運用上のものです。

Yarn キャッシュのクリアに関するよくある質問

キャッシュをクリアすることは安全ですか?

はい。通常の開発では、キャッシュされたパッケージアーティファクトを削除するだけなので、安全な操作です。アプリケーションのソースコードは削除されません。Yarnは、次のインストールで必要なものを再度取得できます。

キャッシュをクリアすることで、次回のインストールでは通常よりも多くのデータをダウンロードまたは再構築する必要がある可能性があります。

何度に実行する必要がありますか。

Only when you have a reason.

Yarnのキャッシュをクリアすることは、健康なプロジェクトの定期的なメンテナンスではありません。依存関係が古くなったり、インストールが不正に表示されたり、デバッグ中に意図的にリセットしたい場合は、使用してください。

生産ビルドに影響するか

直接影響しません。ローカルまたはCIキャッシュをクリアしても、コミットしたアプリケーションcodeは変更されません。

しかし、ビルド環境が変更されることは事実です。キャッシュされたインストールアーティファクトに依存している場合、キャッシュをクリアするとビルドが遅くなるか、隠れた再現性の問題が露呈する可能性があります。そのため、トラブルシューティング中に便利ですが、リリーススクリプトに無理に追加するのは避けるべきです。

最も簡単な実践ルールは何か

問題に合った最小限のクリーンアップを使用しましょう。ローカルデバッグの場合、プロジェクトごとに使用されるYarnのキャッシュスコープから始めましょう。CIやDockerの場合、キャッシュ設計を修正する前にキャッシュを削除するのを避けましょう。パッケージ固有のクリーンアップが機能しない場合は、臨時ファイルや環境の不一致を想定するのではなく、Yarnが破損していることを想定するのを避けましょう。

チームが__CAPGO_KEEP_0__アプリを配信し、依存関係やビルド問題の後に依存関係やビルド問題の後、よりきれいなリリースパイプラインが必要な場合は


Capacitor Capgo Capgoによって書かれました.

Capacitor アプリのリアルタイム更新

ウェブ層のバグが生産用にリリースされた場合、Capgo を使用して修正を配信するのではなく、数日間待ってアプリストアの承認を待つのではなく、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残る。

Get Started Now

ブログの最新記事

Capgo を使用すると、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を得ることができます。