幅広い知識と幅広いスキルを求められている系システムエンジニアです。リモートワークしかやりません。

WSL2(Ubuntu 20.04) + nodenv でsharp関連の symbol lookup errorが出る

同じ状況の人の助けになれば幸いです。

事象

Gatsbyのプロジェクトを作る時に以下のコマンドの流れで作成&起動しようとしたところ...

$ nodenv install 16.15.1
$ nodenv global 16.15.1
$ npx gatsby new hogehoge
$ cd hogehoge
$ yarn develop
/home/watashi/.nodenv/versions/16.15.1/bin/node: symbol lookup error: /project/hogehoge/node_modules/sharp/build/Release/sharp-linux-x64.node: undefined symbol: vips_fail_on_get_type
error Command failed with exit code 127.

というエラーが出て動きませんでした。

解決方法

私の開発環境はUbuntu 20.04 on WSL2なのですが、 Ubuntu 22.04にアップグレードしたところ直りました。

アップグレード方法はこちらの記事を参考にさせていただきました。
【WSL2】Ubuntu 20.04.4 LTS を 22.04 LTS へアップグレードした

もし環境が日本語になっているのであれば、英語にしてから実行するのをオススメします(画面が崩れるので)

$ export LC_ALL="en_US.UTF-8"
$ export LANG="en_US.UTF-8"

解決までの流れ

1. GatsbyのリポジトリでIssueを探す

gatsby-source-contentful: undefined symbol: vips_fail_on_get_type · Issue #35524 · gatsbyjs/gatsby

これが見つかりますが、特に複数バージョンのsharpが入っているということもありません。 yarn why sharp というコマンドでこれはチェックできます。

$ yarn why sharp

yarn why v1.22.18
[1/4] Why do we have the module "sharp"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "sharp@0.30.7"
info Reasons this module exists
   - "gatsby-plugin-manifest" depends on it
   - Hoisted from "gatsby-plugin-manifest#sharp"
   - Hoisted from "gatsby-plugin-sharp#sharp"
   - Hoisted from "gatsby-transformer-sharp#sharp"
   - Hoisted from "gatsby#gatsby-sharp#sharp"
info Disk size without dependencies: "3.02MB"
info Disk size with unique dependencies: "4.04MB"
info Disk size with transitive dependencies: "5.57MB"
info Number of shared dependencies: 30
Done in 0.77s.

0.30.7 しか入っていませんね。

2. とりあえずのnode_moduleのクリーンインストール

$ rm -rf node_modules; rm package-lock.json; rm yarn.lock; yarn cache clean; yarn install
$ yarn develop

変わらず。

2. nodeのバージョン変えてみる

$ nodenv install 18.4.0
$ nodenv local 18.4.0
$ yarn develop

変わらず。

3. nodeのバージョンをsystem標準に

$ nodenv local system
$ node --version  # v18.2.0
$ yarn develop

動く!なんでやねん。18.2.0なら動く...?

$ nodenv local 18.2.0
$ yarn develop

動かない...なんでやねん...

nodenvが悪さしてるのかなとググってみたんですが特にそれっぽい情報にはたどり着けず。

4. macではどうか?

macOSで冒頭のコマンドで環境を作ったらすんなり動きました。ということはWSL2かUbuntuの問題ですね。

5. Ubuntu 20.04の問題だよという情報

その後なんやかんやググっていたら

Ubuntu 20.04の問題なので、22.04にアップグレードしたら直るよ
-- Symbol lookup error on linux · Issue #2015 · Automattic/node-canvas

という情報が見つかりました。

参考にした情報

© 2023 @miiton