brew tapでGolangの自作アプリケーションを公開する方法




どうも、高妻です。

ossもいくつか作ってますが、全然活発ではないので今後力を入れるためにもGolangでTwitterクライアントを作りました。

Twitterクライアントと言っても、スクレイピングした結果をコンソールに表示しているだけなので全然大したことはしてませんが勉強がてら公開してみます。

ソースコードはGitHubで公開しています。

スクリプトのインストールと実行はbrewで行えるようにしています。

今回はオリジナルのスクリプトをbrewでどうやって使えるようにするのか下記順番で解説したいと思います。

解説手順
  1. 言葉の解説
  2. ソースコードとフォーミュラ用リポジトリの準備
  3. Golangでバイナリの作成とアップロード
  4. フォーミュラの作成
  5. 自作アプリケーションのインストールと実行

1. 言葉の解説

brewとは

brewとはMac OS上で便利ツールを簡単にインストールできるソフトウェアです。Macユーザならマストで使っていると思うので深くは解説しません。

今回はこのbrewを使って自作したアプリケーションをインストールできるようにして、さらに実行できるようにします。

brew tapとは

brew tapとはGitHubに上げたフォーミュラというインストール手順書に従って自作アプリケーションをインストールしてくれる仕組みです。

簡単にできるので順番に解説して行きます。

2. ソースコードとフォーミュラ用リポジトリの準備

冗長ですがリポジトリを2つ用意します。今回の場合だとGo-Twitterとhomebrew-Go-Twitterというリポジトリを用意しました。

OSSとしてみんなにコミットしてもらうのはGo-Twitterの方で、homebrew-Go-Twitterはbrewでインストールできるバージョンの管理を行います。

頭にhomebrewと着くのはbrew tapの決まりなので深く考える必要はありません。最悪分けずにhomebrewの方に統一してもいいですが頭にhomebrewと付けるのがダサいので別にしています。

リポジトリの使い分け
  • Go-Twitter:自作アプリケーションのソースコード
  • homebrew-Go-Twitter:フォーミュラ置き場

3. Golangでバイナリの作成とアップロード

brewはMacでしか使えないのでMacで動作するようにバイナリをビルドします。

Golangだと簡単にビルドできるのでそんなに解説は必要ないですが一応。

go envした時のGOARCHとGOOSがそれぞれamd64 、darwinになってればいいみたいです。

$ go env
GOARCH="amd64"
GOOS="darwin"

実行時は特に指定することなくこれだけで大丈夫です。

$ go build -o go-twitter

-oオプションでビルドファイル名が決められるのでgo-twitterとしました。

このバイナリファイルをGo-Twitterリポジトリにアップロードします。GitHubのrelaseタブからバージョンを作ってバイナリファイルがアップロードできます。

このバイナリファイルのURLをこのあと使います。右クリックしてリンクをコピーしておいて下さい。

4. フォーミュラの作成

フォーミュラは自作アプリのインストール手順を明記する拡張子がrb(ruby)のファイルになります。

先に結果を載せておきます。設定すべき項目は下記です。

  • desc:自作アプリの説明
  • url:バイナリのurl(さっきアップロードしてリンクをコピーしたやつ)
  • sha256:バイナリのハッシュ値(この後解説)
  • insntallメソッド:インストール方法を記述。今回はバイナリなのでbin-installでバイナリのファイル名を指定するだけ
# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class GoTwitter < Formula
  desc "Search and Get Tweet by CLI"
  url "https://github.com/tomokazukozuma/Go-Twitter/releases/download/v0.0.2/go-twitter"
  sha256 "3b5de7eddcf5dbc45d092f61bd3f1fc208c761cd448aab7a0c3e4d310c961d51"
  # depends_on "cmake" => :build

  def install
    bin.install "go-twitter"
  end
end

sha256の簡単な求め方

opensslコマンドでバイナリファイルを指定すると簡単に取得できます。ここで出力されたsha256をフォーミュラに設定します。

$ openssl dgst -sha256 go-twitter
SHA256(go-twitter)= 3b5de7eddcf5dbc45d092f61bd3f1fc208c761cd448aab7a0c3e4d310c961d51

全て記入が完了したらリポジトリにpushして下さい。フォーミュラの設定はこれで完了です。

5. 自作アプリケーションのインストールと実行

バイナリとフォーミュラの準備が終わったので実際にインストールして使えるか試します。

brew tapでインストール

インストールはこれだけです。

$ brew tap tomokazukozuma/go-twitter
$ brew install go-twitter

実行

あとは実行するだけです。20件くらいのtweetが表示されます。フォーマットがキレイにならないのが直近の解決したい問題ですね。

$ go-twitter golang
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
|   TIME   |                              SCREEN NAME                               |                                                 TWEET                                                 | FAV | RET | REP |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月24日 | Miga&nbsp;🌖Webエンジニア‏@miga_dev                                          | Go言語のインターフェイス、使い道をちゃんと説明してくれてる記事に初めて出会えた。めっちゃ助かった      |   9 |   6 |   0 |
|          |                                                                        | 初心者に送りたいinterfaceの使い方[Golang] by Takahito Yamada https://link.medium.com/53hFVvCf6R&nbsp;      |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月20日 | はすみ‏@hsm_hx                                                          | Golangのべんきお…                                                                                     |   1 |   0 |   0 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 17 分    | timakin(ちまきん)-                                                   | 本日のAPIテストに関する登壇資料です!ノウハウがあんまなかったのでまとめました。                       |  27 |   7 |   0 |
|          | FEVR作ってます‏@__timakin__                                             | #gocon / Golang API Testing the HARD way                                                              |     |     |     |
|          |                                                                        | https://speakerdeck.com/timakin/golang-api-testing-the-hard-way&nbsp;…                                     |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月22日 | Morix&nbsp;💪&nbsp;😼&nbsp;✨‏@morix1500                                               | golangのreflectむずかしい〜                                                                           |   2 |   0 |   1 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月23日 | 高階圏太郎‏@1_hoc                                                       | Go Golang ジャグラー                                                                                  |   1 |   0 |   1 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月19日 | ふぃーゆ‏@wxy40                                                         | pythonで頑張って書いたものをgolangで書くかどうか                                                      |   0 |   0 |   0 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月23日 | /toɯka                                                                 | golangのスライスが気持ち悪い                                                                          |   0 |   0 |   1 |
|          | tat͡ɕibana/‏@ToukaTachibana                                              |                                                                                                       |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 4 時間   | けんつ‏@lrf141                                                          | Golangおもろそう                                                                                      |   2 |   0 |   2 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月21日 | たふみ_t‏@CreatorQsF                                                    | goにもnamed                                                                                           |   0 |   0 |   1 |
|          |                                                                        | parameterほしいのすごいわかる                                                                         |     |     |     |
|          |                                                                        | #golang                                                                                               |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月20日 | shiwork‏@shiwork                                                        | Golang練習するか…                                                                                     |   1 |   0 |   1 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月20日 | tk00‏@umtk_ngx                                                          | golang好きやなぁと思った今日。                                                                        |   1 |   0 |   0 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月21日 | alphabet‏@Narukore0802                                                  | Golang 始めました。                                                                                   |   0 |   0 |   1 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月19日 | Hiroki Ono‏@h_ono_222                                                   | Go言語で使えるORMライブラリ                                                                           |   2 |   0 |   0 |
|          |                                                                        | https://re-engines.com/2018/11/19/go-orm/&nbsp;…                                                           |     |     |     |
|          |                                                                        | #golang                                                                                               |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月19日 | dora‏@dora_cp                                                           | やべぇ...                                                                                             |   1 |   0 |   0 |
|          |                                                                        | golangのコンパイラ壊した                                                                              |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 5 時間   | Mizuki Takeuch‏@amanda__mt                                              | Wantedly Techbook PDF  Gocon                                                                          |  17 |   8 |   0 |
|          |                                                                        | editionをQRコードからダウンロードできます。                                                           |     |     |     |
|          |                                                                        | ランチタイムに読んでください! #gocon                                                                 |     |     |     |
|          |                                                                        | #golang pic.twitter.com/pnx4kl1U71                                                                    |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月19日 | s-dual@関数解析/FPer&nbsp;🎄‏@nsdual                                         | 大嫌いなGolangで何か作るか                                                                            |   2 |   0 |   0 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 18 分    | Yoichiro                                                               | (実動は見てませんが、)docみる限りはgo mod downloadでよさそうです > Additional support               |   1 |   0 |   1 |
|          | Shimizu‏@budougumi0617@orisano@__s_you                                  | for warming caches for use cases such as CI or docker builds via go mod download                      |     |     |     |
|          |                                                                        | (#26610)https://github.com/golang/go/wiki/Modules#changes-since-the-initial-vgo-proposal&nbsp;…            |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月18日 | 転職アカ‏@idn2ZKbQ87Mcbvh                                               | 【転職希望】 職種:エンジニア 給与:年収700万                                                           |   6 |   1 |   5 |
|          |                                                                        | 経験:Python/Golang/Ruby/swift/Kotlin/dart                                                             |     |     |     |
|          |                                                                        | 紹介:マーケティングやビジネス視点を持ったエンジニアです。                                             |     |     |     |
|          |                                                                        | バックエンドもフロントエンドも実務経験しているエンジニアです。                                        |     |     |     |
|          |                                                                        | Flutterもやってます。  興味ある方よろしくお願いします                                                 |     |     |     |
|          |                                                                        | #hiyokonitsuduke                                                                                      |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月21日 | Haru &nbsp;🌖 EC作成中&nbsp;🌹‏@_MINI_HAL                                         | もうタイトルからして面白い  [Go言語]                                                                  |   4 |   0 |   0 |
|          |                                                                        | もしも童話「シンデレラ」が、Goで書かれていたらhttps://qiita.com/trrrrrys/items/c2908b672ea7bcaf0d73&nbsp;… |     |     |     |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
| 11月24日 | 石◯王 もちだ‏@mike_neck                                                 | golangの環境構築は簡単だった                                                                          |   2 |   0 |   0 |
+----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+
TomokazunoMacBook-puro:homebrew-Go-Twitter tomokazukozuma$

最後に

こんな感じで少しずつでも自分の作ったものを公開していきたいと思います。

修正プルリク待ってます。ソースコードめちゃくちゃ小さいので簡単だと思うのでよろしくお願いします。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



1 個のコメント

  • 完結で分かりやすい内容でbrewのtapできました、ありがとうございます

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です