プロジェクト

全般

プロフィール

Homebrew

Homebrew は、サードパーティ製のmacOS用ソフトウェア管理ツールです。コマンドラインツールとして提供されています。

公式サイト(日本語ページ)
https://brew.sh/index_ja

Homebrew概要

用語

  • formula
    ソースコードからビルドされたパッケージの定義。複数形formulae
  • cask
    macOSネイティブアプリケーションのパッケージ定義
  • tap
    パッケージ定義のあるディレクトリ(Gitリポジトリなど)

Homebrewのセットアップ

Homebrew のインストール

公式サイトに記載されている次のコマンドを実行します。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 

実行結果を表示

Homebrew は、Xcode コマンドラインツールを必要とするので、macにXcodeがインストールされていない場合、インストールの途中でXcodeをダウンロードしインストールします。

しばらく時間が経過すると、インストールが完了します。Homebrewのコマンドは/opt/homebrew/binの下に入りますが、PATHが通っていないとインストールメッセージに警告と処置方法が表示されます。

インストールメッセージ(PATHが通っていない時)を表示

ターミナルで、指定されたコマンドを実行します。

    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<ユーザー名>/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)" 

ターミナルから brew help コマンドを実行できればインストールは完了です。

使い方

Homebrewの管理

Homebrewの診断

Homebrewが正しく動作するかを診断するコマンドです。

  • 健全時
    % brew doctor
    Your system is ready to brew.
    

Homebrewの更新

Homebrew自身を最新に更新するコマンドです。リポジトリ情報(tap)の情報を更新するので、最新の状況を調べる時は先にこのupdateを実行しておくとよいです。

% brew update

実行結果を表示

インストールしたソフトウェアの一覧

サブコマンド list でインストール済みのソフトウェア一覧を表示します。

% brew list
==> Formulae
ca-certificates    mpdecimal    python@3.10    sqlite
gdbm        openssl@1.1    readline    xz

==> Casks
microsoft-remote-desktop    zulu11

ソフトウェアの検索

サブコマンド search で検索キーワードを指定して検索します。

% brew search jdk
==> Formulae
openjdk       openjdk@11     openjdk@8      jd      mdk      cdk

==> Casks
adoptopenjdk           oracle-jdk               semeru-jdk-open
jdk-mission-control    oracle-jdk-javadoc
microsoft-openjdk      sapmachine-jdk
  • 検索キーワードを、'/'で囲むと正規表現として扱われます。
    例: brew search '/.*shark/'

インストール済みソフトウェアの更新

インストール済みソフトウェアに更新があるか確認

% brew outdated
  • 注)本サブコマンド実行前に、パッケージ定義を更新するためサブコマンド update を実行しておくのが望ましい

実行結果の例を表示

更新の適用

% brew upgrade

実行結果(単一のパッケージを更新)の例を表示

cask

以前は、--cask オプションを使用していましたが、今は使用する必要がなくなっています。

更新の停止(バージョン固定)

何らかの理由で、パッケージのバージョンアップを抑止したい場合があります。
casks 以外であれば、pinサブコマンドでupgradeを抑止できます。
casks のパッケージでは、pinサブコマンドは適用できません。

  • 回避策)
    /opt/homebrew/Caskroomの下にあるパッケージのディレクトリを削除すると、そのパッケージは更新対象から除外されます。

インストール

サブコマンド install で指定したパッケージをインストールします。

cask

cask(macOSネイティブアプリケーション)で定義されるパッケージをインストールするときは、以前は--caskオプションを指定する必要がありましたが、今は省略できるので指定することはなくなりました。

caskで定義されたパッケージをインストールすると、Launchpadにアイコンが追加され、そこから実行できます。macOSネイティブアプリケーションなので。

アンインストール

サブコマンド uninstall で指定したパッケージをアンインストールします。

  • --caskオプションの指定は不要です。

再インストール

サブコマンド reinstall で指定したパッケージを再インストールします。実際にはアンインストール後にインストールを実施するようです。

パッケージ情報

サブコマンド info で指定したパッケージの情報を表示します。

アプリケーションのインストール

コマンド環境

ディレクトリツリー表示

% brew install tree

インストール後、tree でカレントディレクトリ以下のツリー構造がコンソールに表示されます。

ssh関連

sshpass

ssh接続でパスワード認証の際にパスワードをコマンドライン・ファイル・環境変数から与えることでパスワード入力を省略するツール。
Homebrew公式リポジトリはセキュリティ上の理由でsshpassを扱わないようにしているので、tapを指定してインストールします。

brew tap esolitos/ipa
brew install esolitos/ipa/sshpass

使い方は、次のようにsshpassのコマンドラインオプションにパスワードと、そのパスワードで接続するsshコマンドを指定します。
すると、sshの接続にパスワードが適用されます。

% sshpass -p "my password" ssh foo@example.com

コマンドラインをスクリプト化やシェル関数に定義することができるようになるのがメリットですが、パスワードがファイルに記載されることになるので要注意です。

zsh-autosuggestions

コマンドライン履歴を補完対象にする。

% brew install zsh-autosuggestions
  :
To activate the autosuggestions, add the following at the end of your .zshrc:

  source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
  :

インストールのメッセージにある通り、~/.zshrc に上述のコードを追記
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

[→]キー, C-f, C-e で候補が確定

ネットワーク

Wireshark

Wiresharkは、GUIを持つアプリケーションでネットワークパケットのキャプチャと表示を行います。

https://formulae.brew.sh/formula/wireshark

  • コマンドライン版のインストール
    % brew install wireshark
    
  • GUI版のインストール
    % brew install --cask wireshark
    

アプリケーションに Wireshark が追加されます。

OpenJDK(Java開発キット)

オープンソースのOpenJDKは、複数組織からビルド済みバイナリが提供されています。Homebrew で入手する際のパッケージ名とtapを次の表に示します。

組織名 ディストリビューション名 brew パッケージ名 brew tap
Oracle Oracle JDK oracle-jdk homebrew-cask
Oracle OpenJDK openjdk homebrew-cask
Oracle OpenJDK Early Access java-beta homebred-cask
Eclipse Temurin temurin homebrew-cask
temurin<NN> homebrew-cask-versions
Azul Systems Zulu zulu homebrew-cask
zulu<NN> homebrew-cask-versions
ZuluFx zulufx homebrew-cask
Amazon Corretto corretto homebrew-cask
corretto<NN> homebrew-cacsk-versions
BellSoft Liberica JDK liberica-jdk<NN>[-full | lite] bell-sw/homebrew-liberica
Microsoft Microsoft Build OpenJDK microsoft-openjdk homebrew-cask
microsoft-openjdk<NN> homebrew-cask-versions
SAP SapMachine sapmachine-jdk homebrew-cask
  • 凡例
    • <NN> バージョン番号が付与され、複数バージョン混在を許容する(例 temurin11、OpenJDK 11の実装)
    • [-full | -lite] liberica-jdkは、標準版の他にfull版、lite版があり、含まれる機能に違いがある

バージョンのないパッケージ名は、その時点の最新版を示します(formulaの更新が滞っていない限り)。

Zulu

Azul Systems社がOpenJDKソースをビルドし提供する Zulu JDK のパッケージです。
Zulu JDKのバージョン別パッケージは、追加のtapでリポジトリを設定します。

% brew tap homebrew/cask-versions

tapを設定したら、Zulu JDKのパッケージがリストおよびインストール可能になります。
zulu 11をインストールします。

% brew install --cask zulu11

Zulu 11は、/Library/Java/JavaVirtualMachines/zulu-11.jdk の下にインストールされるので、/usr/libexec/java_homeで使用するjavaの切り替え対象となります。

Liberia JDK

BellSoft社が提供するOpenJDKディストリビューションのLiberica JDKのパッケージです。
Liberica JDKのパッケージは、追加のtapでリポジトリを設定します。

% brew tap bell-sw/liberica

tapを設定したら、liberica JDKのパッケージがリストおよびインストール可能になります。

% brew install --cask liberica-jdk17-full

Liberica JDKには、通常版、full版、lite版と3種類があり、含まれる機能に差異があります。

Liberia-jdk17-full は、/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk の下にインストールされるので、/usr/libexec/java_homeで使用するjavaの切り替え対象となります。

Oracle OpenJDK

Oracle社が提供するOpenJDK distributionのパッケージです。その時点での最新バージョンのOracle OpenJDKは次のコマンドでインストールできます。半年毎の更新で、LTSのサポートはありません。

% brew install openjdk

openjdk(version 19) は、/opt/homebrew/Cellar/openjdk/19 にインストールされます。また、次のシンボリックリンクが生成されます。

/opt/homebrew/opt/java    -> ../Cellar/openjdk/19
/opt/homebrew/opt/openjkd -> ../Cellar/openjdk/19

openjdkは、keg-onlyのため、/usr/libexec/java_home で使用するjavaの切り替え対象とするためには、次のリンクを手動で作成します。

% sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
% /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    19 (arm64) "Homebrew" - "OpenJDK 19" /opt/homebrew/Cellar/openjdk/19/libexec/openjdk.jdk/Contents/Home
  :

Oracle JDK

JDK 17以降、NTFCライセンスまたはOTNライセンス、もしくは商用ライセンスで利用できます。
Homebrewでは、2024-04-05時点で次のformulaeが提供されています。

  • oracle-jdk (最新版)
  • oracle-jdk17 (LTS版)

oracle-jdkは、最新バージョンに追従しているので、半年毎のリリースで更新されます。
oracle-jdk17は、Oracle JDK 17(LTS)に固定されますが、2023年9月に次のLTS版であるJDK 21が出ているので1世代古いものになります。

JDKディストリビューション・バージョンの切り替え

Macでは、OpenJDKディストリビューションを複数インストールしたり、違うバージョンを複数インストールしたりすると、/Library/Java/JavaVirtualMachinesディレクトリの下にそれぞれディレクトリが作られ、その中にOpenJDKがインストールされます。

/usr/lib/java_homeコマンドに-Vオプション(大文字の'V')を指定して実行すると、現在インストールされているJDKのリストと、現在選択されているJDKが表示されます。

% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    17.0.2+9-LTS (arm64) "BellSoft" - "BellSoft Liberica JDK 17.0.2+9" /Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home
    11.0.13 (arm64) "Azul Systems, Inc." - "Zulu 11.52.13" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home

上述の実行例は、次の2つのJDKがインストールされており、

  • 17.0.2+9-LTS (BellSoft Liberica JDK 17.0.2+9)
  • 11.0.13 (Zulu 11.52.13)

現在選択されているJDKのパスは次
/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Conents/Home

コマンドラインで現在のシェル環境のJDKバージョンを切り替え

環境変数JAVA_HOMEに定義されたパスのJDKが選択されます。
JDKのパスは長いので、/usr/libexec/java_homeコマンドに-vオプション(小文字の'v')でバージョンを指定して実行して取得します。

% export JAVA_HOME=`/usr/libexec/java_home -v 11`

% java --version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime Environment Zulu11.52+13-CA (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM Zulu11.52+13-CA (build 11.0.13+8-LTS, mixed mode)
設定ファイルでJDKバージョンを指定

zshの設定ファイルに記述します。後からコマンドラインで変更できます。

  • .zshrc
    export JAVA_HOME=$(/usr/libexec/java_home -v 17)
    

Java開発ツール

SceneBuilder

JavaのGUIライブラリ OpenFX(旧JavaFX)の画面レイアウト作成ツール SceneBuilderです。

% brew install --cask scene builder

VisualVM

Javaのメモリ使用状況を可視化するツール VisualVM です。

% brew install visualvm

インストールするとLaunchpadにVisualVMが追加されるので、これをクリックしてVisualVMを起動します。

Gradle

Javaのほぼデファクトスタンダードな1ビルドツール。

% brew install grade
  • [1] Javaでマルチプラットフォーム・IDE非依存なビルドツールでは、Apache ANT、Apache Maven、Gradleが主流。最近は MavenとGradleで二分している

Tomcat

Webアプリケーションサーバー(コンテナ)です。

% brew install tomcat

インストールすると、/opt/homebrew/opt/tomcat/ に展開されます。
実行は、/opt/homebrew/opt/tomcat/bin/catalina runです。

統合開発環境

eclipse

% brew search eclipse
 :(略)
==> Casks
eclipse-cpp         eclipse-java          eclipse-php          nodeclipse
eclipse-dsl         eclipse-javascript    eclipse-platform     redeclipse
eclipse-ide         eclipse-jee           eclipse-rcp
eclipse-installer   eclipse-modeling      eclipse-testing

ここでは、Java SE環境の開発をしたいので、eclipse-javaをインストールします。

% brew install --cask eclipse-java

アプリケーションに Eclipse Java が追加されます。

トラブル

インストールした直後は問題なく動作していましたが、macを再起動したところ、eclipseが起動しなくなってしまいました。
「アプリケーション"Eclipse Java"を開くためのアクセス権がありません。このコンピュータまたはネットワークの管理者に問い合わせて下さい」との表示がされる。

  • Finderからアプリケーションの中のEclipse Javaを右クリックし情報を見るで、共有とアクセス権を調べたところ、ユーザーに対して読み/書きとなっており問題なし
  • eclipseのインストーラーdmgファイルをeclipseサイトからダウンロードしインストールしたものは問題なく動作する
  • workspaceを書類フォルダ下に設定したのではないか? 書類フォルダは保護が働くのでアプリケーションに許可を与える必要がある。との情報を得た。
    確かに上述問題では書類フォルダの下にworkspaceを設定していた。
    • システム環境設定 > セキュリティとプライバシー > プライバシー タブ選択、左ペインのファイルとフォルダを選択、右ペインを見ると eclipseは存在しない。

本トラブル後、brewでアンインストールし、Eclipseサイトからdmgファイルをダウンロードしインストールして使っていました。1ヶ月後にEclipseを一度アンインストールし、確認がてらbrewでインストールしたところ本トラブルは発生しませんでした。原因は不明のまま。

IntelliJ IDEA

% brew search intelliji
==> Formulae
intercal

==> Casks
intellij-idea-ce19  intellij-idea19     intellij-idea       intellij-idea-ce

  • intelliJ-idea19とintelliJ-ideaは有償のUltimate版、
  • IntelliJ-idea-ce19とIntelliJ-idea-csは無償のCommunity版
IntelliJ IDEA Community 版のインストール
% brew install --cask Intellij-idea-ce
IntelliJ IDEA Ultimate 版のインストール
% brew install --cask intellij-idea

インストールが完了すると、LaunchpadにIntelliJ IDEAのアイコンが追加されます。

Visual Studio Code

% brew install --cask visual-studio-code

JavaScript開発

Node.js

% brew install node

Rust開発

rustup

% brew install rustup-init

詳しくは、Rust開発環境(Mac) ページに記載

ドキュメントツール

Sphinx

ドキュメント作成ツールです。

% brew install sphinx-doc
  • brewには、sphinxというパッケージがありますが、これは別なツールです。
  • sphinx-doc 4.4.0は、に依存しているので、上述のインストールコマンドでもインストールされます。
  • "keg-only"としてインストールされるので、デフォルトではコマンドへのパスが設定されていません。パス設定等を自力でする必要があります。
環境設定

sphinx-docを使うときだけ必要な設定をするようにします。

  • ~/.zshrc
    # set sphinx-doc enironment
    setsphinx () {
        PATH="/opt/homebrew/opt/sphinx-doc/bin:$PATH" 
    }
    
  • pythonの設定(要記述)
pythonバージョンの混在と使い分け

macOS Big Sur(11.6)では、python バージョン2系(2.7.16)と3系(3.8.9)がインストールされています。
さらに、brewでpython 3.10.1がインストールされました。

T.B.D.

画像ツール

ffmpeg

動画・音声の記録、変換、再生などをおこなうコマンドラインツール。

% brew install ffmpeg

多数の依存パッケージがインストールされます。

動画情報の表示
% ffprobe -show_streams -print_format json mymovie.mov
動画形式の変換
% ffmpeg -i input.mov output.mp4

-iオプションで変換元の動画ファイルを指定、次に変換後の動画ファイルを指定すると、入力ファイルと出力ファイルの拡張子から変換します。
さらに変換の細部をオプションを追加して指定できます。

動画からGIFアニメーションへの変換
% ffmpeg -i input.mov -r 8 output.gif

-iオプションで変換元の動画ファイルを指定、変換後のGIFファイル名を指定すると動画ファイルからGIFアニメーションファイルを生成します。デフォルトではフレームレートがそのまま生成されてしまうので、-rオプションで指定します。

Homebrewの仕組み

ディレクトリ構成

主要なディレクトリ

/opt/homebrew/
  +-- Caskroom/
  |     +-- <パッケージ名>  pkgファイル、.appファイル等が置かれている
  +-- Celler/
  +-- Library/
  |     +-- Taps/                         tapサブコマンドで追加したリポジトリ情報が置かれる
  |           +-- homebrew/
  |                 +-- homebrew-core
  |                 +-- homebrew-cask
  |                 +-- homebrew-cask-versions
  +-- bin/
  +-- completions/
  +-- sbin/
  +-- etc/
  +-- lib/
  +-- opt/
  +-- share/
  +-- var/


16日前に更新