コネヒト開発者ブログ

コネヒト開発者ブログ

gdpというGo製のCLIツールを公開しました

f:id:itosho525:20180823212423p:plain

おはようございます。こんにちは。こんばんは。

高校野球が大好きなリードエンジニアの @itosho です。甲子園が終わってしまったので、夏も終わりです。

実は先日ひっそりとGoで書いたCLIツールをOSSとして公開したので、今回はその宣伝をさせていただきます。リポジトリはこちら!

github.com

何が出来るのか?

一言で言うと「tagの作成とリリースノートの作成」が出来ます。はい、それだけです。

tagの作成

tagの作成と言ってしまえばそれだけなのですが、弊社のサーバーサイドのリポジトリはGitHubのmasterブランチにマージされたタイミングでステージング環境にデプロイされる運用になっています。

また、tagがpushされたタイミングで本番環境にデプロイされるようになっており、tag pushがデプロイ戦略において重要な役割を担っています。

もちろん、tagを追加してpushするだけであれば git tag タグ名 して git push origin タグ名 すればよいのですが、上記運用の場合、以下の課題がありました。

  • 意図せずmasterブランチ以外でtag pushしてしまうリスク
  • tag pushするタイミング次第では意図しないものをリリースしてしまうリスク
    • 自分以外の誰かがmasterマージ後にtag pushを行っていない場合など
  • タグ名に指定するバージョンを都度確認するコスト
    • 弊社の場合サーバーサイドのコードは1日に何度もデプロイされるため地味に面倒

gdpでは、上記課題を解決するためにtagの追加とpushをラップしつつ…

  • masterブランチ以外では実行出来ない
  • 事前に今回リリースされる内容を一覧で確認出来る
  • tagを省略した場合は自動で最新のバージョンを付与する

という機能を追加しました。

リリースノートの作成について

元々、弊社ではサーバーサイドのリポジトリに関しては、厳密にリリースノートを管理していませんでした。*1

しかし、人やチームが増え、サービスも大きくなってきたタイミングで、いつ何をリリースしたかを誰でもすぐに簡単に確認出来る仕組みが必要になってきました。

導入当初は CHANGELOG.md に書いていたのですが、ネイティブアプリのリポジトリに関してはGitHubのリリースノートにまとめていたので、これを機に全てのリポジトリのリリースノートをGitHubに統一することにしました。*2

という経緯もあり、gdpではリリースノートをGitHub上に作成出来る機能を追加しました。

どうやって使うのか?

最新の使い方や詳細な仕様はREADMEをご覧いただければと思うので、ここでは基本的な使い方のみ説明させていただきます。

インストール方法

事前にgitとhubコマンドが利用出来るようにしておいてください。

go get またはbrew経由でインストール可能です。

$ go get -u github.com/Connehito/gdp 
$ brew tap Connehito/gdp
$ brew install gdp

tagの作成

gdp deploy が基本コマンドとなります。先述の通り、弊社では tag push=deploy なのでこのようなサブコマンドになっています。

リリースされる内容を事前に確認したい場合

$ gdp deploy -t v1.1.0 -d

tオプションでタグ名を指定して、dオプションをつけるとdry-runモードになります。

実行結果は以下のようになります。

f:id:itosho525:20180823192916p:plain

リリース内容に表示される一覧はmasterブランチへのマージコミットです。

自動でタグを付与したい場合

$ gdp deploy -d

tオプションを省略すると、前回のtagを確認し、自動でtagを付与します。

実行結果は以下のようになります。(前回のtagはv1.0.0)

f:id:itosho525:20180823194100p:plain

実際にデプロイ(tag push)を実行したい場合

$ gdp deploy

dオプションを省略すると、そのまま実行されます。

実行結果は以下のようになります。

f:id:itosho525:20180823195151p:plain

リリースノートの作成

こちらは gdp publish が基本コマンドとなります。利用出来るオプションは gdp deploy と同様です。

$ gdp publish -t v1.0.1

tオプションを省略すると最新のtagからリリースノートを作成します。

実行結果は以下のようになります。

f:id:itosho525:20180823195224p:plain

また、GitHub上では以下のようなリリースノートが作成されます。

f:id:itosho525:20180823195234p:plain

ちなみに

実行後に表示される Do not be satisfied with 'released', let's face user's feedback in sincerity! というメッセージは弊社の開発チームのミッションのひとつである 「デプロイしたで満足せず、利用者のフィードバックに真摯に向き合う。」 の英訳になります。

何故Goで作ったのか?

1年ほど前から個人的にGoは触っていたのですが、それに加え、今年の4月にメルペイさんが主催しているGopher道場に参加させていただき、そこでCLIツールの作り方やテスト技法などを学んだこともあり、今回Goで書くことにしました。

もちろん、これぐらいのコマンドであれば、シェルスクリプトでも書けるのですが、個人としても会社としても言語の選択肢を増やすという点では良い選択だったかなと思っています。

今後に向けて

当初gdpは社内ツールとして使用していたものなのですが、一部機能を改良しCIなどを整備を行い、OSSとして公開出来たこと自体はとてもよかったと思います。

しかし、カバレッジの向上やリリース内容の抽出方法などまだまだ改善すべき点はあります。ですので、それこそ「公開した」で満足しないように、一人でも多くの人に使ってもらえるようなOSSになれるよう今後も継続的に頑張っていきたいと考えています。

使ってみて不具合や使いにくいところがあれば、Issueとして挙げていただければ幸いです。もちろん、Pull Requestも大歓迎です!

注釈

*1:少人数でやっていたこともあり、いつ何をリリースしたかはコミットログを追えば把握出来るため、必要性が高くありませんでした。

*2:これによりRedashを利用して、リポジトリ横断でいつ何をリリースしたかが分かるようになったのですが、こちらについてはまた機会があれば紹介させていただきます。