1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goで自作したCLIツールをHomebrew Tapで公開するまでの全記録

Posted at

はじめに

きっかけは「自分で作ったコマンドを brew install してみたい!」という純粋な好奇心でした。
今回作成したのは、コマンド入力時に引数として渡した文字列を、巨大なAA(アスキーアート)にして流し続けるレスポンシブな電光掲示板ツールです。

ツールを作成して公開するまでの流れや、途中で躓いた箇所を備忘録として残しておきます。


Homebrewに公開するまでの全体像

自作ツールを公開するには、大きく分けて3つのステップが必要です。

  1. プログラム本体(Go等)を作成する
  2. 配布用の「Tapリポジトリ」を作成する
  3. 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)とするのが一般的です。

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コマンドが利用できませんでしたが、以下のことを行ったら実行できるようになったので共有します。

  1. brew developer onを実行して開発者モードを有効にする
  2. 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)した際は、以下の手順で設計図を更新します。

  1. 本体リポジトリで新しいタグ(例ならv1.1.0)を打つ
  2. TapリポジトリのFormulaファイル内のurlsha256を書き換える

SHA256ハッシュ値を取得する方法

以下のコマンドを打つことで新しいソースコード(tar.gz)のハッシュ値を計算することができます。
curl -L [新バージョンのURL] | shasum -a 256

書き換えが完了したら、brew upgrade ツール名で最新版に更新されます。
ツールのバージョンアップ時は2つのリポジトリの更新が必須になりますので注意してください。

おわりに

たくさんのエラーに見舞われて思ったよりも大変でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?