拙い気持ちのアウトプット

私の気持ちをアウトプットする場所にしようと思っています

mercari.go #10 に参加して

mercari.connpass.com

久々になってしまいましたが、こちらの勉強会に参加してきました

以前からGoの勉強会はたまにチェックしていたんですが、最近は社内の勉強会でもGoが取り上げられたり、Goのお仕事もしてみたい気持ちがあったりで、ちょっと真面目に取り組んでいます。

といってもやっとチュートリアルを走破したぐらいですが…

go-tour-jp.appspot.com

C系の経験はかなり昔にObjective-CiOSアプリを1年ぐらい作っていたぐらいで、ポインタに苦しんでいます

今後はいくつかアルゴリズムやパターンの実装を練習がてらやって、Webアプリを作っていきたいなと思っています

AWSで遊ぶのが忙しくてあまりリソースを割けてないですが…)


今回の勉強会では先日サンディエゴで行われたGopherCon 2019の報告会ということで、実際にGopherConに参加されたメルカリの方がセッションやワークショップの紹介をしてくれました

www.gophercon.com

全て面白かったのですが、個人的に特に興味深かったのはUberのマイクロサービスの事例でした

Mercari BOLD Scholarshipという学生向けの支援制度で参加された、大学生の方が紹介してくれました

約1,500のGoのマイクロサービスをMono-Repo(モノレポ)で管理してBazelでビルドしてるそうです(あってるかな?)

Mono-Repo / Poly(Multi)-Repoというワードは初めて聞いたんですが、マイクロサービスっていうとどちらかというと後者なイメージが強かったので印象的でした

Goなマイクロサービス界隈ではこのGo + モノレポ + Bazelな構成は、けっこう定番なのかもしれないです

mixiさんもやっていたり?)

medium.com

Go言語だけとかパラダイムが揃っているとより一層効果的な感じがします

というかこの大学生の方も非常に技術力高くて、すごいなと思いつつ自分も頑張ろうと思いました

もう一人の大学生は文系のGo歴半年でドローン飛ばして撮影してました

なんかすごかったです

他には全編英語で紹介してくれた方もいて、聞き取りやすい英語とわかりやすいスライドで非常に勉強になりました


以下当日のメモ

mercari.go #10

2019/8/20

GopherCon 2019報告会

GopherCon 2019

@morikuni さん

Mercari x GopherCon

Silver Sponsor

mercariからは社員11人+学生2人の参加(すごい)

GopherCon 2019の話題

Go 2のgenerics/contract簡易まとめ

why don't you Go?

Generics

正式名称(?): Contracts

他の言語でいうGenericsと似てるが同じではない

直和型

Workshop: Go-Beginner Training

@mark.hahn さん

英語!でも聞きやすい

background

Goはポピュラーになった

-> 初心者のトレーニングが重要性を増している

なぜGoでDocker作ったのか

A Tour of Go の内容は結構網羅的でいいのかもしれない(もう一周するか)

type(value)でキャストできる

int(hoge)とかstring(hoge)とか

Make things in Go!

Q:C言語やってたほうがいい?

A:あるにこしたことはないけどプライオリティ次第かな?

A2:C作った人たちはCの課題も認識してたから、それをGoで解決したかった ガベージコレクションとか、大規模開発に不向きとか そういう意味では、Cの背景がなくてもいいっちゃいいのでは?

How Uber Goes

@micnnicim さん

GopherCon BOLD Scholarship の参加者の学生

大学4年生!

Problems with Go

  • 新しいマイクロサービスをフルスクラッチで作るコストの高さ
  • マイクロサービスごとにアーキテクチャが大きく違う(スイッチングコスト)
  • 横断的な機能開発の難しさ

Solutions

DI uber-go/fx

https://github.com/uber-go/fx

Google製の Wire ってのも https://github.com/google/wire

DIライブラリというより薄いアプリケーションフレームワーク

Transport Layer/Bisiness Layerの混合

glue

Clean Architectureにインスパイア

$ glue new service

Polyrepo -> Monorepo

Bazelとモノレポ

マイクロサービスはサービスごとにリポジトリ作るもんだと思ってたけど、モノレポって考え方もあるのか〜

How I Write HTTP Web Services After Eight Years

https://speakerdeck.com/upamune/gophercon-2019-report

@upamune さん

https://gopherize.me/

GoでHTTP

Maintenability

  • 最初から考慮する

Glaceability

  • 視認性
  • コードだけでなく構造的にも

Gode should be boring

  • 他の人が理解できるように書く
  • 経験の殆どない人が利用する可能性

Self Similar code

  • コードベース内で似たコードがあると親しみやすくなる?

Tips

  • グローバル変数は使わない
  • ルーティングは一箇所で管理
  • request/responseはラップして抽象化する
  • request/responseの構造体をハンドラーの関数内に閉じ込める テストがちょっと煩雑になるが、明示的にもなるのでむしろいい

matryer/is

stretchr/testifyのパワーダウン版

TinyGo

@taqboz さん

英語不安 -> GopherのコミュニティSlackで結構情報拾える

とはいえ、できたほうがもっと理解できて楽しめそう

TinyGo

https://github.com/tinygo-org/tinygo

通常のgo buildしたものの1/20のバイナリサイズ!

コードにもよるが、~1/10ぐらいのサイズにはなるらしい

デメリット

  • goroutineのサポートが完璧じゃない
  • GCは一部対応
  • 使えない標準パッケージが多い(net/httpとか)

usecase

IoTデバイス、マイクロコントローラでの利用とか?

デモ

TinyGo Playground

PKI for Gophers

@hunter さん

英語!むずかしい…

PKI

公開鍵暗号基盤

いわゆるデジタルサインというやつ

generate key -> hash -> sign -> verify

math/randじゃなくてcrypt/randをつかうこと

Goの標準パッケージ X509

Goの標準パッケージ TLS

server/client同じプロセス

generate key -> create request -> send request

parse request -> check sign -> create cert -> send cert

Server Name Indication

Go does not support encryptes SNIs.

Golang supports hardware keys.

Workshop: Observability in Go & Socket to me: Where do Sockets live in Go?

@yuki.ito さん

https://speakerdeck.com/110y/my-favorite-talks-at-gophercon-2019

Observability in Go

Log/Metrics/Trace

Log

標準パッケージlog

logrus使って構造化しましょう

MetricsとTraceがない場合はすべてログに出すしかない

MetricsとTraceがある場合はログは人間のために出す

Metrics

標準パッケージexpvar

今システムがどういう状態か、はわかる

Prometheusと合わせて振り返りができるように

Trace

Jaeger

APM

datadogはいいぞ

Socket in Go

ローレイヤー過ぎてついていけない…


以上でした

転職して2ヶ月近く経って少し気持ち的にも落ち着いてきたので、またどんどん外部の勉強会にも参加していきます