Open9

Homebrewのインストールスクリプトを走らせる前にXcode関連の手動インストールを勧める解説が見られる理由

oddstroddstr

比較的最近(たとえば2020年以降)に書かれたであろうネット上の解説記事でも、macOSにHomebrewを新たにインストールする際、公式のインストールスクリプトを実行する前にまずXcodeの開発環境かあるいはXcode Command Line Tools(以下、CLT)をインストールするという手順で書かれているものが散見される。

本来、インストールスクリプトにはCLTが未インストールの場合には適切にインストールする仕組みが備わっているため、実際にmacOSをクリーンインストールした状態からインストールスクリプトの実行のみで問題なくインストールできた

そこで、このような手順が広まっている原因として過去には手動インストールが必要だった時期があったのではという仮説を立て、Homebrewのインストールスクリプトにおけるの扱いの変遷を少し調べてみた。


https://brew.sh/ の冒頭のワンライナーで実行されるbashスクリプトの本体はここ。
https://github.com/Homebrew/install/blob/master/install.sh#L1-L7

履歴を眺めると2020年にRubyスクリプトからシェルスクリプトに移行されている。
https://github.com/Homebrew/install/issues/217

それで本題だが、CLTの有無をチェックして/usr/bin/softwareupdateでインストール、それがコケるようならxcode-select --installにフォールバック、という流れはこの時点から現在まで大筋変わっていない。
https://github.com/Homebrew/install/blob/6c49fb5818f76ea005b128fdb0c8e9c8c793f2b0/install#L292-L321
https://github.com/Homebrew/install/blob/6c49fb5818f76ea005b128fdb0c8e9c8c793f2b0/install#L116-L123

xcode-select --installだとGUIダイアログが出てうっとおしいよねってことで/usr/bin/softwareupdateを導入したのが2016年。
https://github.com/Homebrew/install/pull/33

さらに遡ると、xcode-select --installが導入されたのが2013年。それ以前はインストールを促すメッセージを出力するのみだった。
https://github.com/Homebrew/install/commit/23446e14d112ebc04722b07f3aa8b9f1b094863c

oddstroddstr

このインストールスクリプトの原型は2012年前半ごろまでGistに置かれていた(履歴)。
https://gist.github.com/mxcl/323731

Homebrewのホームページは mxcl.github.io/homebrew/ (2010年ごろ〜) → mxcl.github.io/homebrew/ (2013年ごろの一時期〜7月までは並立?) → brew.sh (遅くとも2013年3月〜)と移行しているようだ。brew.shの最古のアーカイブは以下。
https://web.archive.org/web/20130328163936/https://brew.sh/

oddstroddstr

ここで「あれ?インストールってgitリポジトリをcloneするから先にgitコマンドがないと動かないんじゃ?」という疑問が浮かぶかもしれないが、実はgitが使えるならまずcloneを試みるように変更されたのは2012年で、それ以前は単純にGitHubからcurlでtarballを落として展開するやり方だったので問題なかった。
https://github.com/Homebrew/install/commit/feb8cbcfd24661f3027cf7becb4cc55925427747

tarballを使う部分は、2018年にGitHubがダウンロードにTLS 1.2を要求するようになった際に廃止されている。
https://github.com/Homebrew/install/commit/efd4a2349154738887ee6bb27c794c8f05b7fa49

oddstroddstr

2013年になると、wikiのインストールページから逆にホームページを参照するようになっている(書き換えられた場合セキュリティ的に問題なため)。
https://web.archive.org/web/20130727153719/https://github.com/mxcl/homebrew/wiki/Installation

当時のホームページは、使用法が先にあって最後にインストールスクリプトが書かれているのが現在と異なる構成だが、「何をやってるのかはスクリプト読んでね」という立場でインストールページへの誘導があるのみで特にXcodeについて触れられていないのは現在と変わらない。
https://web.archive.org/web/20130722111217/http://mxcl.github.io/homebrew/

oddstroddstr

CLTについてXcodeとの関係やxcode-selectxcodebuildも含めよくまとまっている解説。
https://techracho.bpsinc.jp/wingdoor/2021_04_09/104821

経緯としては、Xcode 3.0で複数のXcode開発環境を切り替えるツールとしてxcode-selectが導入され、4.3でXcode開発環境本体が/Developerを使うのをやめてXcode.appパッケージ以下に全部内包するようになると同時にCLTが切り離された感じなのかな。
https://web.archive.org/web/20130825234100/http://mkdir.g.hatena.ne.jp/ymrl/20120226/1330222634
https://www.hsbt.org/diary/20120218.html

oddstroddstr

まとめ

  • 2012年ごろまでは、インストールスクリプト実行→必要に応じてXcodeやCLTをインストールという流れだった。
  • 2013年にインストールスクリプトを実行すると必要性を判断してCLTがインストールされるようになった。
  • なので事前にCLTをインストールしておく必要はない。
  • ただしネット上の質問などを眺めるとCLTの再インストールが必要になる場合があったり、そもそもCLTのダウンロードとインストールには少し時間がかかるので手動で入れておくほうがいいという考え方もあったりするので、インストール方法を知っておくに越したことはない。