0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新旧 Mac で Homebrew + Node 環境を統一したかった話(macOS 12 で brew install node が失敗する問題)

0
Posted at

はじめに

普段から「クリーンな PC 環境」を意識しており、

  • 不要な PATH 設定は入れたくない
  • できるだけ OS 標準+Homebrew のデフォルト挙動に寄せたい
  • 複数の Mac で同じ.zprofileを使い回したい

という運用をしています。

今回、新しい Mac と古い Mac の両方で Node.js 環境を統一しようとしたところ、意外とハマったので備忘として残します。

環境

古い PC

  • MacBook Pro (Retina, 15-inch, Mid 2015)
  • macOS Monterey (12.x)
  • これ以上 OS をアップデートできないモデル

新しい PC

  • MacBook Pro (16-inch, 2019)
  • macOS Ventura 以降

やりたかったこと

理想は次の状態でした。

  • 両方の Mac で同じ.zprofileを使う
  • brew install nodeだけで Node を導入
  • ~/.zprofileに Node 用の PATH を書きたくない
  • なるべく「Homebrew 標準のやり方」に寄せたい

新しい Mac では、

brew install node

だけで

which node -> /usr/local/bin/node

となり、PATH 設定なしで普通に使えます。

この状態をそのまま古い Mac にも適用したかった、というのが出発点です。

実際に起きたこと

###新しい Mac

brew install node

→ そのまま成功
/usr/local/bin/nodeが利用可能
.zprofileに何も追記不要

理想通り。

古い Mac(macOS 12)

同じように

brew install node

を実行すると…

  • Node の最新バージョン(v25 系)を入れようとする
  • しかし macOS 12 では Bottle が提供されていない
  • 結果としてソースビルドが走る
  • そのビルドがリンクエラーで失敗

という状況に。

エラーログはこんな感じでした。

ld: symbol(s) not found for architecture x86_64
clang++: error: linker command failed

要するに

「macOS 12 では brew install node の最新版がビルドできない」

というのが根本原因でした。

試行錯誤したこと

  • brew update-reset
  • brew doctor
  • キャッシュ削除
  • HOMEBREW_NO_INSTALL_FROM_API=1 の設定
  • homebrew/core の再 tap

など一通りやりましたが、根本は

「古い OS で最新 Node を入れようとしている」

という構造問題だったため、どれも本質的な解決にはならず。

最終的な方針

考え方を変えてこう判断しました。

  • 古い Mac では「最新 Node」を使う必要はない
  • 安定して入る LTS を使えばいい
  • ただし PATH 設定はなるべく最小限にしたい

そこで採用したのが:

brew install node@20

という方法。

結論:こうした

古い Mac では最終的に .zprofile に次の1行だけ追加しました。

export PATH="/usr/local/opt/node@20/bin:$PATH"

これにより:

  • 古い Mac では Node 20 を安定して利用
  • 新しい Mac は brew install node のまま
  • それ以外の設定は両方で共通化

という形で落ち着きました。

学び・Tips

今回の件から得られた教訓:

1. ホスト OS に Node を直接入れるのは極力避ける

可能なら

  • Node
  • PHP
  • 各種ランタイム

は Docker コンテナ内で完結させた方がトラブルが少ない。

「ホスト OS を汚さない運用」はやはり正義。

2. 古い Mac は Homebrew の最新構成と相性が悪い

macOS 12 は Homebrew 的には Tier 3 扱い。

  • 最新の formula がビルドできない
  • bottle が提供されない
  • 公式サポート対象外

という前提を理解した上で運用する必要がある。

3. 環境統一は「理想」と「現実」の折り合い

本当は

brew install node だけで全 Mac 共通

にしたかったけど、OS の制約で断念。

環境差異がある場合は、

  • 「どこまで共通化するか」
  • 「どこからは割り切るか」

の線引きが重要。

まとめ

  • 新しい Mac → brew install node でOK
  • 古い Mac (macOS 12) → brew install node@20 + PATH 追加
  • それ以外は同一 .zprofile で運用

というのが現実的な落としどころでした。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?