iOSDC Japan 2018でgrpc-swiftについて話してきました
台風に恐れおののきながら記事を書いていますtanaka(カバ)です。
今回が初iOSDCの参加で「iOSエンジニアの為のgrpc-swift入門」というタイトルで話してきました。
iOSDC自体の感想は別にまとめるとして、ここでは発表の反省やら質問頂いた点などをまとめておきます。(初mediumです!)
反省
緊張で自分が「な… 何を言っているのか わからねーと思うが..」状態になりましたが、どうにか終えました。反省としては、
- 想定より文字が小さかった
- そもそも15分で終わる内容ではなかった
といったところで、
想定より文字が小さかった
これは特に文字の小ささが原因で、デモ中に片手でコードの拡大を余儀なくされ大分テンパりました..デモを失敗しないよう動画で用意してたので大分油断してました。
15分で終わる内容ではなかった
構成を考える中で、どう頑張ってもgrpcの解説だけで半分以上時間を消費してしまい、残り2/5程度でgrpc-swiftの話をするペース配分になりました。これは「iOS関連の話ではないけどiOSエンジニアに聞いて欲しいトーク」にすべきだったかなと聞いて頂いた方々に少し申し訳ない気持ちになりました。
とはいえ
当初目標に掲げていた以下の2つのうち、「gRPCに興味を持ってもらう」という点はクリアできていたかなと感じていて、物足りなさがあるがゆえ、逆に次の@KyoheiG3さんの発表や。
@ra1028fe5 さんの発表にバトンを渡せたのかなと勝手に思っております。
質問とその回答
Q: クライアントでgRPCを使うとサーバー側にどのような制約がかかるのか?
A: gRPCはTCPコネクションを使い回すので、今までREST APIでは上手く出来ていたケースでもロードバランシングが出来なくなるケースがあります。バックエンドにEnvoy ProxyやgRPC環境での負荷分散に詳しい方がいないと導入は難しいかもしれません。
Q: nilになりうる値をどう扱うのか?
A: ProtobufにOneOfという仕様があり、それで実現はできると思いますが。無理のある方法なのでおすすめはしないです。(補足: 自分はOneOfを使ったことがないので正しく機能を評価できていないです。)
その他の知見
iOSDCでgRPCについて色々な方と話して得た知見、感想としては、
- gRPCを外してprotoからのコード自動生成だけ活用するケースもある。(ただしエンドポイント作成部分は自動生成できない。pluginでどうにかは出来る。)
- TLS通信時の証明書更新の温度感はプロダクトのフェーズによる(gRPC-Swiftの場合はデフォルトの.pemがバンドルされていて、それが使われるが、それの更新タイミング)
まとめ
何だかんだで発表資料に載せない細かい部分も調べたので、非常によい知見が得られたと思います。iOSDCに関わっている皆様、スライドを見てくれた皆様、本当にありがとうございました。引き続きgRPC-Swiftはウォッチして情報を発信していきます 💪
