小ネタ集 4. 開発環境
2020年07月27日に公開

brew install yarn --ignore-dependenciesコマンドの「not present or broken」エラーに対応する

この記事には

  • nodebrew経由でNode.jsをインストールしたmacに、
  • yarnをインストールした際に発生する
  • 下記2つのエラー対応について書いています。
# yarn インストールコマンドの実行
$ brew install yarn --ignore-dependencies

# 1. icu4c not present or broken エラー
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/icu4c not present or broken
Please reinstall icu4c. Sorry :(

# 2. node not present or broken エラー
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/node not present or broken
Please reinstall node. Sorry :(

エラーの原因

下記コマンドで発生するエラーの原因は、yarnに必要なパッケージが足りないことにありました。

$ brew install yarn --ignore-dependencies

そもそもyarnのインストールには2つの方法があります。

1. 通常のyarnインストール

通常、Homebrewでyarnをインストールする場合は下記コマンドを実行します。

$ brew install yarn

公式 Installation | Yarn

このコマンドを実行すると3つのパッケージがインストールされます。

  1. icu4c
  2. node
  3. yarn

これはHomebrewのlistコマンドで確認できます。

$ brew list

icu4c yarn node ...

2. nodebrew経由でNode.jsをインストールした場合

Node.jsを「nodebrew」経由でインストールした場合は--ignore-dependenciesオプションを付けて実行します。

$ brew install yarn --ignore-dependencies

このオプションをつけるとyarnのみがインストールされ、Node.jsが2重にインストールされるのを防ぎます。

つまりHomebrew内にicu4cnodeがないことによりエラーが発生したのです。

エラー対応

3つの手順でyarnをインストールします。

1. icu4c not present or broken エラーに対応する

エラー内容
# 1. icu4c not present or broken エラー
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/icu4c not present or broken
Please reinstall icu4c. Sorry :(

このエラーに対応するためにはHomebrewにicu4cをインストールします。

$ brew install icu4c

listコマンドでインストールを確認します。

$ brew list
gettext		git		icu4c ...

2. node not present or broken エラーに対応する

エラー内容
# 2. node not present or broken エラー
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/node not present or broken
Please reinstall node. Sorry :(

このエラーはHomebrewにNode.jsがないことにより発生します。

しかしNode.jsは「nodebrew」経由でインストール済みであり、ここでインストールすると2重にインストールされます。

そこでyarnが参照する「node」ディレクトリにシンボリックリンクを設定します。

「node」ディレクトリを作成する

エラー内容にある通り、yarnは「/usr/local/opt/node」を参照します。

そこでディレクトリを作成します。

$ mkdir /usr/local/opt/node

シンボリックリンクを設定する

作成した「node」ディレクトリから「nodebrew」のNode.jsを参照するよう、シンボリックリンクを設定します。

$ ln -s ~/.nodebrew/current/ /usr/local/opt/node/
  • ln -s 参照元 参照元へのリンク名 … リンク名を参照しようとすると、リンク元を参照するようになる。いわゆるショートカットの役割を設定する。
  • -s オプション … リンクにはハードリンクとシンボリックリンクの2種類が存在し、このオプションはシンボリックリンクを指定する。

    シンボリックリンクは、リンク名を削除しても参照元への影響はない。

    参考 シンボリックリンクとは - kazmax - Linuxで自宅サーバー

3. yarn をインストールする

それではオプションを付けたyarnインストールコマンドを実行します。

$ brew install yarn --ignore-dependencies

インストールを確認しておきましょう。

$ yarn -v                                        

1.22.4

インストールができましたね。

参考 brew install yarn --ignore-dependencies で困ったのでメモ - Qiita

まとめ

下記コマンドでyarnをインストールした際にエラーが出た場合。

$ brew install yarn --ignore-dependencies
  • 依存関係のicu4cがHomebrewにあるか確認し、
  • 「nodebrew」のnodeへシンボリックリンクを設定する

この2つを実践することで対応できます。


筆者は公式のインストールコマンド$ brew install yarnを実行し、オプションを付けた場合と何が違うのかを比較した結果、この答えにたどり着きました。

プログラミングは比較、比較それまた比較の人生です。

あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる...。そんな方に向けた単発・短期間メンターサービスを行っています。下のサービスへお進みください。
独学プログラマのサービス