みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

Go勉強会 Webアプリケーション編 (gRPC)に参加してきた。

2019/02/19(火)に「Go勉強会 Webアプリケーション編 」に参加してきました。今回の題材は「gRPC」です。gRPCは、公式ページのQuick Startをいくつかの言語で実施して、Basics(英文)のページを読んで一旦止まっていたので、ある意味では復習になりました。

 

go-golang.connpass.com

 

開始早々「Goの勉強会なのにGoじゃないじゃん」と主催者の人が言っていました(笑)。ただ、gRPCはGoで書かれているしExampleもGoのコードだったし、まぁ良いのではないのでしょうか。

 

アイスブレイクでは、隣の席の方と少しお話をしました。曰く、業務ではk8s(or Docker?)のpluginをgolangで書かれているそうです。pluginはVolume周りの対応に利用しているとのこと。業務利用のためオープンには出来ないとのことだったので、詳しくはお聞きできませんでした。残念。

 

さて、本編です。

主催者の「tikidunpon」さんが以前書かれたスライドと、公式ページの内容を翻訳してくれた資料をもとに解説をしてくださいました。細かい内容については割愛します。

 

 

qiita.com

qiita.com

qiita.com

qiita.com

少しだけ勉強会の内容をまとめておきます。

 

メリット:

gRPCの利点はやはりProtocol Bufferによって、リクエスト/レスポンスのコードが存在していることだと思います。人の書いた仕様"書"での定義と異なり、実際にコード中で利用するコードが存在しているのは大きい。項目の有無、型の指定、名前の指定など、ケアレスミスなどによるバグは防ぐ効果は高いと考えられます。

また、HTTP/2の存在も大きい。バイナリデータで転送は効率的だし、サーバサイドプッシュも可能だし。

 

デメリット(注意点):

Protocol Buffer内でつけるタグですが、不要になった項目が出た後も削除して順番を詰めたりせずに残しておく方が良いそうです。内部的に覚えている様子。さらっと話が流されていったので、ここは後ほど調べてみようと思います。

それと、Protocol Bufferはいくつかの言語には対応していますが、言語によって対応レベルがまちまちであるという点。Go言語が一番対応しているので、可能ならGoで実装するのが良さそう。一方で、同じGoogleという括りにもか変わらず、Android対応はあまり進んでいない様子。

 

その他:

インタフェース部分をMockを使ってテスト。ビジネスロジックに当たる部分はそれ単体でテストするという話を聞きました。

また、4種類のRPCによるストリーミング通信(Unary, Server streaming, Client streaming, Bidirectional streaming)があるけど、実質使うのはリクエスト/レスポンスが1対1のUnaryがほとんどという話。それ以外については、あまり実例を聞かないということでした。

あとは、実際に業務で利用している方達の声を聴くと、出来るだけマイクロサービスとして利用した方が良く、Webブラウザスマホ端末からの利用では苦労することが多いとの話も出ていました。この辺りは、2018年10月あたりに正式版で出たgRPC-Webによって変わってくるでしょうかね。 

 

まとめ:

1時間半という短めな時間でしたが、gRPCの復習+実際の事例も知ることができて、有意義に過ごせました。Mercari.goでgRPC王の話を聴いて始めたgRPCの勉強ですが、できれば業務などで実際に触っていけたらなぁ、と思っています。

 

余談:

会場を提供していただいているIDOMさん。東京駅から地下街を通過して行けるので、雨の日には凄く便利。割とこちらの勉強会の日は雨に当たることが多いので、重宝しています。

それと、今年(2019年)からスーツ着用になってしまったそうです。勉強会会場への誘導の方々がスーツを着ていらっしゃったので「あれれ?」と思っていた矢先でした。エンジニアにスーツを着せるのって色々な意味で戦闘力を落とす行為だと思っているんだけど、どうなんだろう?

www.idom-inc.com

また、主催者の「tikidunpon」さんですが、今度PLAIDさんに転職されるとのこと。「おー。しがないラジオで良く聴く会社やー」とか思って話を聴いていました。できる人なんやなー。

plaid.co.jp

shiganai.org