version指定をlatestにするのはやめたほうがよい理由
https://gyazo.com/b6cb03330bff21a5538b4f9557e24bb3
package.jsonのバージョン指定でlatestとなっているものは直ちにやめ、明確なバージョン名を指定しましょう。 latest指定をするとどうなる?
latest (または *)は常に最新のバージョンを指すため、インストール時に最新バージョンが自動的に取得されます。例えば、以下のような指定があった場合にnpm install を実行すると、現時点(2025-09-14)でのReactの最新バージョンがインストールされます code:json:react-latest/package.json
{
"dependencies": {
"react": "latest"
}
}
code:json:react-latest/package-lock.json
"node_modules/react": {
"version": "19.1.1",
"integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
}
latest ではなく、特定のバージョンを指定した場合はそのバージョンがインストールされます
code:react-18/package.json
{
"dependencies": {
"react": "18.3.1"
}
}
code:react-18/package-lock.json
"node_modules/react": {
"version": "18.3.1",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
}
バージョン指定を常に最新にすることの問題点とその理由
latestを指定することで常に最新版をインストールすることになり、手動でバージョンを更新する手間が省けるという利点があります
これは非公開でのPoCや個人プロジェクトなど、頻繁にバージョンアップデートを追いかける必要がない場合には有効な手段です
ですが、これをチーム開発で運用する公開されたプロダクトで扱うにはいくつかの問題があります
1. 予期しない破壊的変更の影響を受けるリスク
latest は常に最新版を指すため、メジャーバージョンアップが含まれる可能性があります。例えば、今日は 2.5.0 だったパッケージが翌日メジャーバージョンアップデートで 3.0.0 となり、破壊的変更によりアプリケーションが動作しなくなるリスク が増えます。CI/CDパイプラインでも、今日成功したビルドが翌日には失敗する可能性もあります
どのバージョンが実際に動いているか把握できないため、セキュリティ脆弱性が報告されても影響範囲の特定が困難です
また、意図せず脆弱性を含む最新版を自動的に取り込んでしまうリスクもあります。最近はマルウェアが混入されたものが公開されるケースもあるため、安易に最新版を取り込むこと自体の危険性が高くなってもいます 障害発生時に 「どのパッケージのどのバージョンが原因か」を特定することが難しくなります。また、以前の安定していた状態に戻すことも、具体的なバージョン番号が不明瞭になるため、迅速な対応が困難になります
とはいえ何かしらのバージョン管理ツールを使用していればインストールしたときのバージョンが固定されたロックファイル(package-lock.json、yarn.lock、pnpm.lock、deno.lock、bun.lockなど)が生成されるため、latest のままで使っていても問題ないのでは?と思うかもしれません。
ですが、そうだとしても安心とは言えない理由があります
まず、ロックファイルを見ないと実際にどのバージョンがインストールされるか分からないため、そこを見る前提のやり取りが発生してしまいます。ロックファイルはpackage.jsonよりも内容量が多くより複雑なため、一目で中身を把握するのは困難です
レビュー時にもロックファイルの更新があった際に、 内容が多くインストール時のバージョンが変わってしまうことに気づけないことがあります。認知負荷が高くなり、レビューの質が下がる可能性があります