【Golang】Goaのv3を使う - コンテナイメージの作成
こんにちは。エンジニアの土田です。
スクラム導入のためにやっていたスクラムマスター業も落ち着いてきたので、最近はエンジニアリング側に力を割けるようになってきました。
今はGolangでのAPIサービスの実装を検討をしていて、Goaというフレームワークが用途に合っていそうだったので、使い方を調べています。
GoaでAPIを作成する
GoaはAPI仕様をコードで定義し、それを元にコード生成をして、必要なロジックを実装していくタイプのAPIフレームワークです。
このフレームワークは、公式でマイクロサービス向けを謳っている通り、APIでのコミュニケーションが多くなるシステムで必要となってくる、
- Swagger定義
- gRPC(Protocol Buffers)
などの面倒を、API仕様を書くだけで同時に見てくれます。
Goa用コンテナイメージ
動作を試してみようとしたところ、準備がそこそこ必要だったので、 公式の入門相当のことが実行できるDockerfileを用意しました。
以下は『goa-sampleのプロジェクトルートにはmakefileとgo.modがあって、sampleというAPIサービスをビルドする』という想定のDockerfileです。
FROM golang:1.12 AS api-builder RUN apt-get update && \ apt-get install -y git unzip && \ apt-get clean && rm -rf /var/lib/apt/lists/* ENV GO111MODULE on RUN go get -u goa.design/goa/v3/cmd/goa # install protoc ARG PROTOC_VER="3.9.1" RUN mkdir /protoc ADD https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VER}/protoc-${PROTOC_VER}-linux-x86_64.zip /protoc WORKDIR /protoc RUN unzip protoc-${PROTOC_VER}-linux-x86_64.zip && \ mkdir -p /usr/local/protoc && \ cp -r bin /usr/local/protoc && \ chmod 644 -R /usr/local/protoc && \ chmod 755 /usr/local/protoc/bin/* && \ cp -r include/google /usr/local/include && \ chmod 644 -R /usr/local/include/google ENV PATH $PATH:/usr/local/protoc/bin WORKDIR / RUN rm -rf /protoc RUN go get -u github.com/golang/protobuf/protoc-gen-go WORKDIR /go/src/goa-sample COPY . . RUN make FROM alpine AS api-server EXPOSE 8000 COPY --from=api-builder /go/src/goa-sample/sample .
マルチステージビルドにしていますが、開発用コンテナだけでよければ、
docker build --target api-builder -t api-builder .
といった感じでイメージを作成すると使いやすいのではないでしょうか。
Goa v3での使い方
今回調べていると、Goにmodulesが実装された1.11以降、Goaのバージョンが上がってv3になり、 既存のGoaのインストールとはちょっと変わったところが出ていたので、 それらに対応したコンテナイメージを作ってみました。
Goa自体の仕組みや実装方法については触れずじまいでしたが、調査が進んで情報が整理できたら、またネタにするようにします。