行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

yarnコマンドで発生したgyp ERR!の原因究明と対処方法

アプリケーションのnode.jsのバージョンを上げて、yarn installコマンドを実行したら以下のようなエラーが発生しました。

1 error generated.
make: *** [Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/my_name/my_app/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:390:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
gyp ERR! System Darwin 20.6.0
gyp ERR! command "/usr/local/var/nodebrew/node/v16.13.1/bin/node" "/Users/my_name/my_app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/my_name/my_app/node_modules/node-sass
gyp ERR! node -v v16.13.1

エラー内容を確認するとnode-sassという記載があります。

node-sassはpackage.jsonには記載のないライブラリでした。そのため、アプリケーションで使用している何かライブラリが依存しているということがわかります。

原因究明の方法

yarn why [モジュール名]というコマンドで、間接的に依存しているライブラリを特定できます。

$ yarn why node-sass

[1/4] 🤔  Why do we have the module "node-sass"...?
[2/4] 🚚  Initialising dependency graph...
[3/4] 🔍  Finding dependency...
[4/4] 🚡  Calculating file sizes...
=> Found "node-sass@4.14.1"
info Reasons this module exists
   - "@rails#webpacker" depends on it
   - Hoisted from "@rails#webpacker#node-sass"
info Disk size without dependencies: "2.97MB"
info Disk size with unique dependencies: "11.13MB"
info Disk size with transitive dependencies: "23.48MB"
info Number of sha

"@rails#webpacker" depends on itという記載がありますので、@rails#webpackerで使用されているnode-sassのバージョンに問題があることがわかります。

対処方法

@rails#webpackerで使用しているnode-sassのバージョンに問題があることがわかりましたので、本体となる@rails#webpackerのバージョンを上げてみようと思います。

package.jsonの記載を以下のように変更しました。

    "@rails/webpacker": "^5.4.3",

その後、yarn installを実行したら正常にインストールが完了しました。

めでたしめでたし。