2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

パッケージマネージャーを yarn から pnpm に移行したら GitHub の Dependabot が動かなくなった話

Last updated at Posted at 2025-12-14

はじめに

SENSYN ROBOTICS (センシンロボティクス) の岡村です。ドローンなどで撮影した画像/動画を管理するプラットフォームの開発でテックリードを担当しています。

この記事では「yarn から pnpm に移行したら Dependabot が動かなくなった事象と、その解決策」について解説します。

対象読者: pnpm と GitHub Dependabot を使用しており、プライベート npm レジストリ(Azure Artifacts など)を併用している開発者向けです。

背景・課題

パッケージマネージャーとして yarn を使用しているアプリケーションがあったのですが、そのバージョンが yarn v1 と古く、せっかくなら pnpm に移行しようということで対応を実施しました。pnpm への移行自体は特に問題なかったのですが、この対応以降、Dependabot の処理が下記エラー(一部抜粋)のため動かなくなってしまいました。

Dependabot encountered '6' error(s) during execution, please check the logs for more details.
+----------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                           Dependencies failed to update                                                            |
+-------------------+--------------------------------+-----------------------------------------------------------------------------------------------+
| Dependency        | Error Type                     | Error Details                                                                                 |
+-------------------+--------------------------------+-----------------------------------------------------------------------------------------------+
| happy-dom         | dependency_file_not_resolvable | {                                                                                             |
|                   |                                |   "message": "Error (ERR_PNPM_BROKEN_METADATA_JSON) while resolving \"pnpm-lock.yaml\" file." |
|                   |                                | }                                                                                             |
| prettier          | dependency_file_not_resolvable | {                                                                                             |
|                   |                                |   "message": "Error (ERR_PNPM_BROKEN_METADATA_JSON) while resolving \"pnpm-lock.yaml\" file." |
|                   |                                | }                                                                                             |
+-------------------+--------------------------------+-----------------------------------------------------------------------------------------------+

前提として、このアプリケーションは

  • npm パブリックレジストリ
  • Azure Artifacts npm プライベートレジストリ(認証あり)

の2つの異なる npm レジストリを参照しており、.npmrc の設定は下記のようになっていました。

registry=https://registry.npmjs.org
@your-org:registry=https://pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/
always-auth=true

; begin auth token
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/:username=your-org
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/:_password=<TOKEN>
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/:email=user@example.com
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/:username=your-org
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/:_password=<TOKEN>
//pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/:email=user@example.com
; end auth token

原因

まず web で同様の事象があるかどうかを確認しましたが、同じような問題を扱っている記事は見つかりませんでした。そこで次に生成 AI(Claude Code、Gemini)を使用して調査を行いましたが、提案される解決策を実施してみても、問題は解消されませんでした。トライアンドエラーを何度か繰り返し、ようやく問題解消に繋がりそうな解決策が出てきました。

原因は、.npmrc.gitignore していたため、Dependabot が .npmrc を参照できなかったことでした。

元々 .npmrc には認証情報が含まれるため、.npmrc.template を git 管理とし、それをコピーして .npmrc を作成する運用をしていました。そのため .npmrc 自体は .gitignore に追加されており、リポジトリには存在しない状態でした。

なぜ yarn では問題が起きなかったのか?

yarn.lock では resolved エントリーに tarball URL が記載されています。Dependabot はこの URL を直接参照してパッケージを解決できるため、.npmrc がなくても問題が発生しませんでした。

なぜ pnpm では問題が起きたのか?

pnpm の pnpm-lock.yaml は、デフォルトでは tarball URL を含まない仕様になっています。そのため Dependabot がパッケージを解決するには .npmrc を参照してレジストリ情報を取得する必要があります。

しかし .npmrc が git 管理されていなかったため、Dependabot は参照すべきレジストリ情報を取得できず、デフォルトの registry.npmjs.org を参照しようとしました。その結果、プライベートレジストリにあるパッケージが見つからずエラーとなっていました。

補足: .npmrclockfile-include-tarball-url=true を設定すれば lockfile に tarball URL を含めることもできますが、.npmrc 自体が git 管理されていなければこの設定も Dependabot には適用されません。

解決策

1. .npmrc を git 管理する

GitHub の公式ドキュメントに記載されているように、.npmrc でレジストリ URL を定義し、git 管理する必要があります。

registry=https://registry.npmjs.org
@your-org:registry=https://pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/
always-auth=true

重要: .npmrc にはレジストリ URL のみを定義し、認証情報(トークン等)は含めません。

2. dependabot.yml で認証情報を設定する

認証情報は dependabot.ymlregistries セクションで管理します。

# .github/dependabot.yml
version: 2
registries:
  npm-azure-artifacts:
    type: npm-registry
    url: https://pkgs.dev.azure.com/your-org/your-project/_packaging/your-feed/npm/registry/
    token: ${{ secrets.AZURE_ARTIFACTS_PAT }}

updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    registries:
      - npm-azure-artifacts

GitHub リポジトリの Settings > Secrets and variables > Dependabot から AZURE_ARTIFACTS_PAT シークレットを設定してください。

結論

.npmrc でレジストリ URL を定義し、それを git 管理とすることで、pnpm でも Dependabot が動作するようになりました。

この問題に遭遇した場合のチェックポイント

  1. .npmrc が git 管理されているか? - .gitignore に含まれていないか確認
  2. .npmrc にレジストリ URL が定義されているか? - スコープ付きパッケージのレジストリ設定
  3. dependabot.yml で認証情報が設定されているか? - プライベートレジストリへのアクセス権

学び

  • yarn と pnpm では lockfile の仕様が異なり、Dependabot の動作に影響する
  • 認証情報を含むファイルを .gitignore する運用は一般的だが、Dependabot との相性を考慮する必要がある
  • 公式ドキュメントを確認することの重要性を再認識した

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?