どうも、高妻です。
ossもいくつか作ってますが、全然活発ではないので今後力を入れるためにもGolangでTwitterクライアントを作りました。
Twitterクライアントと言っても、スクレイピングした結果をコンソールに表示しているだけなので全然大したことはしてませんが勉強がてら公開してみます。
ソースコードはGitHubで公開しています。
スクリプトのインストールと実行はbrewで行えるようにしています。
今回はオリジナルのスクリプトをbrewでどうやって使えるようにするのか下記順番で解説したいと思います。
- 言葉の解説
- ソースコードとフォーミュラ用リポジトリの準備
- Golangでバイナリの作成とアップロード
- フォーミュラの作成
- 自作アプリケーションのインストールと実行
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 🌖Webエンジニア@miga_dev | Go言語のインターフェイス、使い道をちゃんと説明してくれてる記事に初めて出会えた。めっちゃ助かった | 9 | 6 | 0 | | | | 初心者に送りたいinterfaceの使い方[Golang] by Takahito Yamada https://link.medium.com/53hFVvCf6R | | | | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ | 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 … | | | | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ | 11月22日 | Morix 💪 😼 ✨@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/ … | | | | | | | #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 🎄@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 … | | | | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ | 11月18日 | 転職アカ@idn2ZKbQ87Mcbvh | 【転職希望】 職種:エンジニア 給与:年収700万 | 6 | 1 | 5 | | | | 経験:Python/Golang/Ruby/swift/Kotlin/dart | | | | | | | 紹介:マーケティングやビジネス視点を持ったエンジニアです。 | | | | | | | バックエンドもフロントエンドも実務経験しているエンジニアです。 | | | | | | | Flutterもやってます。 興味ある方よろしくお願いします | | | | | | | #hiyokonitsuduke | | | | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ | 11月21日 | Haru 🌖 EC作成中 🌹@_MINI_HAL | もうタイトルからして面白い [Go言語] | 4 | 0 | 0 | | | | もしも童話「シンデレラ」が、Goで書かれていたらhttps://qiita.com/trrrrrys/items/c2908b672ea7bcaf0d73 … | | | | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ | 11月24日 | 石◯王 もちだ@mike_neck | golangの環境構築は簡単だった | 2 | 0 | 0 | +----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-----+-----+-----+ TomokazunoMacBook-puro:homebrew-Go-Twitter tomokazukozuma$
最後に
こんな感じで少しずつでも自分の作ったものを公開していきたいと思います。
修正プルリク待ってます。ソースコードめちゃくちゃ小さいので簡単だと思うのでよろしくお願いします。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
完結で分かりやすい内容でbrewのtapできました、ありがとうございます