GoとGoogle App EngineでBackLogの鬼メールから解放される方法
何がしたい?
タスク管理をBacklogでやってるプロジェクトの場合、バンバンメールが飛びまくってしまう&メールのフィルタリングがしづらいのでメールの山になってしまうのがいまいちです(自分とそんなに関係ない細かい会話まで全部見るのはちょっと)。そこで、自分と関係ありそうな通知だけをある程度まとめてslackに流すボットを作ります。
なぜGo
以前javaでGAEのアプリ作ろうとしたときに、手順のあまりのめんどくささに挫折した記憶があるので、シンプルなGoでリベンジです。(appengine-web.xmlとか、web.xmlとか、、。そもそもGetしてPostするだけのクソアプリを作るのにeclipse開いてプロジェクト作るのも嫌です)。
hubotの使い方を覚えるのすらめんどいのでGoでべたべた書きます。
準備
API
Backlogの、自分へのお知らせ取得するAPIと
Slackの通知APIのエンドポイントをゲットします。(自分だけ使うので@Slackbotへ通知します)
BacklogのAPIドキュメント
SlackのAPIドキュメント
GAE
App Engineのチュートリアルを参考にSDKをダウンロードしたりします。
私はhomebrewでいれましたが。
$ brew install go-app-engine-64
ちょっと困ったところとして、Go GAEライブラリをインポートする際は
import "appengine"
という書き方をするのですが、appengineライブラリをシンプルに$GOROOT配下にgetしてくる事はできません
$ go get appengine # できない
"appengine"をimportする為にはGOROOTを、GAE SDK配下の"goroot"ディレクトリに設定してやる必要があります。
ただ私はGOROOT をいちいち切り替えるのがめんどくさかったので
GOROOT/packages/pkgの下と、GOPATHの下に、goroot下の"appengine"ディレクトリと"appengine_internal"へのシンボリックリンクを張る事にしました。
(go buildしたら、あともう一つ何か必要だとエラーが出ましたが、これは普通にgo getできます。なんだったか忘れました)
書く
GAEアプリとして認識させるためにはapp.yamlを作って、チュートリアルから8行ほどコピペするだけです。
(appengine-web.xmlとは大違いの簡単さ)
main.goでやってる事はBacklog APIからお知らせをGetしてSlackボットへPostするだけです。
お知らせは既読のものを弾いたり前回取得した物はとらないようにMinIdを指定したりしてます。
注意点は、httpクライアントはgoのhttpパッケージのものではなく、appengine/urlfetchというパッケージの物を使う必要があることです(GAEのURL Fetch Quotaの制御のためですね)
で、これはappengineのContextから貰う必要があり、appengineのContextを取得するためにはhttp.Requestが必要になります。
つまり必ずwebアプリにする必要があるようです(多分)
goroutine内でぐるぐる回してGet,Postしようかと思ってましたが、できません。
どうやって定期的にGet,Postするかですが、GAEはcronを用意してくれているのでそれを使って定期的にURLを叩きます。cronを使うには、簡単なcron.yamlをコピペして作るだけです。
動かす
ローカルで動かすには
$goapp serve
デプロイは、web上のGAEのコンソールへログインしてプロジェクトを作り、
$goapp deploy -oauth -application project_id
をたたきます。立ち上がりが早いです。
GAE簡単で良い
herokuよりもさくさくデプロイまでたどり着いたイメージです。
必要なファイルは3ファイルのみ。
Author And Source
この問題について(GoとGoogle App EngineでBackLogの鬼メールから解放される方法), 我々は、より多くの情報をここで見つけました https://qiita.com/tacogips/items/e4afb0f357ae61b480e5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .