Go
Go言語
gRPC
udemy
Udemy学習応援

【Udemy】gRPC [Golang] Master Class: Build Modern API & Microservicesをやってみた


はじめに


  • 年末にUdemyのコースがセールになってまして、Go言語使っててHTTP/2やmicroserviceが学べるコースがないかなと探してたらこれが見つかり買ってみました。

    gRPC [Golang] Master Class: Build Modern API & Microservices

  • でもすぐにやらなくて積んdemyなってました。。。

  • なので【Qiita×Udemy特別企画】学習応援イベントがやってたので試しにのっかってみました。


コース概要

の前に


英語

このコースは中身をみればわかると思いますが、全部英語です。

ですが大して難しい英語を使ってるわけでもありませんし、プログラミングですからソースコード見て理解すればいいので英語がハードルになることはそんなに無いかと思います。

自分はまあまあ英語が得意なんで苦手な方はいくらか差し引いて考えた方がいいかも。


概要

ざっとこんな感じでした。


  • gRPC オーバービュー

  • gRPC 詳細

  • gRPC の各種実装パターン


    • Unary

    • Server Streaming

    • Client Streaming

    • Bi-Directional Streaming



  • その他機能の実装


    • エラー実装

    • デッドライン

    • SSLセキュリティ

    • 別言語からの通信(Java)

    • gRPC のEvans クライアントの使い方



  • 実践的なアプリを作ってみる

  • MongoDBと連携してCRUD APIを実装

  • おまけ(クーポンとか)

gRPC の各種実装パターンでそれぞれUnary、Server Streaming、Client Streaming、Bi-Directional Streamingを説明していて、そこについてのプログラミング解説が主な内容でした。


やったこと

ひたすら写経!Webページを作った時のように見栄えの良いものを作るわけでもないので、かっこいいアウトプットはありません。

リポジトリを載せておきます。

https://github.com/suganoo/go-grpc-course

gRPC のサーバーを起動して、クライアントを実行してみるのをひたすらやってました。


学んだこと


ざっくり各種パターン


Unaryパターン

単純にリクエストを投げて、レスポンスを受けるというパターンです。(1:1)

REST APIみたいなものでした。ex. 2つの数字を送ったら合計値が返される。


Server Streaming

1回リクエストを投げて、複数のレスポンスを受けるパターンです。(1:n)

ex. ある数値を送ったら素数がすべて返ってくる。


Client Streaming

複数回リクエストを投げたら、1回のレスポンスを受けるパターンです。(n:1)

ex. 複数個の数値を送ったら、平均値が返される。


Bi-Directional Streaming

相互に複数回通信するパターンです。(n:n)

ex. 複数個の数値を用意しておき、順次1コづつ数値を送ると、それまでに受けた数値の最大値を更新した時に最大値を返す。


Calculator

上で例として書いてますが、平均値を返したり、最大値を返したりするアプリを作ってみました。なるほどという感じです。


MongoDBと連携してアプリ

ブログを作ったと想定して、MongoDBにデータを入れこみCRUDを実装しました。MongoDBは実際使うのは初めてで、これはなかなかMongoDBも含めて勉強になりました。便利だねー


Evans CLI

gRPCのサーバーに対してのクライアントアプリです。最後にちょろっと出てきてこいつは便利だなー!と思いました。でもDLしてビルドしたところなぜか接続できず残念でした。。。

https://github.com/ktr0731/evans


別言語からの通信(Java)

これは動画からしか見てませんが、他の言語からちゃんと通信できてて便利でした。


MongoDBのドライバ設定はちょっと注意

バージョンが違うのかimportの定義の仕方は下記のような書き方でないとエラーになってました。



"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"


時間があればやりたかったこと

Udemy特別企画の締め切りを目標にしてて、さらに始めるのが2月半ばを過ぎてからだったので、コースを終わらすことしかできませんでした。

コーディングしてるといろいろとやってみたいことが出てきたので、それが今後の宿題かなと思います。


  • HTTP/2通信としてはどうなってるのか。 サーバーはnet.Listen(...)で始めてるし、クライアントはgrpc.Dial(...)で始めてたのでヘッダーとかどうなってるのか。

  • protoc で生成されるGoのソースを見てみる。

  • TLS通信の仕方。各種サーティフィケーションファイルはコマンドコピペだったのでちゃんと復習したい。

  • gRPC 使ってチャットアプリ作ってみたいですね。


最後

やっぱこういう企画がないとやらないですね(汗)。

ですが今回を気にgRPCが学べたのでとてもよかったです。

またUdemyは年末年始になるとセールになるのでお得です。

Udemyだと新しい技術が出てきたときに英語版であればいち早くコースが出てくるのでチェックしてみるといいかと思います。

ザーッとやってしまったとはいえ修了証明書が最後にでるとうれしいものですね。