🌅

【非推奨】2024年こそ corepack を使おう

2024/01/02に公開

普段の開発では nodenv を使って各プロジェクトのバージョンに合わせた Node.js をインストールしています。その後、各プロジェクトの README や package.json を頼りに npm install -g yarnnpm install -g pnpm することが多いです。

先日、同僚から「最近は corepack 使ってますよ」と教えてもらったので、「おーもう実務で使えるのかー」と一気にモチベーションが上がったので corepack 使っていきたいと思います。

まずはこちらの鉄板記事でおさらい。

https://zenn.dev/teppeis/articles/2021-05-corepack

corepack を使っていくということは yarn や pnpm の管理を corepack に任せるということなので、まずは global install しているそれらを削除して実験してみます。

yarn を使っているプロジェクトで検証

とある yarn を使っているプロジェクト

$ node -v
v18.19.0

$ yarn -v
1.22.19

$ corepack -v
0.22.0

yarn を削除してみます。

$ npm uninstall -g yarn

いなくなりました。

$ yarn
nodenv: yarn: command not found

package.jsonpackageManager フィールドを追加します。

"packageManager": "yarn@1.22.19"

corepack enable yarn はまだ必須なのかなーと調べるために、あえてこのまま yarn 実行。まだだめ。

$ yarn
nodenv: yarn: command not found

corepack enable yarn します。

$ corepack enable yarn

そして、おもむろに yarn と叩くと...

$ yarn
yarn install v1.22.19
[1/5] 🔍  Validating package.json...
[2/5] 🔍  Resolving packages...
success Already up-to-date.
✨  Done in 0.20s.

うおおおおおおおおおおおおお!勝手にインストールされて実行されました!わかっていても感動する🎉

pnpm を使っているプロジェクトで検証

とある pnpm を使っているプロジェクト

$ node -v
v18.9.0

$ pnpm -v
8.7.0

$ corepack -v
0.17.1

corepack のバージョンがちょっと古い 0.17 なのは、node が 18.9 と、先ほどのプロジェクトの 18.19 よりも node 自体がちょっと古いからですかね。

pnpm を削除してみます。

$ npm uninstall -g pnpm

あれ、いなくならない

$ pnpm
Version 8.7.0

よくよく確認すると...おおお!こちらの既存プロジェクトでは既に "packageManager": "pnpm@8.7.0"package.json に定義されていました。さすが同僚氏!

しかも過去に無意識で corepack enable pnpm をしたことがあったことも、この記事を書きながら検証していて気付きました。なんだったら Dockerfile ではかなり前から当たり前に使われていて、corepack って既に常識にすらなっていたんですね。知らなかった!

corepack use

corepack 0.20 以降は corepack use コマンドで package.json への追加ができます。しかもこのコマンドを使うと SHA-256 ハッシュを含むバージョンが指定されます。公式の README では、セキュリティのため、ハッシュはオプションだけど付与することが強く推奨されています。

https://github.com/nodejs/corepack/blob/main/README.md#when-authoring-packages

corepack use 使用例

$ corepack use yarn@1.22.19
Installing yarn@1.22.19 in the project...

yarn install v1.22.19

追加されるバージョン

{
  "packageManager": "yarn@1.22.19+sha256.732620bac8b1690d507274f025f3c6cfdc3627a84d9642e38a07452cc00e0f2e"
}

まとめ

Node.js にバンドルされていてすぐに使えますし、既に当たり前に使っている人は多そうですが、yarn や pnpm の管理がシュッとできて便利なので、2024年こそ corepack 使っていきましょう!

昨日までの私のように、まだ corepack を意識して使っていなくて、そろそろ使った方が良いのかなーどうなのかなーとちょっと迷っている方の参考になれば幸いです。

それでは!

株式会社モニクル

Discussion