パッケージマネージャーをYarnからnpmに移行

activeadmin/activeadmin

ActiveAdminはJavaScriptパッケージマネージャーをYarnからnpmに統一しました。CI/CDパイプライン、リリーススクリプト、開発環境セットアップ手順など、プロジェクト全体にわたる変更です。

背景

これまでActiveAdminはYarnをJavaScriptパッケージマネージャーとして採用しており、yarn.lockによって依存関係が管理されていました。一方でnpmもpackage-lock.jsonによる同等のロック機能を提供しており、Node.jsに標準バンドルされているため、追加インストールが不要という利点があります。

今回の移行により、yarn.lock(2077行削除)が削除され、新たにpackage-lock.json(4075行追加)が導入されました。ツールチェーンを標準のnpmに絞ることで、開発環境のセットアップに必要なツール数が削減されます。

技術的な変更

Yarnコマンドはプロジェクト全体でnpmの対応コマンドに置き換えられました。主な対応関係は次のとおりです。

Yarn(変更前) npm(変更後)
yarn install npm install
yarn install --frozen-lockfile --immutable npm ci
yarn build npm run build
yarn docs:build npm run docs:build
yarn gherkin-lint npm run gherkin-lint
yarn add @activeadmin/activeadmin npm install @activeadmin/activeadmin

CI/CDワークフローでは、actions/setup-nodecache オプションが yarn から npm に変更されています。また、yarn.lock を変更検知対象のファイルリストから除外し、代わりに package-lock.json の変更で各ジョブがトリガーされるようになります(package*.json のグロブで対応済み)。

# 変更前
- uses: actions/setup-node@v6.4.0
  with:
    node-version: 24
    cache: yarn
- run: yarn install
- run: yarn docs:build

# 変更後
- uses: actions/setup-node@v6.4.0
  with:
    node-version: 24
    cache: npm
- run: npm ci
- run: npm run docs:build

bin/prep-release スクリプトでは、依存関係のクリーンインストールに yarn install --frozen-lockfile の代わりに npm ci が使われるようになりました。npm ci はロックファイルを厳格に参照して冪等なインストールを行うコマンドであり、CI・リリース用途での動作は従来と同等です。

# 変更前
system "yarn install --frozen-lockfile"
system "yarn build"

# 変更後
system "npm ci"
system "npm run build"

tasks/test_application.rb では、テストアプリ生成時の依存インストールおよびCSSビルドがすべてnpmコマンドに統一されています。

設計判断

package*.json グロブによる変更検知の維持という設計が継続されています。package.jsonpackage-lock.json の両方を一括で検知できるため、ロックファイルが yarn.lock から package-lock.json に変わっても、ワークフローのトリガー条件を大きく書き換える必要がありませんでした。

また、クリーンインストールが必要な場面(CI・リリーススクリプト)では npm ci を、開発用途では npm install を使い分けている点も注目です。Yarnの --frozen-lockfile フラグに相当する厳格性を npm ci で代替することで、再現性の高いビルドが保たれています。

まとめ

Yarnからnpmへの移行は機能的な変更を伴わないツールの統一ですが、Node.jsに標準付属するnpmに一本化することで、開発環境のセットアップ要件がシンプルになります。npm ci による厳格なロックファイル準拠と package*.json グロブを活用した変更検知の設計は、移行後も再現性と一貫性を維持しています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
db8b3f39

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文、背景、技術詳細、設計判断、まとめという「総論→各論→結論」の構成が明確に適用されており、非常に分かりやすい記事構造になっています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```言語:ファイルパス)やPR番号のリンク([#9026](URL))など、カスタムMarkdown構文がすべて正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

CI/CDやパッケージマネージャーに関する専門用語を適切に用いており、対象読者であるエンジニアにとって過不足のない技術レベルで記述されています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各段落がトピックセンテンスで始まり、1段落1トピックの原則が守られているため、非常に読みやすく、要点を素早く把握できます。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事に引用されている`.github/workflows/ci.yaml`や`bin/prep-release`のコードスニペットは、提供されたDiff情報と完全に一致しており、正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`npm ci`、`frozen-lockfile`、`package*.json`グロブなど、関連する技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

Yarnからnpmへの移行に伴うコマンドの置換や、CI/CDにおける`npm ci`の役割など、技術的な説明が正確かつ論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

PR Descriptionがないにもかかわらず、記事の主張はすべてPRのタイトルとDiffから裏付けられており、ハルシネーション(捏造)は見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#9026)や、`yarn.lock`の削除行数(2077行)、`package-lock.json`の追加行数(4075行)など、具体的な数値がPR情報と完全に一致しており、信頼性が高いです。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトル「パッケージマネージャーをYarnからnpmに移行」は、PRのタイトル「Migrate to npm」の内容を的確に反映しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

「Node.jsに標準バンドルされている」という背景説明は外部知識ですが、PRの意図を説明するための自明な事実であり、許容範囲の適切な補足です。危険な外部知識の追加はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

記事内の時間表現に誤りや、PRの事実を歪曲するような記述は見られません。