goa って何?
goa ってのは golang で APIデザインを書くと,そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです.
goa は golang のソースとして DSL が書けて,そいつを goa にかけてやることでコードを生成します.ぱっと聞いた感じ,最初に抱く印象は「キモい」だと思うんですが,json や yaml を書いてコードを生成するよりかなり見通しよくAPIがデザインできると思いますし,なにより,goa の生成するコードがすごく読みやすいコードで,使ってるウチにだんだん「goa (キモ)かわいいな」と思うようになってきました.goa 自体のコードも変態的(コード生成プログラムなのでしょうがない)でありながら読みやすいコードで書かれているのも好印象です.
Web API を golang で書こうと思えば,極論 net/http でも構築できますが,データの受け取りとかバリデーションとか割と同じようなコードを沢山書くことになったり,ちょっとした仕様変更でドキュメント修正したりするのが結構つらいです.
goa 使うと,データの受け取りとかバリデーションの定型的なプログラムはほぼほぼ生成してくれて,同時にドキュメント(仕様)も swagger 形式で生成してくれます.埋めなければならないのは生成されないビジネスロジック部分だけです.一説にはビジネスロジックはプログラムコード全体の20%にも満たないなんて話もありますから,ビジネスロジックに集中できるのは効率の面でも重要です.
Who wants stickers? pic.twitter.com/02viBYRxkc
— Raphael Simon (@rgsimon) July 11, 2016
ツイッターで goa の開発をおこなってる raphael さんが,gophercon 用に準備した goa のステッカーを twitter にあげていて,遠目に欲しいなーとイイねしたら,ホントにステッカーを送ってもらえることになりまして
goa ステッカーを手に入れたぞ!
— ikawaha (@ikawaha) 2016年7月26日
Thanks for sending me the stickers @rgsimon pic.twitter.com/g4iKSDiyKb
海を越えて送ってもらっちゃいました!「送ってあげるからアドレス教えて」と twitter で DM が来て,あまりの嬉しさで舞い上がってしまってメールアドレス教えちゃったのは秘密です.
沢山いただいてしまったので,この機会に goa の魅力を知ってもらおうとステッカー頒布会 兼 goa 勉強会を開催することになりました.
発表
#1
発表はまず,@ikawaha から goa について,簡単なイントロをまとめました. goa のインストールから API デザインの説明一通り.時間があれば Basic認証,テストの話も・・・と, 当初からだいぶ絞ったので20分で普通に終わるかと思ってたんですけど,かなり駆け足で時間もオーバーしちゃいました. はじめて goa 触る人の助けになれば幸いです.
#2
How I create a Microservice using goa - Slideck
@tchssk さんからは goa をつかって実際のサービスを作る話をしていただきました. gorma という goa で使える準標準的なプラグインがあるんですけど,これをつかうと,DB のモデルとかも API デザインから作ってくれます.ずっと気になってたプラグインだったのでホント俺得でした.機会があれば使ってみたい.また,Docker を使ったテストの話や swagger UI の話もありました.goa は API デザインの swagger定義をドキュメントとして生成してくれるので,swagger UI があると,UI 上から作成した Web API の endpoint をポチポチ叩いて確認出来るので,ホントに便利です.
#3
Development using goa and golang on Pacificporter inc.
@haruyama さんからは,実際の現場での goa や golang の Tips をお話しいただきました. goa のミドルウエア使ってセキュリティヘッダ用意する話とか,go の linter を実際どうやって使ってて,どういうところが使い勝手悪いかなど紹介して下さいました.
#4
最後に @dead_cheat さんから「Go のバイナリ配布関する色々」というお題で LT をして下さいました. アセットをバイナリに埋め込むのに go-bindata はよく使ってたんですが,zgok ってのもあるんですね. 発表後,graceful restart の疑問についていくつか twitter で回答も寄せられていたみたいで,やっぱ発表したりするの大事だなと思いました(小並
感想
初めて勉強会なんてものを主催してみたんですが,これは結構大変ですね.今回,質疑応答の時間の時間を全然盛り込んでなく,懇親会も開催しなかったので,いろいろお話ししてみたい方々が集まって下さったのにお声がけできなかったのが非常に心残りでした.
次回,もし勉強会主催することあれば懇親会までなんとか頑張ってみたいものです.
お集まり下さった皆様ありがとうございました!
goa は pr 送ると,申し訳程度の修正でも "great!" とか "perfect!" とか全力で励ましてくれて骨身にしみてありがたい感じになります.
issue の中には初心者向けの issue (help wanted
beggineres
) なんてものもあるので,これを機会に,使うのはもちろん,コントリビュートも是非!