きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など

istyle.connpass.com

LTしてきました。色々学びあって楽しかったです。

会場提供のistyleさんありがとうございました。

少しだけ補足説明とexampleコードを書いたので紹介しようと思います。

LTした資料

speakerdeck.com

注意点

  • 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下を変更したときの作業手順は以下のような感じになります。

  1. _design下を編集する
  2. ルートディレクトリでgo generateする
  3. 生成された gen/main.go から追加したリソースのMountのコードをルートディレクトリの main.go にコピペする
  4. gen/ 下に生成されたリソースのControllerを application/controllers下にコピーしてimport等を直す(リソース追加ではなく編集の場合は、必要なMethodだけコピペする)

swaggerの配布について

werckerのworkflowの設定はこんな感じです。

f:id:kyokomi:20170617235511p:plain

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くらいしか書いてないのであれですが、参考になればと。

github.com