Software engineering from east direction

六本木一丁目で働くソフトウェアエンジニアのブログ

Go Conference Tokyo 2019 Spring スピーカー参加・聴講感想 #gocon

Go Conference Tokyo 2019 Spring にてスピーカー参加してきました。今回はいつものカンファレンスより準備を早めにやったこともあり、がっつり他の方のトークを聴講できました。純粋なメモ・感想を書いていきます。

発表したSession

"Design considerations for container-based Go applications"という発表をしました。

発表自体の概要や背景については所属企業のブログエントリで公開するので詳しく書きませんが、Gopher君もらえて嬉しかったです。

f:id:khigashigashi:20190518162503j:plain
Gopher君かわいい

聴講Sessions

次のセッションを聴講しました。

  • Keynote "Go Module Proxy Life of a Query"
  • Hacking Go Compiler Internals 2
  • Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決
  • Dive into Buildkit LLB with Go
  • CPU, Memory and Go

Keynote "Go Module Proxy Life of a Query"

Memo

Impression

Hacking Go Compiler Internals 2

Outline

Memo

  • Lexer
  • Parser
  • Annotated AST construction
  • Typechecking
    • 型チェック
    • 変数・値のみではなく
  • Varitable binding
  • Inlining
  • Escape Analysis
    • new()関数、heapにおかれる
    • 変数定義で確保、stackにおかれる
    • stackにおいたものをheapにおかなきゃという判断
  • Closure Rewriting
  • Walk
  • SSA Generation
    • Go1.7で導入
    • Go1.7以前ではできなかった最適化できる

Impression

Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決

Outline

Memo

  • コマンドラッパー
    • ghq・mackerel-agentなどコマンドを実行する例
  • コマンド実行
    • os/exec packageを使えば簡単に
    • io,MultiWriter
  • シグナルハンドリング
    • SIGKILL・SIGSTOPはできない
    • SIGTERMで正常終了を促すのがお作法、できなかったらSIGKILL
  • exec.CommandContextの問題は、SIGKILLで強制停止・孫プロセスを停止できない点
  • Songmu/timeout
  • timeout.c
    • SIGCONTを送ることで強制的に再開させる

Impression

  • 本筋ではないですが作ってるライブラリの量がすごい、見習ってがんがん公開していきたいと思いました
  • 今回発表いただいた資料を見ながら公開されているライブラリを読むと更に勉強になりそう。ありがたく勉強させていただきます...!

Dive into Buildkit LLB with Go

Memo

  • Docker18.0.9で正式機能として利用できるBuildKit
  • BuildKitが提供するもの
    • buildctl・buildkidt
  • BuidKitはGoで書かれている
  • BuildKitもurlfave/cli 使ってるんだへぇ
  • LLB
    • BuidKitのコア
    • BuildKit では LLB(low-level builder) に一度変換する。 LLB は DAG 構造
    • grpcで通信・protocol bufferを使っている
  • Opertaionの依存はinputsに定義
  • 。DOT 言語に変換することで GraphViz で可視化できるツールとして llb2dot を作った
  • BuildKitはマルチステージビルドの並列化だけではなく、RUNレベルの1ステップ単位でも共通化できる。
  • Dockerfile2LLB
  • Dockerfileのlinterを作ったりできる

Impression

  • Dockerfileのlinterを作ったりできる、たとえば、「Dockerfile内で環境変数を与えていないか」みたいなlinterを作ることも可能。 僕のトーク内容触れていただいたからには帰って試さなければ…!
  • @po3rin さんのトーク、BuildKit・LLB概要レベルくらいしか知らない僕でも、実際に手を動かせる手ほどきになっていて、めちゃめちゃありがたかった...!
  • コードハイライトどうやってるんだろう?

CPU, Memory and Go

  • sonatard さんの発表

Impression

  • CPU, Memory and Go”のトーク、Goが何をしているかに関してわかりやすく解説いただいていてすごくよかった、後で資料公開頂いたら読み直したい...!
    • 公開いただいた読み返しまくる
  • 大盛況で立ち見勢だったのでメモは取れず

さいごに

Goの様々知見が聞けてめちゃめちゃ良かったです!運営の方々このような素晴らしい場をありがとうございました!