はじめに
きっかけは「自分で作ったコマンドを brew install してみたい!」という純粋な好奇心でした。
今回作成したのは、コマンド入力時に引数として渡した文字列を、巨大なAA(アスキーアート)にして流し続けるレスポンシブな電光掲示板ツールです。
ツールを作成して公開するまでの流れや、途中で躓いた箇所を備忘録として残しておきます。
Homebrewに公開するまでの全体像
自作ツールを公開するには、大きく分けて3つのステップが必要です。
- プログラム本体(Go等)を作成する
- 配布用の「Tapリポジトリ」を作成する
- TapリポジトリをBrewに登録してインストールする
今回は、管理を分かりやすくするために2つのGitHubリポジトリを作成しました。
- リポジトリA(プログラム用): ツール本体のコードを置く場所
- リポジトリB(配布用/Tap): Formula と呼ばれる設計図を置く場所。今後、別の自作ツールを作った際もここに集約していきます
※今後リポジトリAを本体リポジトリ。リポジトリBをTapリポジトリとして本文内で扱います。
Formulaとは?
実行ファイルそのものではなく、Homebrewが「どこからファイルをダウンロードし、どうやってビルドするか」を記した**インストール手順の設計図(設定ファイル)**のことです。
【Step 1】Homebrewに登録するプログラムを作成する
今回は Go言語 を使用しました。最終的にバイナリをビルドして配布するため、言語の制約は基本ありません。
作成したツール: my-first-homebrew-tools
プログラムが完成したら、GitHubで**タグ(v1.0.0)**を設定してリリースします。
【Step 2】Tapリポジトリを作成する
次に、自分専用の「App Store」となる Tapリポジトリ を作成します。
命名規則として、リポジトリ名は homebrew-tools(または homebrew-tap)とするのが一般的です。
- 作成したTap: homebrew-tools
Formulaの作成 (brew create)
次に、ツール本体とHomebrewを繋ぐ「Formula」を生成します。
brew create --set-name ツール名 [https://github.com/ユーザ名/リポジトリ名/archive/refs/tags/v1.0.0.tar.gz](https://github.com/ユーザ名/リポジトリ名/archive/refs/tags/v1.0.0.tar.gz)
Error Unknown command: brew createが出た場合
私は初回実行時にエラーが起きてbrew createコマンドが利用できませんでしたが、以下のことを行ったら実行できるようになったので共有します。
-
brew developer onを実行して開発者モードを有効にする -
brew tap --force homebrew/coreを実行して、開発ようコマンドが含まれるコアリポジトリを強制ダウンロードする(これには5分ほどかかります)
成功すると、エディタが開くので、以下のように設定を整えます。
class ツール名 < Formula
desc "ツールの説明をここに書く"
homepage "[https://github.com/ユーザー名/リポジトリ名](https://github.com/ユーザー名/リポジトリ名)"
url "[https://github.com/ユーザー名/リポジトリ名/archive/refs/tags/v1.0.0.tar.gz](https://github.com/ユーザー名/リポジトリ名/archive/refs/tags/v1.0.0.tar.gz)"
sha256 "自動入力されているハッシュ値"
license "MIT"
def install
# Goの場合のビルド指示(例)
system "go", "build", "-o", bin/"ツール名"
end
end
brew createによって生成した.rbファイルを再度開きたい場合
brew edit ツール名code $(brew --repository)/Library/Taps/homebrew/homebrew-core/Formula/m/ツール名.rb
brew editが使用できない場合は下のコマンドを利用してください。
【Step 3】Tapリポジトリをbrew に登録する
まずはローカルで正しくビルドできるかテストします。
brew install --build-from-source ツール名
無事にコマンドが実行できたら、作成した.rbファイルをTapリポジトリ(homebrew-tools)にコミット&プッシュします。
最後に、自分のTapを登録すれば世界中のMacでインストール可能になります。
brew tap ユーザー名/tools
brew install ツール名
Error: installed from the homebrew/core tap...が出た場合
ローカルテスト時の情報が残っているため、一度brew uninstall ツール名をしてから再度インストールし直すと解決します。
自作CLIツールをアップデートする時
ツールの機能を更新(v1.0.0→v1.1.0)した際は、以下の手順で設計図を更新します。
- 本体リポジトリで新しいタグ(例ならv1.1.0)を打つ
- TapリポジトリのFormulaファイル内の
urlとsha256を書き換える
SHA256ハッシュ値を取得する方法
以下のコマンドを打つことで新しいソースコード(tar.gz)のハッシュ値を計算することができます。
curl -L [新バージョンのURL] | shasum -a 256
書き換えが完了したら、brew upgrade ツール名で最新版に更新されます。
ツールのバージョンアップ時は2つのリポジトリの更新が必須になりますので注意してください。
おわりに
たくさんのエラーに見舞われて思ったよりも大変でした。