Homebrewは元々はMac用のパッケージマネージャーです。そのHomebrewがv2.0からLinuxを正式サポートしました。同時にWSL(Windows Subystem for Linux)も正式にサポートしました。
この記事では、WSL上でHomebrewをセットアップする方法を解説します。
記事の更新情報
2022年7月24日
- Windows 11 Pro 21H2での動作を確認しました。 (記事作成時はWindows 10でした)
- 古いコマンドを新しいコマンドに置き換えました。
- インストール時に発生するエラー
curl
エラーについて追記しました。 - インストール時の操作を詳しくしました。
- 「開発環境をインストールするべきか」を追加しました。
Homebrewについて
HomebrewはmacOS上で広く使われているパッケージマネージャーです。Homebrew経由でインストールすると、次のような良いことがあります。
- 依存関係があるソフトを同時にインストールできる
- インストールしたソフトの更新やアンインストールが簡単にできる
Windowsの場合は、システム設定の「アプリと機能」から簡単にアンインストールできるソフトが多いので、アンインストールできる部分のメリットはあまり感じないかもしれません。
しかし、ソフトの更新や依存関係の解決などはメリットを感じるのではないでしょうか。
また、インストーラを使えば簡単にインストールできるから不要だという考えもあると思います。Homebrewを使うと、コンソールで1つのコマンドを実行するだけで、以下を実行してくれます。インストーラをダウンロードしてインストールするよりも簡単ではないでしょうか。
- 指定したパッケージ本体をダウンロードする。
- 依存関係があるパッケージをダウンロードする。
- ダウンロードしたパッケージを順番にインストールする。
- 必要なスクリプトの生成や実行を行う。
WSL上でメリットはあるのか?
WSL上で動作しているLinuxディストリビューションには元々パッケージマネージャーが入っています。ではメリットはあるのでしょうか?実はあります。たとえば、次のような点です。
- Linuxディストリビューションに依存せずに、パッケージを使用できる
- ホームディレクトリ配下にインストールされるので、システム環境を汚染しない
WSL上で使用するLinuxディストリビューションには、apt
などのシステムレベルのパッケージマネージャーがあります。しかし、インストール可能なパッケージはディストリビューションにより異なります。Homebrew経由の場合は、Homebrewが解決するのでディストリビューションに依存しません。
Windows版の動作環境
Windows版は、WSL(Windows Subsystem for Linux)で動作します。WSLはLinuxのバイナリをWindows上で動かす互換レイヤーです。そのため、正確にはHomebrewのWindows版が登場したのではなく、Linux版が登場し、WSL上でも正式にサポートされているというのが正しいでしょう。
WSLが必要になるので、先にWSLをセットアップする必要があります。WSLのセットアップ方法については、次の記事をご覧ください。
Homebrewをインストールする
WSLのシェルを起動します。HomebrewのWebページを開き、「インストール」のところに書かれている1行のスクリプトをコピーして、シェルで実行します。
macOS(またはLinux)用パッケージマネージャー — Homebrew
たとえば、関連記事に従ってインストールした場合はUbuntuを起動し、表示されたシェルで右クリックすると、コピーしたスクリプトが貼り付けられます。
途中でsudo
を実行するので、パスワードを聞かれます。WSLセットアップ時に設定したUNIX用のパスワードを入力してください。
==> Checking for `sudo` access (which may request your password)...
==> Select a Homebrew installation directory:
- Enter your password to install to /home/linuxbrew/.linuxbrew (recommended)
- Press Control-D to install to /home/akira/.linuxbrew
- Press Control-C to cancel installation
[sudo] password for akira:
また、タイミングが悪いと次のようにホストが見つからないというエラーが表示されることがあります。その場合は、再度実行してください。
curl: (6) Could not resolve host: raw.githubusercontent.com
次のように表示されたら、RETURN
キーを押します。
Press RETURN/ENTER to continue or any other key to abort
Homebrewのダウンロードやインストールが実行されます。
macOS上で実行するときは、これだけで完了なのですが、WSL上ではもう少し作業が必要です。
brew
やHomebrewでインストールしたパッケージが、環境変数の`PATH`に含まれるようにするため、次のページの「Install」のところに書かれているスクリプトを実行します。(1行ずつコピーして実行します)
Homebrew on Linux — Homebrew Documentation
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bash_profile
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.profile
完了したら、次を実行します。
$ brew install hello
開発環境が入っていないためにエラーになる
私の環境ではエラーになってしまいました。
Error: patchelf must be installed: brew install patchelf
Warning: Bottle installation failed: building from source.
Error: The following formula
patchelf
cannot be installed as binary package and must be built from source.
Install Clang or run `brew install gcc`.
Homebrewはバイナリーインストールができないときに、ソースからビルドしてインストールを行います。そのため、WSL側に開発環境が入っていないとエラーになります。
指示されているようにgcc
のインストールを試みます。
$ brew install gcc
しかし、ここでもエラーが発生しました。エラーメッセージは先ほどと同様で、開発環境の存在が必要と表示されました。
Homebrew自体が動作するためにも、開発環境が必要です。
clangをインストールする
Ubuntuなので、apt
でインストールできます。Homebrewのメリットとしてシステム汚染しないことを挙げましたが、開発環境だけは必要であることがわかりました。
gcc
でも良いのですが、私の好みでclang
をインストールすることにしました。次のように実行します。
$ sudo apt update
$ sudo apt install clang
依存関係を見ていると、gcc
の一部のパッケージもインストールされたようです。
開発環境をインストールするべきか?
上にも書いた通り、Homebrewはバイナリインストールができないときにソースからビルドしてインストールします。インストール時にもgcc
のインストールを推奨すると表示されています。Ubuntu 20.04.4 LTSではエラーが起きなかったのですが、gcc
かclang
のどちらかをインストールしておいた方が良いと思います。
あらためて実行する
開発環境をセットアップしたのであらためて実行してみましょう。
$ brew install hello
依存関係のあるパッケージのビルドやインストールが行われます。完了したら実行してみましょう。
$ hello
Hello, world!