Macでnode 14.18.1でビルドしたい【2025年版】

ひとりごとの作業記録です。

# 0.ゴール

Macで「node 14.18.1」でビルドしたい。
ただし、特定プロジェクトでのみ「node 14.18.1 」を使いたい。
開発環境は「MacOS Sequoia 15.2」 
Macはアップルシリコン

# 1.状況確認

```jsx
node -v
v22.13.1
```

現在、「v22.13.1」を使ってる。ダメだダメだダメだ！新しすぎる。
もっと、古くてオールドで、時代を超えたダサさをまとったものがいい。

nvmを使って複数バージョン入れるのが得策だろう。

# 2.nvmを使って特定nodeをインストール

## 2-1.nvmの状態確認

まずは現状確認。

```jsx
nvm --version
0.40.1
```

まぁまぁ、これはこれで、このバージョンがいいだろう。
nvm と node_modules は、新しければ新しいほどいいのだ。

ところで、今回使いたい「14.18.1」は、nvmで管理されているのだろうか？

```jsx
nvm list

       v22.13.0
->     v22.13.1
         system
default -> lts (-> N/A)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v22.13.1) (default)
stable -> 22.13 (-> v22.13.1) (default)
lts/* -> lts/jod (-> v22.13.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.20.6 (-> N/A)
lts/iron -> v20.18.2 (-> N/A)
lts/jod -> v22.13.1
```

目的のバージョンが入っていない。
まぁそうだろう。
骨董品でレガシーなバージョンだからこそ入れるのだ。

よし、いれるぜ。

## 2-2.nvmで目的のバージョンインストール

「えい！」

と、勢いのまま叩く。

```jsx
nvm install 14.18.1

Downloading and installing node v14.18.1...
Downloading https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz...
curl: (56) The requested URL returned error: 404

download from https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz failed
grep: /Users/mac-user/.nvm/.cache/bin/node-v14.18.1-darwin-arm64/node-v14.18.1-darwin-arm64.tar.xz: No such file or directory
Provided file to checksum does not exist.
Binary download failed, trying source.
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Local cache found: ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
Checksums match! Using existing downloaded archive ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
$>./configure --prefix=/Users/mac-user/.nvm/versions/node/v14.18.1 <
Node.js configure: Found Python 3.11.11...
Please use python3.9 or python3.8 or python3.7 or python3.6 or python3.5 or python2.7.
nvm: install v14.18.1 failed!
```

おっと。

python 3.11.xではダメらしい。
python3.9を入れなければならない。

失われたイニシエの技術を使うために、過去に戻るのだ。

でも当然・・・

## 2-3.Pythonのバージョンをプロジェクトごとに切り替えたい

ので、

手っ取り早く、pyenvを使うのがいいよね。

pyenvで現在のバージョンを調べる。

```jsx
pyenv versions
  system
  3.11.4
* 3.11.11 (set by /Users/mac-user/.pyenv/version)
```

当たり前だけと、3.11.11になってる。
3.9系を入れるよ。

「えい！」

```jsx
pyenv install 3.9.21

pyenv versions
  system
  3.9.21
  3.11.4
* 3.11.11 (set by /Users/mac-user/.pyenv/version)
```

よし。

次に特定ディレクトリだけ「3.9.21」を使うようにするため仮想環境作る。

```jsx
cd /path/to/project
pyenv local 3.9.21

python --version
Python 3.9.21
```

よし！OKだ！

## 2-4.改めてnvmで目的のバージョンインストール

では、気を取り直して「14.18.1」をインストールしよう。

```jsx
nvm install 14.18.1

nvm install 14.18.1
Downloading and installing node v14.18.1...
Downloading https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz...
curl: (56) The requested URL returned error: 404

download from https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz failed
grep: /Users/mac-user/.nvm/.cache/bin/node-v14.18.1-darwin-arm64/node-v14.18.1-darwin-arm64.tar.xz: No such file or directory
Provided file to checksum does not exist.
Binary download failed, trying source.
Detected that you have 10 CPU core(s)
Running with 9 threads to speed up the build
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Local cache found: ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
Checksums match! Using existing downloaded archive ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
$>./configure --prefix=/Users/mac-user/.nvm/versions/node/v14.18.1 <
pyenv: python3.9: command not found

The `python3.9' command exists in these Python versions:
  3.9.21

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.
nvm: install v14.18.1 failed!
```

「だめじゃん！」

まじで大声で叫んでしまった。

「なんだよ、これ、いったいどういうことだよ。
　わっけわかんねーよ！」

遥か太古大昔の失われたバージョンだからといって
ちょっとハードル高すぎない？

## 2-5.わっけわからないので、頭の中を整理する

```jsx
特定プロジェクトでのみnode 14.18.1 を使いたいので、下記の通り処理を行った。
エラーが出てわけわからんから、ChatGPTちゃん、助けてちょーーー。
以下情報だよ。

pyenv install 3.9.21

cd /path/to/project
pyenv local 3.9.21

nvm install 14.18.1

Downloading and installing node v14.18.1...
Downloading https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz...
curl: (56) The requested URL returned error: 404

download from https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-arm64.tar.xz failed
grep: /Users/mac-user/.nvm/.cache/bin/node-v14.18.1-darwin-arm64/node-v14.18.1-darwin-arm64.tar.xz: No such file or directory
Provided file to checksum does not exist.
Binary download failed, trying source.
Detected that you have 10 CPU core(s)
Running with 9 threads to speed up the build
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Local cache found: ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
Checksums match! Using existing downloaded archive ${NVM_DIR}/.cache/src/node-v14.18.1/node-v14.18.1.tar.xz
$>./configure --prefix=/Users/mac-user/.nvm/versions/node/v14.18.1 <
pyenv: python3.9: command not found

The `python3.9' command exists in these Python versions:
  3.9.21

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.
nvm: install v14.18.1 failed!
```

---

このエラーは **「nvm が Apple Silicon (Arm64) 向けの Node v14.18.1 のバイナリを取得できず、ソースコードからビルドしようとしたところ、ビルドに必要な Python（python3.9）コマンドが見つからない」** ために発生しています。

エラーメッセージに `pyenv: python3.9: command not found` とあるように、pyenv で 3.9.21 をインストールしても、実際に `python3.9` が呼び出せていない状態です。

**Rosetta2 (x86_64) シェル** で `nvm install 14.18.1` し、x86_64 バイナリをインストールするのが一番確実です。

---

まじか。

## 2-6.言われるがままにロゼッタ入れるぜ

もう為す術もなく、言われるがままに・・・。

```jsx
softwareupdate --install-rosetta
I have read and agree to the terms of the software license agreement. A list of Apple SLAs may be found here: https://www.apple.com/legal/sla/
Type A and press return to agree: A
2025-01-23 19:47:52.978 softwareupdate[19627:1962387] Package Authoring Error: 072-44352: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
Install of Rosetta 2 finished successfully
```

入った。

## 2-7.三度目の正直！nvmで目的のバージョンインストール

もう、どうとでもなれ。

```jsx
arch -x86_64 zsh
nvm install 14.18.1

Downloading and installing node v14.18.1...
Downloading https://nodejs.org/dist/v14.18.1/node-v14.18.1-darwin-x64.tar.xz...
##################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.18.1 (npm v6.14.15)
```

入った！

# 3.特定バージョンでビルド！

## 3-1.目的のバージョンが入ってるか再度確認

一応、再度確認だ。

```jsx
nvm current
v14.18.1

nvm list
->     v14.18.1
       v22.13.0
       v22.13.1
         system
default -> lts (-> N/A)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v22.13.1) (default)
stable -> 22.13 (-> v22.13.1) (default)
lts/* -> lts/jod (-> v22.13.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.20.6 (-> N/A)
lts/iron -> v20.18.2 (-> N/A)
lts/jod -> v22.13.1
```

よし！

当たり前だがv14.18.1になっている。

でも、あくまで標準は22.13.1にしたい。

なのでこれは叩いとく。

```jsx
nvm alias default 22.13.1
```

## 3-2.目的バージョンでビルド

```jsx
nvm use 14.18.1
npm i
npm run build
```

できた！！！

長い道のりだった。

(fin)