この記事はcorepack is 何?という素晴らしい記事を絶賛しつつ、改めてcorepackについて自分なりにまとめたものです。
チームメンバーがパッケージ周りで詰まっていて、解決ついでに先輩エンジニアから紹介されたのでみてみたら神でした。個人的に「なんとなくで使ってるけど、どんなことやってくれてるんだっけ?」と気になっていたため超タイムリーでした。
ちなみにこの記事の著者はサイボウズ社で開発されているつよつよな開発者。
この記事の魅力
まずですねーこの記事はcorepackについてめちゃくちゃわかりやすく解説してくれてる点がタイトル通り神なわけです。 いいね数も380を超え、その評価の高さもうなずけます。
記事では、Corepackの機能について、かなり詳しく説明されてるんですよ。npmやyarnみたいなパッケージマネージャを一括管理できるツールで、プロジェクトごとに使うパッケージマネージャを指定できるようになることが理解力低めな僕でも理解できちゃいました。
そんで、理論だけじゃなくて、実際にCorepackを使う方法についても、丁寧に説明されてるんです。package.jsonでパッケージマネージャを指定する方法とか、わかりやすい例も挙げられてて、すぐに試せる感じ。
自分なりにcorepackをまとめてみる
そもそもcorepackとは?ってなどの疑問をお持ちの方は本家の記事を参照ください笑
ここからは、自分なりに噛み砕いた内容が続くのでご了承ください。
導入することのメリット
1. パッケージマネージャの簡単な切り替え
Corepackを使えば、プロジェクトごとに使うパッケージマネージャを簡単に指定できるんです。package.jsonにパッケージマネージャとそのバージョンを書いておくだけで、そのプロジェクトではそのパッケージマネージャが自動的に使われるようになるんですよ。もう、パッケージマネージャのインストールとか、切り替えとかで悩む必要なしってわけです。
2. Node.jsエコシステムの標準化
Corepackを導入することで、Node.jsエコシステム全体でパッケージ管理の方法が標準化されるとのこと。みんなが同じようにパッケージマネージャを使えるようになるから、コラボレーションとかもスムーズになりそうな予感。
3. 開発者の好みに合わせた選択肢
Corepackは、npmやyarnだけじゃなくて、pnpmとかのパッケージマネージャもサポートしてる。そのため、開発者はそれぞれの好みに合わせて、使いたいパッケージマネージャを選べるようになるというわけ。自分に合ったツールで開発できるのって、個人的にすごく大事だと思います。
4. セットアッププロセスの簡略化
Corepackを使えば、パッケージマネージャをグローバルにインストールする必要がなくなるんです。だから、新しいプロジェクトを始めるときとかのセットアッププロセスがめっちゃ簡単になるんですよ。環境構築の手間が減るのは、開発者にとってはありがたい話ですよね。
Corepackとnpmの関係について
Corepackは、理論的にはnpmも他のパッケージマネージャと同じように扱えるんだけど、実際にはちょっと事情が違うみたい。Corepackのshim(Corepackが提供する一種のラッパーみたいなものらしい)って、デフォルトではnpmに対して有効になってないんですよね。
つまり、プロジェクトでyarnとかを使うように設定してても、npmコマンドを直接実行することはできちゃうんです。Corepackがnpmコマンドをキャッチできないからなんだとか。
で、"packageManager"プロパティに"npm"を指定することもできるんだけど、shimが効かないから、結局グローバルのnpmが使われちゃうとのこと。ちょっとややこしい😭
npm install -g yarnがうまくいかない問題
npmでyarnをグローバルにインストールしようとすると、Corepackのバイナリを上書きしちゃうから、うまくいかないらしい。
これを解決する手段として、そもそもnpm install -g yarn
しないと公式ドキュメントに書いてあります。
そもそも、Corepackがパッケージマネージャのバイナリを用意してくれるし、必要なバージョンも自動で揃えてくれるから、わざわざパッケージマネージャを個別にインストールする必要がないんですよね。
なので、Corepackを使っている場合はあらかじめnpm uninstall -g yarn pnpm
で削除しつつ、プロジェクトのpackage.json の packageManager フィールドに利用するパッケージマネージャーを指定するのが良い。(例:"packageManager": "yarn@2.0.0-rc.29")そしてyarn。
まとめ
Corepackは、Node.jsプロジェクトのパッケージ管理における多くの悩みを解決してくれる強力なツールです。プロジェクトごとのパッケージマネージャの切り替えや、チーム内でのバージョン統一などが簡単にできます。
Corepackを使ってNode.jsプロジェクトのパッケージ管理を改善したい方は、ぜひご一読を〜