Open7

pnpmを使う

astatsuyaastatsuya
astatsuyaastatsuya

みんなにやってもらう手順

自分はcorepackで入れてしまったけど、下記の方が無難?

  1. https://pnpm.io/installation#using-npm でinstall
  2. npm remove -g npmでnpm削除
  3. corepack install npmでnpm再インストール
  4. corepack use npmでnpmをpnpm導入するプロジェクトで使えないようにする
  5. 一応git管理されてないファイルの削除(.next、.node_modules)
astatsuyaastatsuya

変更手順

  1. みんなでやってもらう手順をやる
  2. corepack use pnpm
  3. package-lock.json削除
  4. (いらなかったかも)pnpm i
  5. pnpm run dev, pnpm run build && pnpm run startで動くか確認
  6. package.jsonに諸々修正
  7. ciのgithub actionsとかを諸々修正
astatsuyaastatsuya

package.jsonに諸々設定

  1. corepack use pnpmpackage.jsonpackageManagerフィールドが追加される "packageManager": "pnpm@9.2.0+sha512.98a80fd11c2e7096747762304106432b3ddc67dcf54b5a8c01c93f68a2cd5e05e6821849522a06fb76284d41a2660d5e334f2ee3bbf29183bf2e739b1dafa771"
  2. corepackの設定できていない人が間違ってnpmコマンド使ってインストールしないようにする
  "scripts": {
    "preinstall": "npx only-allow pnpm"
  },
  1. ついでにengines指定
  "engines": {
    "node:": ">=20",
    "pnpm": ">=9"
  }
astatsuyaastatsuya

ciのgithub actionsとかを諸々修正

参考資料

  1. pnpm/actions-setupでpnpmいれる
    • バージョンは何も指定しなければpackage.jsonのpacakgeManagerが使われるので指定しない
    • 指定するとハッシュ値まで完全指定しないと不一致のエラーが出る
  2. npmコマンド使っているところがあればpnpmに変える
  3. pnpm iは全然時間かからないので、actions/cacheは消し、actions/setup-nodeでキャッシュ指定する
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4 # Use version of packageManager in package.json
      - uses: actions/setup-node@v4
        with:
          node-version-file: ".node-version"
          cache: "pnpm"
astatsuyaastatsuya

ローカル環境ちゃんとしてる人

  • npmコマンド実行すると即エラーが出る
  • npm run devとかもエラーになる

ローカル環境ちゃんとしてない人

ちゃんとしてなくても大きな問題にはならないはず

  • npmコマンド実行しても即エラーは出ない
  • npm iするとインストールは始まるが、最後にエラーが出る
  • npm run devとかはエラーにならない
astatsuyaastatsuya

考察

しっかり考えるには下記の内容を理解する

実際のところ

  • npmだと動いてたのにpnpmだと動かないがおきなければ良さそう。置きても剥がすのそんな大変ではなさそう
  • pnpm iで差分がない場合が早いので、それだけでもローカル、CIでメリットありそう
  • npmコマンド使い続けちゃう問題はcorepackでしっかり防げるし、ローカルおかしくなっちゃってる人がいてもnpm iは防げるので平気そう

yarnやbunと比較

そんなにやってない

  • yarn v3はかつて試したけど、途中でどうしても動かなくなって剥がした経験がある。あと最近あまり聞かない。pnpmで不満なければ試さなくても良いかな・・・v4は最速っぽいけど https://zenn.dev/minedia/articles/2023-08-30-pnpm
  • pnpmはわりと使ってる人多い感じだし、悪い噂も目にしない。苦しければ叫びが聞こえるはず
  • bunはめっちゃ早くて好きだけど、プロダクションに影響与える部分で使うのは怖い
    • testで使うのは粘ってみたい。toBeInTheDocument動かない説があったけど、動かせるところまでは試した。手元でも何度も実行するからにはtestの速さは重要。ただそれよりも安定性が重要。