THE えのき

えのきです。

内製ツールを Homebrew で配布しはじめた話

おはこんばんちは!健康診断で尿酸値過去最高記録を更新できませんでした!残念!(去年9.5, 今年9)

k_enokiです!

この記事は CyberAgent Developers Advent Calendar 2017 - Adventar の7日目の記事です。

6日目はkuro_m88さんの Datadog Logsでアプリケーションログを管理する でした。3年連続 kuro_m88 さんの翌日を担当することになったのは偶然です。

今年は3度目ということで、すこし真面目なネタを書いていこうと思います。

最近お隣の島のグループが作ってくれた超便利なAPIをラップするCLIをgoで作りました(TLS/SSL証明書をとってきたり、LBにアップロードしたり)。それを配布するのにHomebrewを使ってみたよ。と言う話です。

追加とインストール

マカーな皆様には馴染み深いHomebrewですが、実はGitHub Enterpriseでも自作のレポジトリを作ってFormulaを管理することが出来ます。

レポジトリの追加はこれだけ。 GitHubじゃなくても、レポジトリのURIを指定することでtapすることが出来ます。

brew tap enoki/awesome-tools git@github.example.com:enoki/homebrew-awesome-tools.git

ヘルプ見て知ったんですが、

brew tap user/repo

は以下のショートカットだったみたいです。

brew tap user/repo https://github.com/user/homebrew-repo

レポジトリを追加したあとはいつものようにインストールすることができます。

brew install awesome-cli

超カンタンです。READMEにでも書いておけば社内からツールの利用が増えること間違いなしですね!

レポジトリとFormula

レポジトリとFormulaの例です。

$ tree .
.
├── Formula
│   └── awesome-cli.rb
└── README.md
class AwesomeCli < Formula
  desc "awesome cli"
  homepage ""
  url "https://example.net/enoki/awesome-cli/v1.0.0/awesome-cli_Darwin_x86_64.tar.gz"
  version "1.0.0"

  def install
    bin.install "awesome"
  end

  test do
    system "#{bin}/awesome -version"
  end
end

Formulaという名前のディレクトリにrubyスクリプト(こいつがFormula)を置くだけです。 上記の例ではtar.gzを解凍して出てきたバイナリを配置するだけの内容ですが、複雑な処理も書くことが出来るので興味がある方は以下を参照してみてください。

github.com

新しいツールが出来たあとの配布も簡単です。

Formulaを追加したあと利用者に brew update && brew install してもらうだけです。

どんどん新しいツールを作ってどんどん配布していきましょう!!!更新も簡単です!

新規追加
$ brew update
Updated 1 tap (enoki/awesome-tools).
==> New Formulae
enoki/awesome-tools/awewome-cli
更新

既存バージョンがインストール済みの場合は新しいバージョンがインストールされます。

brew update
Updated 1 tap (enoki/awesome-tools).
==> Updated Formulae
enoki/awesome-tools/awesome-cli

感想

Homebrewのおかげでツールのインストールが配布が大変楽になりました。

WikiやREADMEに詳細な手順を書かなくてすむのと作業手順が2ステップなので、ツール提供者と利用者両方共にメリットがあると思います。

今は諸事情でチーム内でしか提供できてないのですが、ゆくゆくはメディア事業全体にツールを公開できるようにしたいです。

WindowsLinuxを使ってる方々にはReleasePageにバイナリ置いてあるから使ってね!というのが現状ですが、Mac以外もいずれは何かしらの方法で簡単に配布できるようにしたいですね。

明日(これ書いてるのは既に12/8)は村井翔太朗さんがみんなが知りたいこと書くみたいです。いや〜楽しみ!