はじめに
以前Macを使っていた頃は、
とりあえずHomebrewで全部入れる
という運用をしていた記憶があります。
久々にMacに戻ってきて環境構築をしてみると、
最近はそうでもなさそう という印象を持ちました。
特に、
* 言語ランタイム管理に asdf を使う
* HomebrewはOS周り・CLIツール中心
という分業が、わりと一般的になっているようです。
本記事では、
Homebrewとasdfをどう使い分けるか を、
実際に環境を作りながら感じた範囲で整理してみます。
Homebrewの役割
Homebrewは今でもMacのパッケージ管理の中心ですが、
役割は以前よりも少し絞られている印象です。
Homebrewで管理するもの
- OSに強く依存するツール
- CLIユーティリティ
- GUIアプリ(cask)
例:
brew install git jq wget brew install --cask visual-studio-code google-chrome
これらは、
* バージョンを細かく切り替える必要がない
* プロジェクト単位で変わらない
という特徴があるため、
Homebrew管理が一番楽です。
asdfの役割
asdfは複数言語のランタイム管理をまとめて行えるツールです。
asdfで管理するもの
- Python
- Node.js
- Ruby
- Java など
いわゆる 「プロジェクトごとにバージョンが変わりうるもの」を担当させる、
というのが分かりやすい使い方だと感じました。
brew install asdf
Homebrewとasdfの使い分けまとめ
| 種類 | 管理ツール |
|---|---|
| OS系CLI | Homebrew |
| GUIアプリ | Homebrew |
| 言語ランタイム | asdf |
| プロジェクト依存ツール | asdf(必要に応じて) |
「全部brew」よりも、
責務を分けた方が後々楽なのかも という印象です。
asdfを使い始めるにあたっての注意点(2026年版)
ここで一つ、
最近ハマりやすいポイントがあります。
asdf global / asdf local が見当たらない?
ネットの記事を探すと、以下のようなコマンドがよく出てきます。
asdf global python 3.11.0 asdf local python 3.11.0
ところが、最近のasdfでは
これらのサブコマンドが存在しません。
代わりに、以下の形式に置き換わっています。
新しい指定方法:asdf set
グローバル(ホームディレクトリ)に設定する場合
asdf set --home python 3.12.1
これは、従来の asdf global に相当します。
ディレクトリ単位で設定する場合
asdf set --parent python 3.12.1
これは、従来の asdf local に近い挙動で、
.tool-versions を親ディレクトリに作成します。
.tool-versions の扱い
- プロジェクト単位で管理したい場合
→ リポジトリ直下に.tool-versions - 個人環境のデフォルト
→--homeで設定
という使い分けが無難そうです。
ハマりポイント
1. 古い記事とのコマンド差分
asdf global/asdf local前提の記事が多い- そのまま打つと「そんなサブコマンドはない」と怒られる
→ 公式ドキュメントを見るのが一番確実
2. Homebrewで入れた言語と混ざる
- brewでPythonを入れている
- asdfでもPythonを入れている
という状態になると、
どのPythonが使われているのか分からなくなりがちです。
→ 言語ランタイムは どちらか一方に寄せる のが無難な気がします。
まとめ
久々にMac環境を作ってみて、
- Homebrewは今も中心的存在
- ただし「全部brew」ではなくなっている
- 言語ランタイムはasdfに寄せるのが楽
という印象を持ちました。
また、asdfについては
古い記事とコマンド体系が変わっている 点に注意が必要です。
同じように「最近のMac事情よく分からん」という状態から
環境構築をする人の参考になれば幸いです。