おそらくはそれさえも平凡な日々

Goツールのクロスビルドとパッケージングのためのgoxzというツールを作った

Goツールのクロスビルドと成果物生成には個人的に長らく、goxcを愛用していましたが、その乗り換えとして、goxzというのを作った。go + x(cross) + z(zip)でgoxz。便利です。

https://github.com/Songmu/goxz

goxcは非常に高機能なのですが、僕がその機能の一部しか必要ないことや、goxcのメンテ自体も止まっている(とオフィシャルでも案内されている)ことが気になったので作りました。

具体的には「Goツールのクロスビルドと成果物のアーカイブ生成をパラレルにおこなう」ことしかしない。アーカイブ生成時に、リポジトリからLICENSEやREADMEを自動的にかき集めるのはやってくれます。

基本的には「設定より規約」という感じで、良い感じのデフォルトを決め打ちにして、あまり細かい設定項目などは作らない想定です。

インストール

https://github.com/Songmu/goxz/releases に生成物があります。homebrewのFormulaも用意しました。お好きな方法でインストールしてください。

% brew install Songmu/tap/goxz
% ghg get Songmu/goxz
% go get github.com/Songmu/goxz/cmd/goxz

使いかた

Goプロジェクトのリポジトリ直下で以下のようにすれば、./dist ディレクトリ以下に生成物が配置されます。

% goxz -pv=1.0.1 -os=darwin,linux -arch=amd64 -d=dist ./cmd/mytool
% tree ./dist
dist/
├─ mytool_1.0.1_darwin_amd64.zip
└─ mytool_1.0.1_linux_amd64.tar.gz

後は、みんな大好きghr を使えば、GitHub Releasesに成果物をアップロードできます。

% ghr 1.0.1 ./dist

補足など

成果物配置ディレクトリ内の事前クリーンナップ処理はおこないませんので、ビルド前に整理するか、新規ディレクトリを指定するなどしてください。配置ディレクトリが存在しない場合の新規作成はgoxzはおこないます。

成果物の名前に、バージョン情報を含みたくない場合は、-pvオプションを指定しなければそうなります。

圧縮方式は、windowsとdarwinでzip、それ以外がtar.gzが標準となっていますが、-z オプションを使うことで圧縮方式をzipに統一することができます。

Mackerelプラグインパッケージの作成に利用する

goxz はMackerelプラグインパッケージ作成にも利用可能です。Mackerelプラグインパッケージは、ファイル名にバージョン情報を含まず、また、zipであることが期待されているため、以下のように指定すると良いでしょう。

# mackerel-plugin-hoge 配下で
% goxz -os=darwin,linux,windows -arch=amd64 -z
% tree ./goxz
goxz/
├─ mackerel-plugin-hoge_darwin_amd64.zip
├─ mackerel-plugin-hoge_linux_amd64.zip
└─ mackerel-plugin-hoge_windows_amd64.zip

後は、先にも述べたとおり、ghrを使って、GitHub Releasesにアップロードするのが簡単でしょう。

ぜひご利用ください

単純に比較するのはフェアではないですが、goxcのコードベースが8000行を超えているのに対し、goxzはテスト込みで600行程度ですので、見通しも良いと思います。

goxzを作るにあたって、goxcを参考にした部分もあります。特にコマンドラインオプション設計などは参考になり、改めてgoxcは良くできているな、と思ったりしました。

goxz は既に goxz 自体のビルドに使われています。僕の身の回りのツールも徐々に乗り換えていく予定です。

Goツールの成果物をGitHub Releasesに上げるときのこれからの定番は、goxz + ghr ってことで一つ。

ということで、ぜひご利用ください。機能要望やpull requestもお待ちしています。

created at
last modified at

2017-12-26T15:16:50+0900

comments powered by Disqus