Skip to content

Instantly share code, notes, and snippets.

@toshi0607
Last active October 13, 2018 12:35
Show Gist options
  • Save toshi0607/c9be5f5a3842ee92f2dfc28294297838 to your computer and use it in GitHub Desktop.
Save toshi0607/c9be5f5a3842ee92f2dfc28294297838 to your computer and use it in GitHub Desktop.
Goパッケージの配布

Goパッケージの配布

GoでCLIツールを作成する上で様々な環境にシュッと配布できるのはご指摘のとおりだと思っています。

僕もCLI作成したのですが、いい感じに配布(+ リリース情報の自動生成)するための様々なライブラリに助けられたので知見を共有させていただきます。

僕が作成したgigという.gitignoreを生成するコマンドではmake releaseでつぎの内容が実行されます。

  • タグのversionを指定(対話形式)
  • 指定タグをソースコードに埋め込み
  • CHANGELOG生成
  • scoop用のメタデータ生成
  • Github Releasesに各OS用のバイナリアップデート
  • formula(homebrew用の定義ファイル)を出力(別リポジトリ管理なので生成ファイルを利用して更新します)
  • リリース情報をツイート

https://github.com/toshi0607/gig#install

パッケージマネージャ

mac用のコマンド配布で広く利用されているので採用しました。

利用者は2コマンドでコマンドが利用できるようになります。

$ brew tap toshi0607/homebrew-gig
$ brew install gig

Homebrewの公式リポジトリに登録しない場合(しない方がバージョンアップは融通が効きます)、ユーザーはイントール元を特定するためにbrew tapコマンドで定義ファイルをダウンロードします。

そのダウンロードファイルはコマンド自体とは別リポジトリで管理します。

https://github.com/toshi0607/homebrew-gig

Chocolateyと比較し、定義ファイルが自分で管理でき利用感がHomebrewに近く、管理者権限が必要なこともないので採用しました。

JSONファイルさえあればよいので楽です。

https://github.com/toshi0607/gig/blob/master/scripts/_scoop.sh

Github Release

ビルドしたバイナリはtagごとにGitHub Releaseに置くと思います。

GitHubにGoタグをつけておけば、一定期間後リリースごとにこのTwitterアカウントでも自動投稿され、世界のGopher達にプロダクトを知ってもらうきっかけになります。

https://twitter.com/RealGophersShip

自動化に当たっては色々組み合わせましたが、特にtcnksm/ghrlaher/goxcが有用です。

この記事を参考にしました。

goxc + ghrを使って、Goで書いたツールのバイナリをGithub Releasesで配布する

使ってる人も多いと思います。

チェンジログ

別になくてもいいですが、Songmu/ghchを使うとタグ間のコミットからよしなにCHANGELOG.mdを更新してくれるので便利です。

Twitter投稿

最新のタグを取得し、Twitterに投稿するAPIをGoとAWS Lambdaで作りました。 toshi0607/release-tweeter

リポジトリのオーナーとリポジトリを指定してポストするシンプルなAPIなので自分でホストし汎用的に活用しています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment