goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など
LTしてきました。色々学びあって楽しかったです。
会場提供のistyleさんありがとうございました。
少しだけ補足説明とexampleコードを書いたので紹介しようと思います。
LTした資料
注意点
- goとgoaについてすでにある程度理解がある人向けです
- goaのversionは、v1.2.0の前提で話しています
go generate使ってコード生成して開発する流れについて
–forceをつけることで毎回mainのgenerateは作り直してます。
//go:generate goagen -o gen main --force -d github.com/kyokomi/example_goa_api/_design //go:generate goagen -o gen app -d github.com/kyokomi/example_goa_api/_design //go:generate goagen -o gen swagger -d github.com/kyokomi/example_goa_api/_design
_design下を変更したときの作業手順は以下のような感じになります。
- _design下を編集する
- ルートディレクトリでgo generateする
- 生成された
gen/main.go
から追加したリソースのMountのコードをルートディレクトリのmain.go
にコピペする gen/
下に生成されたリソースのControllerをapplication/controllers
下にコピーしてimport等を直す(リソース追加ではなく編集の場合は、必要なMethodだけコピペする)
swaggerの配布について
werckerのworkflowの設定はこんな感じです。
build
のworkflowはexampleのリポジトリをご覧ください(https://github.com/kyokomi/example_goa_api/blob/master/wercker.yml)。 build
のworkflowが終わったあとに design/*
のブランチ名だったら put-swagger
のworkflowが実行される感じになってます。
put-swagger: box: golang:1.8 push-to-ecr: steps: - script: name: set timezone and deploy tag code: | export VERSION=`cat $WERCKER_ROOT/VERSION` echo $VERSION - edgecaseadmin/install-aws-cli: key: $AWS_ACCESS_KEY_ID secret: $AWS_SECRET_ACCESS_KEY region: $AWS_REGION // s3にswagger.jsonをコピーする - script: name: s3 put swagger code: | aws s3 cp $WERCKER_ROOT/gen/swagger/ s3://swager.example.dev/$WERCKER_GIT_REPOSITORY/$VERSION/ --recursive // s3に配置したswaggerのjsonをurlに指定したswagger-uiのリンクをpullRequestコメントする - script: name: swagger github comment code: | go get github.com/kyokomi/gh-rice gh-rice \ -t "$GITHUB_TOKEN" \ -o "$WERCKER_GIT_OWNER" \ -r "$WERCKER_GIT_REPOSITORY" \ -b "$WERCKER_GIT_BRANCH" \ -c "http://swagger.example.dev/?url=http://swagger.example.dev/$WERCKER_GIT_REPOSITORY/$VERSION/swagger.json"
※s3のパスとかは適当です
exampleコード
ヘルスチェックのAPIくらいしか書いてないのであれですが、参考になればと。