natumn.blog

なつめ(ん)?ブログ

メルカリのスカラーシップでGo Conference 2018 Autumn に行ってきた

f:id:nktafuse:20181125210400j:plain

こんにちは、natumnです。
11/25に開催されたGo Conference 2018 Autumnにメルカリのスカラーシップ制度で行ってきました!

スカラーシップ制度について

tech.mercari.com

今回のGo Conference に参加するにあたって

  • 交通費、宿泊費
  • Go Conference 2018 Autumnへの参加
  • ルカリオフィス見学
  • Goエンジニアの方々とランチ

のサポートをしてもらいました。
東京のカンファレンスに参加したくてもお金がないという地方の学生にとってとてもありがたい制度です。 基本的にメルカリの社員の方とご一緒させてもらうわけではなく当日自由にイベントやセッションに参加する形でした。 今回は会場近くのホテルを予約していただきました。徒歩10分くらいで会場にいけて近くて便利でした。

会場 と セッション

今回のGo ConferenceはGoogle Tokyo office 27Fで行われ、セッションの行われるA会場とB会場, ハンズオンが行われるC会場の3つの会場に別れていました。 どれもとても面白そうでどのセッションを聴きに行くかとても迷いました...!


私は以下のセッションを聴きに行きました。

  • Keynote session - Go on App Engine Second generation
  • S1 - Microservices実装ガイド in Go at Mercari
  • S2 - よくあるJava IT企業で新規プロジェクトをGoで立ち上げてみてる話
  • A1 - OpenCensus による APM の実現と、未来
  • A2 - Profiling Go Application
  • B3 - Linting, Slicing, and Dicing OpenAPI documents
  • A4 - Consider pluggable CLI tool implementation
  • A5 - フィードバック制御によるGoroutine起動数の最適化
  • B6 - API Testing the Hard Way
  • A7 - Introduce GAE/Go 2nd generation
  • S3 - Pains and gains of architecting microservices on local dev environment
  • S4 - 大規模ウェブサービスにおけるコードレビュー観点
  • LT1 - 社内初導入のAPIサーバーサイドアーキテクチャ設計戦略
  • LT2 - gorealizeで始めるDocker開発環境

セッションまとめ、感想

以下セッションのまとめと感想です。

Keynote session - Go on App Engine Second generation

GoogleのSteven Buss氏によるGoogle App Engineの始まりから現在までのランタイムの歴史の話でした。
1st genのGoogle App Engineではセキュリティの観点から Google Linux → ptrace → NaCl (Google Native Client) → Go という構造で二重にサンドボックス化をしていたそうです。
しかし、それにより

  • GoのマイナーバージョンのリリースごとにRuntimeのバージョンあげる必要がある
  • パッチやセキュリティレビューの時間がかかる
  • appengine packageなどによる利用制限
  • NaCl自体が難しい

など多くの制限が存在しました。 それらの解決策としてgVisorが開発され、NaClからgVisorへの移行が行われました。 1st genに比べ http.ListenAndServe 使えたり、dev_appserver.py いらないかったり、同じアプリを通常どおり go build して起動できるようになったり、goappコマンドいらなくなったりと appengine特有のものが減ってありがたい。しかし、ptraceが若干ボトルネックになりデプロイが遅くなってしまっているとのこと。いずれにせよ、正式リリースが楽しみですね...!
私は最近Google App EngineとGoを利用して開発を行うことが多いのですが、gVisorは名前だけ知っているという状態でしたので、今回1st genから2nd genへの移行とその経緯の話を聞けて興味深かったです。 また、gVisorではptraceやseccomp-golangを用いてアプリケーション側からのシステムコールの監視や制限を行なっているのですが、実際にコードを読んでみるとGoでのシステムプログラミング学べてそれがまた新鮮で面白かったです。

A2 - Profiling Go Application

speakerdeck.com

@orisano氏がGoのプロダクトで実際に行った高速化やプロファイリングの実例のお話でした。
自前の画像変換サーバーからOSSのkubelet、go-swaggerのパフォーマンス改善をしてどのようなプロセスで改善をしていくのかわかりやすいセッションでとても勉強になりました。エンジニアにおけるパフォーマンス改善のなかで「推測するな、計測せよ」とはよく言いますが、実際にそれを行動に起こすにはイメージがわかなかったり、具体的にどうしたらいいかわかりづらくて少し難しいと思います。そこで今回のお話は具体的にどんなGoのツールやライブラリを利用してどんなプロセスで、どんなことを考えていたのかを聞けて勉強になりました。また、個人的にコンパイラのBounds Check Eliminationを初めて知ったので興味深かったです。
OSSでも意外とカリカリにチューニングしてあるプロダクトは少ないとのことなので、私も頑張ってコントリビューションしていきたいと思いました。

B6 - API Testing the Hard Way

speakerdeck.com

Goにおけるアプリケーションのテストの話でした。ネット上に投稿してあるGoのテストのノウハウは

などばかりでテストの実例が少なく、特にインテグレーションテストが少ない。そこでスピーカーの@timakin氏が実際に行っているTestのTipをまとめて話してくれました。
まず、テストにおけるインターフェースによる抽象化のメリットやTable driven Test, テストのキャッシュ、Goでテスタビリティーをあげるために心がけたいことなどを前提としていかにそれらを実現していくかを考えてきました。 個人的にfailed時に呼び出し場所の出力を行うTest HelperメソッドやtryというHTTPリクエストのラッパーが参考になりました。また、それらはGo標準やGoogleのプロダクトのテストコードを見てみると勉強になるとのことでした。今回のセッションでGoにおけるテストはいかにうまくテストのヘルパー関数を作り、わかりやすくて簡単にテストコードがかける仕組みを提供するのも大事だなと思いました。 便利に効率的にテストを書いていきたいと思いました!
また、テストのキャッシュに関しては以下のプレゼンを見て欲しいのとのことでしたが、こちらも面白かったです。

speakerdeck.com

ルカリオフィス見学 & ランチ

次の日にはメルカリのオフィス見学とGoエンジニアの@tenntennさん、@codehexさん、@inukiromさんと焼肉ランチにいきました。 エディタなどの開発環境の話やGo Conferenceのセッションを振り返ったり、最近出たanalysis packageの話をしました。analysis packageは静的解析するモジュールのインターフェースと構造体を定義したパッケージです。それを利用することにより直接ast/goなどのパッケージを扱うよりもモジューラビリティが高く、静的解析のツールが扱いやすくなります。実際に触ってみたい方はtenntennさんのreadonly が使い方がシンプルでわかりやすいので参考にするといい思います。また、analysis/passes以下に色々な実装が入っているのでそこのモジュールを利用していくのもおすすめです。 私もanalysisパッケージを利用してツールを作ってみてます。ガンガン静的解析で便利なツールを作っていきたい!
あと、なぜか税金の話もしてました笑 学生であまり気にしたことはなかったのですが、社会に出る前にしっかり勉強しておこうと思いました。

おわりに

一年ぶり2度目のGo Conference への参加だったのですが、なによりとても楽しかったです!!! セッションがどれもおもしかったのはもちろんですが、周りにはGoが好きなエンジニアしかいないと思うととても刺激的な場でした。 よりGoの良さを知れてもっとGoでプロダクトを作っていきたいと思いました。
運営をしてくださった方々、スポンサーとして様々な支援をしてくださった企業さん、今回スカラーシップを提供してくださったメルカリさん、本当にありがとうございました!
次もまた参加したい。