へんてこのブログ

日々気づいたことや、最近やっていることを書いています

golangでdgate-inviteというの作った #deploygate

概要

golangでdgate-inviteっていうコマンド作った
henteko/dgate-invite · GitHub

golangを書くことを目的に作った
少しは勉強になった気がする

dgate-invite

dgate-inviteとは、DeployGateAPIであるInvite APIを叩くコマンドです
もともとこのInvite APIには、GET,POST,DELETEで各々各アプリのメンバーを取得出来たり追加出来たり削除出来たりするのだけど、それをコマンドで出来るようにしてる

使い方

こんな感じで使える
package名とかuser名は各々のに置き換えてもらいたい

# GET
$ dgate-invite -g -p com.henteko07.assisthack
# POST
$ dgate-invite -i -p com.henteko07.assisthack henteko2
# DELETE
$ dgate-invite -d -p com.henteko07.assisthack henteko2

実際に使ってみる

最近流行のpecoを使えばインタラクティブにメンバー一覧から探してメンバーから削除なんてことも出来る

$ dgate-invite -g -p com.henteko07.assisthack | peco | xargs dgate-invite -d -p com.henteko07.assisthack

f:id:henteko07:20140720143015g:plain

あとは社員のメンバーリストを用意してそこからインタラクティブに選択しながらinviteするみたいなことも出来る

$ cat user_list.txt | peco | xargs dgate-invite -i -p com.henteko07.assisthack

f:id:henteko07:20140720143529g:plain

peco便利や…
このgifとかはttygifとttyrec使いました、便利

ログインとか

ログインには、公式のdgateが参照しているローカルの設定ファイルを見てる
なので、dgateコマンドを既に使ってる人は特別なログイン処理とか要らない
ログインとかしたかったらこんな感じで出来る

# ログイン
$ dgate-invite -login # nameとかtoken聞かれる
# ログアウト
$ dgate-invite -logout

実装

実装は、適当な感じにやった
httpのライブラリとか、標準のnt/httpパッケージを使おうとしたけど、とりあえずmreiferson/go-httpclient · GitHubとかを使った
標準のでも良かった気がする
最初はddliu/go-httpclient · GitHubを使ってたけど、DELETEとかに対応してなかったので、自分で書いた
https://github.com/henteko/dgate-invite/blob/master/dgate/simplehttpclient.go
fileのpostも書いたけど、使ってなくて完全にミスった
多分壊れてる

あとはjmoiron/jsonq · GitHubを使ったりしたけど、これも標準のでいいかもなーとか思ってる
コマンドの入力のパースには標準のflagパッケージ使ってて、golangは大体標準でいいのかもしれないって気持ちになった

package分離

最初はGO_PATHとかよくわからなかったけど、自分で設定してるGO_PATHに移動してその中のsrc/github.com/hentekoとかいうところにdgate-inviteとか置いて、その中にpackage dgate作りたかったらdgate-invite/dgateって掘ってその中に.goファイルを入れれば、mainではimport github.com/henteko/dgate-invite/dgate で参照出来て便利だった
これはいい
public methodは先頭大文字ってのもわかりやすいなぁ

CI

CIにはhttps://drone.ioを使ってる
使ってるけど、まだテストとか書いてないのでクロスコンパイル用に回してる
drone、travisとかに比べるとgithubにpushしてからの反応が糞早くてめちゃくちゃいい
使いやすいし

最後に

golangむずかしい
お使いください

Bakusoku Iterations Tokyo 1に参加した #deploygate

Bakusoku Iterations Tokyo 1に参加してきた
内容的には開発サイクルの話だとかで面白かった
発表内容も面白かったけど本番は懇親会みたいな感じでピザとかビールとかが自動で出てきて最高だった
特に最高だったのが、いつもピザはドミノピザとかだったのになぜか見知らぬピザ屋さんので美味しかった
ピザの耳まで美味しかったし相当だった
これが無料とかヤバい

明日はGitHubの人とかが来てくれるイベントがある
GitHub & DeployGate Tokyo Meetup
また美味しいピザが出るのではと思っていて今から最高の気分

gradle-xcodePluginにプルリクした

openbakery/gradle-xcodePlugin · GitHubにプルリクした!
Support for DeployGate by henteko · Pull Request #63 · openbakery/gradle-xcodePlugin · GitHub

何したのか

Support for DeployGate!!!
gradle-xcodePluginだけでdeploygateにアップロード出来るようにした
便利
使い方とかは以下を見れば分かりそう
iPhoneアプリをGradleでビルドしてDeployGateで自動配布する方法の続き - Qiita

ハッカソン

http://www.lovelive-anime.jp/img/top/keyv5a.png
(http://www.lovelive-anime.jp/から引用)

この前の土曜日に、同期で集まってハッカソンするみたな感じのことをやっていたのだけど、そこでやること無かったからgradle-xcodePluginにDeployGate対応をした
そのハッカソン自体はラブライブ見ながら全員違うことやりながらモクモクするみたいな感じで、とにかくラブライブ最高だった

Travis CIからDeployGateにアップロードする

Travis CIでAndroidアプリをビルドしてDeployGateにアップロードします

使うもの

今回のサンプルプロジェクト

henteko/AssistHack · GitHub

gradle準備

普通にgradleでビルド出来るようにしたAndroidアプリのプロジェクトを用意します
そして、gradleでdeploygateに簡単に上げられるgradleプラグインがあるので詳しくはここを参照しながら準備して下さい
ここで重要なのが、deploygateを上げる際にtoken(api key)が必要なんだけど、これは公開してはいけないので、gradle.propertiesを使って外部化する(下のやつのmyToken部分)
今回はこのような形になった

travis準備

これ読んでる人なら大丈夫だと思う気がする
githubにプロジェクト上げてルートに.travis.ymlを生成する
.travis.ymlの中はここを参考にさせてもらった
最終的にこのような形になった

ここで重要なのがsecureの文字列
ここにはdeploygateのtokenを記述する
今回はgradleでmyTokenといったプロパティ変数名で読み込んでいるので、こんなコマンドでいける

$ gem install travis
$ travis encrypt ORG_GRADLE_PROJECT_myToken=<deploygateのtoken>

これで出力された文字列を.travis.ymlに書けば、travis内で以下のコマンドを実行したのと同じになる

$ export ORG_GRADLE_PROJECT_myToken=<deploygateのtoken>

ちなみに、ORG_GRADLE_PROJECT_<変数名>ってのを環境変数に加えると、自動でgradleがプロパティ変数化してくれる、便利

あとはgithubにpushするだけ

pushするだけでビルドが走って成功すれば自動でdeploygateにアップロードされます
便利

参照

Android Studio projectをTravis-CIでビルドする - Islands in the byte stream
Travis CI からHerokuへのデプロイを自動化してみた - アジャイルSEの憂鬱
Literal Ice: Gradleでプロパティなどの設定情報を外出しして切り替えて使う
Travis CI: Encryption keys DeployGate/gradle-deploygate-plugin · GitHub