へんてこのブログ

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

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むずかしい
お使いください