最近のGitHubでは、リポジトリ上で依存している外部のライブラリやモジュールが古いままだと警告を出してくれる機能が追加されました。Webページ上でも表示されますし、git push
などremoteと通信した際などにも確認できます。
$ git push Total 0 (delta 0), reused 0 (delta 0) remote: remote: GitHub found 6 vulnerabilities on katsube/gpwd's default branch (2 high, 4 moderate). To find out more, visit: remote: https://github.com/katsube/gpwd/network/alerts remote: To github.com:katsube/gpwd.git 35f20ab..5b85229 master -> master
これらを放置しておくとセキュリティホールの原因にもなりかねないので、定期的にpackage.jsonで指定しているバージョンを更新し、動作確認をする必要が出てきます。しかし1つつずつ最新のバージョンを手作業で確認するのは地獄ですよね。
そんなわけで今回はNode.jsで動作するプロジェクトで利用しているライブラリを簡単にアップデートする方法についてまとめたいと思います。
ncuでかんたんアップデート
インストール
このあたりの更新が簡単にできるncu
コマンドをインストールします。npmで一発です。
$ npm install -g npm-check-updates
今回は3.1.18が入りました。
$ ncu --version 3.1.18
アップデートの確認
プロジェクトのあるディレクトリでncu
とだけ打つと、packege.json
の内容とネットワーク経由でパッケージの最新のバージョンを比較して表示してくれます。
$ ncu Checking (略)/gpwd/package.json [====================] 2/2 100% commander ^2.19.0 → ^2.20.0 jest ^23.6.0 → ^24.8.0 Run ncu -u to upgrade package.json
今回は「commander」「jest」が古くなってしまっていることがわかりました。
package.jsonを更新
ncu -u
を実行すると、package.json
を最新の状態に自動的に書き換えてくれます。
$ ncu -u Upgrading (略)/gpwd/package.json [====================] 2/2 100% commander ^2.19.0 → ^2.20.0 jest ^23.6.0 → ^24.8.0
実際にgit diff
で以前にcommitした内容と比較すると書き換わっているのが確認できました。
$ git diff 5b8522 package.json diff --git a/package.json b/package.json index b043ea5..aa10c7f 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,9 @@ }, "homepage": "https://github.com/katsube/gpw#readme", "dependencies": { - "commander": "^2.19.0" + "commander": "^2.20.0" }, "devDependencies": { - "jest": "^23.6.0" + "jest": "^24.8.0" } }
モジュールを更新
あとはnpm install
すればpackage.jsonと現在のモジュールの差分を自動的にアップデートしてくれます。
$ npm install > fsevents@1.2.9 install (略)/gpwd/node_modules/fsevents > node install node-pre-gyp WARN Using request for node-pre-gyp https download [fsevents] Success: "(略)/gpwd/node_modules/fsevents/lib/binding/Release/node-v67-darwin-x64/fse.node" is installed via remote added 68 packages from 67 contributors, removed 140 packages, updated 166 packages, moved 17 packages and audited 873712 packages in 77.977s found 0 vulnerabilities
最後に念のため確認。
$ ncu Checking (略)/gpwd/package.json [====================] 2/2 100% All dependencies match the latest package versions :)
アップデートが完了したらテストコードなどを動かして問題がないか確認をしてあげてください。お疲れ様でした!
その他
npmでアップデートの存在確認
実はnpmでもアップデートのチェックは可能です。プロジェクトのあるディレクトリへ移動し、npm outdated
を実行します。
$ npm outdated Package Current Wanted Latest Location commander 2.19.0 2.20.0 2.20.0 gpwd jest 23.6.0 23.6.0 24.8.0 gpwd
このあとにpackage.jsonを手動で更新、npm install
しても良いかもしれません。
yarnでアップデート
yarnの場合、最初からncu的な機能が含まれているようです。
$ yarn upgrade-interactive
詳しくはドキュメントを確認くださいませ。 https://yarnpkg.com/lang/ja/docs/cli/upgrade-interactive/yarnpkg.com