Zenn-CLIを使っててpackage-lock.jsonがコンフリクトした時の対処

1 min read読了の目安(約1600字

TL;DR

Zenn-CLIを使って、かつGitHubリポジトリで連携している時、マージしようとしてpackage-lock.jsonがコンフリクトした場合は、

npm install zenn-cli@latest
git add package-lock.json
git commit -m "updates package-lock.json"

とすれば良い。

はじめに

Zenn-CLIを使い、かつGitHubリポジトリ連携でZennのコンテンツを管理している人は多いと思う。で、ある場所でコンテンツをアップデートしてpushした後、別の場所でfetch;mergeしたら、package-lock.jsonがコンフリクトしたよ、と言われ、npmに詳しくない人(例えば俺)は「え?何それ」と焦ることになる。この記事はそういう人のために、何が起きたか、どうすれば良いかをまとめたもの。

何が起きたか

Zenn-CLIはNode Package Manager(npm)のパッケージとして管理されている。npmでプロジェクトを作ると、package-lock.jsonができる。ここには、現在インストールされているパッケージのバージョンが記録されている。さて、Zenn-CLIは、新しいバージョンがあると更新通知を出すので、そこで以下のコマンドを実行する。

npm install zenn-cli@latest

この時、このコマンドによりZenn-CLIや依存パッケージのバージョンが上がり、それがpackage-lock.jsonに記録される。package-lock.jsonもGit管理下にあるので、そのままadd, commit, pushにより更新される。この状態で、まだZenn-CLIが古いままの別のマシンでgit fetch;mergeすると、package-lock.jsonがコンフリクトすることになる。

どうすれば良いか

package-lock.jsonは、現在のプロジェクトのパッケージのバージョンを記載しているだけなので、使っているパッケージを最新版にアップデートすれば良い。今回の場合なら、zenn-cliを最新版にすれば良いので、コンフリクトした状態のまま以下のコマンドを実行する。

npm install zenn-cli@latest

すると、(必要があれば)パッケージのバージョンが上がり、かつpackage-lock.jsonが作り直されて上書きされるので、あとはaddしてcommitすれば良い。

通常、package-lock.jsonを使うことはないが、リポジトリ間でパッケージのバージョンが違ったりすると地味に嫌なことが置きそうなので、.gitignoreに入れたりはしないほうが良いと思う。また、npm ciを使ったりする場合には必要となる。

まとめ

  • package-lock.jsonは、現在のプロジェクトのパッケージのバージョンを記録している
  • package-lock.jsonがコンフリクトしたら、npm installで必要なパッケージを更新し、package-lock.jsonを上書きしてadd, commitすれば良い。

参考文献