😊

npm-check-updates (ncu) が便利だった話

に公開

はじめに

初めまして!
皆様どうもこんにちは、こんばんは、おはようございます。
エンジニアの enomoto です。

最近、新規のアプリケーションを構築する機会が多く、比較的新しいツールを使う機会も多いです。
新しめのライブラリはアップデートの頻度もかなり早いので、気づけば「あれ?こんなに古くなってたの?」ということがよくあります。

しかし、ライブラリのアップデートって面倒ではないでしょうか?

特に個人的にはバックエンド畑の自分からすると、フロントエンドなどの package.json に書かれているライブラリが多すぎて、かなり心が折れそうになることがあります。
(Next.js とかだと、フロントエンドとバックエンド部分のライブラリが両方入ってたりして、アップデートがさらに辛い感覚がある)

「誰かサクッと package.json を更新してくれないかなー」と思っていた矢先、下記のツールに出会いました。

https://github.com/raineorshine/npm-check-updates

npm-check-updates とは?

npm-check-updates(通称 ncu)は、Node.js プロジェクトの依存関係を最新バージョンにアップデートするためのコマンドラインツールです。

主な特徴

  • 一括アップデート: package.json 内のすべての依存関係を一度に最新バージョンに更新
  • 安全な確認: 実際に更新する前に、どのパッケージがアップデート可能かを確認
  • 柔軟な設定: 特定のパッケージのみを対象にしたり、除外したりすることが可能
  • セマンティックバージョニング対応: メジャー、マイナー、パッチバージョンを考慮した更新

従来の方法との違い

通常の npm update コマンドは、package.json で指定されたバージョン範囲内でのみ更新を行います。一方、ncupackage.json 自体を書き換えて、最新バージョンに更新してくれます。

使い方

インストール

グローバルにインストールして使用します:

npm install -g npm-check-updates

基本的な使い方

1. アップデート可能なパッケージの確認

ncu

このコマンドを実行すると、現在のプロジェクトでアップデート可能なパッケージが一覧表示されます。

 @types/node   ^18.0.0  →  ^20.10.0
 typescript     ^4.9.0  →   ^5.3.0
 vite           ^4.0.0  →   ^5.0.0

(メジャーバージョンアップとかだと赤色で表示されていたりして、わかりやすい)

2. package.json の実際の更新

ncu -u

-u(または --upgrade)オプションを付けることで、実際に package.json が更新されます。

3. 依存関係のインストール

package.json が更新された後は、新しいバージョンをインストールします:

npm install

便利なオプション

インタラクティブモード

ncu -i

各パッケージについて個別に更新するかどうかを選択できます。

マイナーバージョンまでの更新

ncu --target minor

メジャーバージョンアップを避けて、マイナーバージョンまでの更新に留めます。

他にも色々なオプションがあり、非常に柔軟に使いやすそうだなーと感じました。

注意点

1. 破壊的変更への注意

メジャーバージョンアップには破壊的変更が含まれる可能性があります。
更新後は必ずテストを実行したり、動作確認をして問題ないか確認しましょう。

2. 段階的な更新を推奨

すべてのパッケージを一度に更新するのではなく、重要なパッケージから段階的に更新することをお勧めします。(時間があれば、、、ですが)

3. セキュリティチェックとの併用

パッケージ更新前後には npm audit でセキュリティ脆弱性をチェックすることもお勧めします。

終わりに

npm-check-updates は、Node.js プロジェクトの依存関係管理を大幅に効率化してくれる素晴らしいツールです。

特に以下のような場面で威力を発揮します:

  • 定期メンテナンス: 月次や四半期ごとの依存関係更新作業
  • セキュリティ対応: 脆弱性が発見されたパッケージの迅速な更新

手動で一つ一つパッケージを確認してアップデートしていた作業が、数秒で完了するようになりました。
開発効率が大幅に向上し、より本質的な開発作業に集中できるようになったと感じています。

dependabot (https://docs.github.com/ja/code-security/dependabot) も素晴らしいのですが、個人的にフロントエンドは package が多すぎて、それを見るのも少し面倒になるタイプなので、併用したり、開発チームごとにベストなやり方を模索することをお勧めします。

皆さんもぜひ npm-check-updates を試してみてください!

参考リンク

DELTAテックブログ

Discussion