🐷

M1 Macでエラー「fatal error: 'vips/vips8' file not found...」が発生したときの対処法

2021/02/09に公開

M1 MacでNode.jsを導入したうえで、Next.js(正確にはNext.jsに依存しているzenn-cli)をインストールしたところ以下のようなエラーが発生しました。

$ yarn install
...
> sharp@0.26.3 install /Users/foo/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.10.0/libvips-8.10.0-darwin-arm64v8.tar.br
ERR! sharp Prebuilt libvips 8.10.0 binaries are not yet available for darwin-arm64v8
info sharp Attempting to build from source via node-gyp but this may fail due to the above error
info sharp Please see https://sharp.pixelplumbing.com/install for required dependencies
  CC(target) Release/obj.target/nothing/../node-addon-api/nothing.o
  LIBTOOL-STATIC Release/nothing.a
warning: /Library/Developer/CommandLineTools/usr/bin/libtool: archive library: Release/nothing.a the table of contents is empty (no object file members in the library define global symbols)
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
../src/common.cc:24:10: fatal error: 'vips/vips8' file not found
#include <vips/vips8>
         ^~~~~~~~~~~~
1 error generated.
make: *** [Release/obj.target/sharp/src/common.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/foo/.nodenv/versions/14.15.4/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Darwin 20.3.0
gyp ERR! command "/Users/foo/.nodenv/versions/14.15.4/bin/node" "/Users/foo/.nodenv/versions/14.15.4/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"

> @ampproject/toolbox-optimizer@2.7.1-alpha.0 postinstall /Users/foo/node_modules/@ampproject/toolbox-optimizer
> node lib/warmup.js

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: sharp@0.26.3 (node_modules/sharp):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: sharp@0.26.3 install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

どうやらsharpという画像最適化のためのパッケージがうまく動いていないようです。

ERR! sharp Prebuilt libvips 8.10.0 binaries are not yet available for darwin-arm64v8

sharpは内部でlibvipsというネイティブの画像処理ライブラリを使っており、根本的にはこちらがエラーの原因だと思われます。

fatal error: 'vips/vips8' file not found #include <vips/vips8>

Next.jsの場合 => next/imageを使わないなら無視してOK

Next.jsは画像を最適化するnext/imageのためにsharpを使用します。少なくともv10.0.6時点ではnext/imageを使わないのであればsharpは不要です。

Next.jsのpackage.jsonを見ると、sharpoptionalDependenciesで指定されていることが分かります。

https://zenn.dev/catnose99/articles/7dfcd5b3e5b141

詳しくは上記の記事を読んでいただければと思いますが、optionalDependenciesインストールに失敗しても、他の処理は問題ないものとして継続するものなので、next/imageを使わないのであればエラーは無視してしまって問題ないと思われます。

zenn-cliのインストール時にこのエラーが出ても無視してOK

内部でNext.jsを使っているZenn CLIでもこのエラーが発生しますが、同様の理由からエラーは無視してしまって構いません。

根本的な対処法

M1 Mac対応のlibvipsをインストールすれば良いようです。

https://github.com/lovell/sharp/issues/2460#issuecomment-751491241

$ brew info vips
$ brew reinstall vips

Discussion