Open3

M3 MacでLaravel Mixのためにnpm run devできるようになるまで

shibuchaaaanshibuchaaaan

かなり詰まったので備忘としてやったことを記録。

やりたいこと

LaravelでLaravel Mixを使うためにnpm run devしたい。
そのために、まずはnpm installから。

環境

  • Apple M3のMacBook Air
  • Mac OS 15.1

事象

npm installしたところ、下記エラーに。

npm error code 1
npm error path /Users/username/workspace/laravel_app/node_modules/node-sass
npm error command failed
npm error command sh -c node scripts/build.js
npm error Building: /usr/local/bin/node /Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm error gyp info it worked if it ends with ok
npm error gyp verb cli [
npm error gyp verb cli   '/usr/local/bin/node',
npm error gyp verb cli   '/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js',
npm error gyp verb cli   'rebuild',
npm error gyp verb cli   '--verbose',
npm error gyp verb cli   '--libsass_ext=',
npm error gyp verb cli   '--libsass_cflags=',
npm error gyp verb cli   '--libsass_ldflags=',
npm error gyp verb cli   '--libsass_library='
npm error gyp verb cli ]
npm error gyp info using node-gyp@3.8.0
npm error gyp info using node@22.13.0 | darwin | arm64
npm error gyp verb command rebuild []
npm error gyp verb command clean []
npm error gyp verb clean removing "build" directory
npm error gyp verb command configure []
npm error gyp verb check python checking for Python executable "python2" in the PATH
npm error gyp verb `which` failed Error: not found: python2
npm error gyp verb `which` failed     at getNotFoundError (/Users/username/workspace/laravel_app/node_modules/which/which.js:13:12)
npm error gyp verb `which` failed     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:19)
npm error gyp verb `which` failed     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/which/which.js:89:16
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/index.js:42:5
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/mode.js:8:5
npm error gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21)
npm error gyp verb `which` failed  python2 Error: not found: python2
npm error gyp verb `which` failed     at getNotFoundError (/Users/username/workspace/laravel_app/node_modules/which/which.js:13:12)
npm error gyp verb `which` failed     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:19)
npm error gyp verb `which` failed     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/which/which.js:89:16
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/index.js:42:5
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/mode.js:8:5
npm error gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21) {
npm error gyp verb `which` failed   code: 'ENOENT'
npm error gyp verb `which` failed }
npm error gyp verb check python checking for Python executable "python" in the PATH
npm error gyp verb `which` failed Error: not found: python
npm error gyp verb `which` failed     at getNotFoundError (/Users/username/workspace/laravel_app/node_modules/which/which.js:13:12)
npm error gyp verb `which` failed     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:19)
npm error gyp verb `which` failed     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/which/which.js:89:16
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/index.js:42:5
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/mode.js:8:5
npm error gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21)
npm error gyp verb `which` failed  python Error: not found: python
npm error gyp verb `which` failed     at getNotFoundError (/Users/username/workspace/laravel_app/node_modules/which/which.js:13:12)
npm error gyp verb `which` failed     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:19)
npm error gyp verb `which` failed     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/which/which.js:89:16
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/index.js:42:5
npm error gyp verb `which` failed     at /Users/username/workspace/laravel_app/node_modules/isexe/mode.js:8:5
npm error gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21) {
npm error gyp verb `which` failed   code: 'ENOENT'
npm error gyp verb `which` failed }
npm error gyp ERR! configure error 
npm error gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
npm error gyp ERR! stack     at PythonFinder.failNoPython (/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/lib/configure.js:484:19)
npm error gyp ERR! stack     at PythonFinder.<anonymous> (/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/lib/configure.js:406:16)
npm error gyp ERR! stack     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:16)
npm error gyp ERR! stack     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp ERR! stack     at /Users/username/workspace/laravel_app/node_modules/which/which.js:89:16
npm error gyp ERR! stack     at /Users/username/workspace/laravel_app/node_modules/isexe/index.js:42:5
npm error gyp ERR! stack     at /Users/username/workspace/laravel_app/node_modules/isexe/mode.js:8:5
npm error gyp ERR! stack     at FSReqCallback.oncomplete (node:fs:198:21)
npm error gyp ERR! System Darwin 24.1.0
npm error gyp ERR! command "/usr/local/bin/node" "/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm error gyp ERR! cwd /Users/username/workspace/laravel_app/node_modules/node-sass
npm error gyp ERR! node -v v22.13.0
npm error gyp ERR! node-gyp -v v3.8.0
npm error gyp ERR! not ok 
npm error Build failed with error code: 1
npm error A complete log of this run can be found in: /Users/username/.npm/_logs/2025-01-22T04_05_51_107Z-debug-0.log

なんかいっぱい書いてあるので、しっかり1行ずつ読んでいく。

npm error path /Users/username/workspace/laravel_app/node_modules/node-sass
npm error command failed

まず、Laravelアプリディレクトリ直下のnode_modules/node-sassで何かのコマンド実行が失敗したみたい。

npm error command sh -c node scripts/build.js
npm error Building: /usr/local/bin/node /Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm error gyp info it worked if it ends with ok

このコマンドはOKで完了してそう。

npm error gyp verb cli [
npm error gyp verb cli   '/usr/local/bin/node',
npm error gyp verb cli   '/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js',
npm error gyp verb cli   'rebuild',
npm error gyp verb cli   '--verbose',
npm error gyp verb cli   '--libsass_ext=',
npm error gyp verb cli   '--libsass_cflags=',
npm error gyp verb cli   '--libsass_ldflags=',
npm error gyp verb cli   '--libsass_library='
npm error gyp verb cli ]

次にこのコマンドを実行したっぽい。

npm error gyp info using node-gyp@3.8.0
npm error gyp info using node@22.13.0 | darwin | arm64

node-gypは3.8.0、nodeは22.13.0を使っているよという情報。

npm error gyp verb command rebuild []
npm error gyp verb command clean []
npm error gyp verb clean removing "build" directory
npm error gyp verb command configure []

rebuild実行、clean実行、そしてconfigureを実行。

npm error gyp verb check python checking for Python executable "python2" in the PATH
npm error gyp verb `which` failed Error: not found: python2

ここで実行可能なpython2のパスをチェックして、「python2が無いよ!」と怒られ失敗しているみたい。

npm error gyp verb `which` failed     at getNotFoundError (/Users/username/workspace/laravel_app/node_modules/which/which.js:13:12)
npm error gyp verb `which` failed     at F (/Users/username/workspace/laravel_app/node_modules/which/which.js:68:19)
npm error gyp verb `which` failed     at E (/Users/username/workspace/laravel_app/node_modules/which/which.js:80:29)
npm error gyp verb `which` failed     at
...

その後もいろんなところでwhichが失敗し続けてる。

npm error gyp verb check python checking for Python executable "python" in the PATH
npm error gyp verb `which` failed Error: not found: python

「pythonも無いよ!」と怒られてる。

npm error gyp ERR! configure error 
npm error gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
npm error gyp ERR! stack     at PythonFinder.failNoPython (/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/lib/configure.js:484:19)
npm error gyp ERR! stack     at PythonFinder.<anonymous> (/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/lib/configure.js:406:16)

結局、configureの実行で実行可能なpythonのパスがないことでダメだったようです。

npm error gyp ERR! command "/usr/local/bin/node" "/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm error gyp ERR! cwd /Users/username/workspace/laravel_app/node_modules/node-sass
npm error gyp ERR! node -v v22.13.0
npm error gyp ERR! node-gyp -v v3.8.0
npm error gyp ERR! not ok 

コケたコマンドは"/usr/local/bin/node" "/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
nodeはv22.13.0、node-gypはv3.8.0。

ということで、python2をmacにインストール。

shibuchaaaanshibuchaaaan

python2インストール

brew installだと、「python@2は使えないですよ」と言われてしまった

brew install python@2
==> Downloading https://formulae.brew.sh/api/formula.jws.json
==> Downloading https://formulae.brew.sh/api/cask.jws.json
Warning: No available formula with the name "python@2". Did you mean bpython, ipython, jython or cython?

ので、「pyenv」というPython バージョン管理のツールを使ってインストールする。
複数のPythonバージョンを使用するのに便利らしい。
参考:https://zenn.dev/grahamian/articles/cfcd4039194117

brew install pyenv

pyenvの設定
これで、pyenv経由でインストールしたpythonを使えるようにする(多分)

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc

参考:https://github.com/pyenv/pyenv#installation

pyenvインストール&設定できたら、python2をインストール

pyenv install 2.7.18

which pythonでpyenvのpythonを使うようになっているか確認

which python
/Users/username/.pyenv/shims/python

デフォルトで使うpythonを2.7.18に設定し、

pyenv global 2.7.18

確認

% pyenv versions
  system
* 2.7.18 (set by /Users/username/.pyenv/version)
% python -V
Python 2.7.18
% python2 -V
Python 2.7.18

参考:https://dev.classmethod.jp/articles/pyenv-command-not-found/

shibuchaaaanshibuchaaaan

再度npm installしたら、次は違うエラー…つらいけど1行ずつ見ていくか…

npm error code 1
npm error path /Users/username/workspace/laravel_app/node_modules/node-sass
npm error command failed
npm error command sh -c node scripts/build.js
npm error Building: /usr/local/bin/node /Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm error gyp info it worked if it ends with ok
npm error gyp verb cli [
npm error gyp verb cli   '/usr/local/bin/node',
npm error gyp verb cli   '/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js',
npm error gyp verb cli   'rebuild',
npm error gyp verb cli   '--verbose',
npm error gyp verb cli   '--libsass_ext=',
npm error gyp verb cli   '--libsass_cflags=',
npm error gyp verb cli   '--libsass_ldflags=',
npm error gyp verb cli   '--libsass_library='
npm error gyp verb cli ]
npm error gyp info using node-gyp@3.8.0
npm error gyp info using node@22.13.0 | darwin | arm64
npm error gyp verb command rebuild []
npm error gyp verb command clean []
npm error gyp verb clean removing "build" directory
npm error gyp verb command configure []
npm error gyp verb check python checking for Python executable "python2" in the PATH
npm error gyp verb `which` succeeded python2 /Users/username/.pyenv/shims/python2
npm error (node:26508) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.
npm error (Use `node --trace-deprecation ...` to show where the warning was created)
npm error gyp verb check python version `/Users/username/.pyenv/shims/python2 -c "import sys; print "2.7.18
npm error gyp verb check python version .%s.%s" % sys.version_info[:3];"` returned: %j
npm error gyp verb get node dir no --target version specified, falling back to host node version: 22.13.0
npm error gyp verb command install [ '22.13.0' ]
npm error gyp verb install input version string "22.13.0"
npm error gyp verb install installing version: 22.13.0
npm error gyp verb install --ensure was passed, so won't reinstall if already installed
npm error (node:26508) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
npm error gyp verb install version is already installed, need to check "installVersion"
npm error gyp verb got "installVersion" 9
npm error gyp verb needs "installVersion" 9
npm error gyp verb install version is good
npm error gyp verb get node dir target node version installed: 22.13.0
npm error gyp verb build dir attempting to create "build" dir: /Users/username/workspace/laravel_app/node_modules/node-sass/build
npm error gyp verb build dir "build" dir needed to be created? /Users/username/workspace/laravel_app/node_modules/node-sass/build
npm error gyp verb build/config.gypi creating config file
npm error gyp verb build/config.gypi writing out config file: /Users/username/workspace/laravel_app/node_modules/node-sass/build/config.gypi
npm error gyp verb config.gypi checking for gypi file: /Users/username/workspace/laravel_app/node_modules/node-sass/config.gypi
npm error gyp verb common.gypi checking for gypi file: /Users/username/workspace/laravel_app/node_modules/node-sass/common.gypi
npm error gyp verb gyp gyp format was not specified; forcing "make"
npm error gyp info spawn /Users/username/.pyenv/shims/python2
npm error gyp info spawn args [
npm error gyp info spawn args   '/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/gyp/gyp_main.py',
npm error gyp info spawn args   'binding.gyp',
npm error gyp info spawn args   '-f',
npm error gyp info spawn args   'make',
npm error gyp info spawn args   '-I',
npm error gyp info spawn args   '/Users/username/workspace/laravel_app/node_modules/node-sass/build/config.gypi',
npm error gyp info spawn args   '-I',
npm error gyp info spawn args   '/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/addon.gypi',
npm error gyp info spawn args   '-I',
npm error gyp info spawn args   '/Users/username/.node-gyp/22.13.0/include/node/common.gypi',
npm error gyp info spawn args   '-Dlibrary=shared_library',
npm error gyp info spawn args   '-Dvisibility=default',
npm error gyp info spawn args   '-Dnode_root_dir=/Users/username/.node-gyp/22.13.0',
npm error gyp info spawn args   '-Dnode_gyp_dir=/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp',
npm error gyp info spawn args   '-Dnode_lib_file=/Users/username/.node-gyp/22.13.0/<(target_arch)/node.lib',
npm error gyp info spawn args   '-Dmodule_root_dir=/Users/username/workspace/laravel_app/node_modules/node-sass',
npm error gyp info spawn args   '-Dnode_engine=v8',
npm error gyp info spawn args   '--depth=.',
npm error gyp info spawn args   '--no-parallel',
npm error gyp info spawn args   '--generator-output',
npm error gyp info spawn args   'build',
npm error gyp info spawn args   '-Goutput_dir=.'
npm error gyp info spawn args ]
npm error gyp: Undefined variable standalone_static_library in binding.gyp while trying to load binding.gyp
npm error gyp ERR! configure error 
npm error gyp ERR! stack Error: `gyp` failed with exit code: 1
npm error gyp ERR! stack     at ChildProcess.onCpExit (/Users/username/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/lib/configure.js:345:16)
npm error gyp ERR! stack     at ChildProcess.emit (node:events:524:28)
npm error gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:293:12)
npm error gyp ERR! System Darwin 24.1.0
npm error gyp ERR! command "/usr/local/bin/node" "/Users/v/workspace/laravel_app/node_modules/node-sass/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm error gyp ERR! cwd /Users/username/workspace/laravel_app/node_modules/node-sass
npm error gyp ERR! node -v v22.13.0
npm error gyp ERR! node-gyp -v v3.8.0
npm error gyp ERR! not ok 
npm error Build failed with error code: 1
npm error A complete log of this run can be found in: /Users/username/.npm/_logs/2025-01-22T06_03_08_182Z-debug-0.log