Fumiのブログ

「Go Conference 2019 Spring」に参加してきた!

はじめに

gocon.connpass.com

入館証

Wantedly Techbook

スピーカー特典

いいなぁ。欲しい。

Keynote

How a “not the greatest engineer” achieved his first contribution to Go

スライド

speakerdeck.com

発表者

twitter.com

概要

Every engineer dream of contributing to open source projects. But it’s not easy, is it? I had the idea too, but I gave it a try and my first commit was merged to Go! Let me share my experience, it might encourage you to start the challenge. It wasn’t easy, but not as hard as you imagine!

内容

Go公式ドキュメントに「Contribution Guide」というのがあるらしい。

golang.org

オススメのスライド2つ

about.sourcegraph.com

kevin.burke.dev

顔合わせではなくコメントだけだし、
全て英語でコミュニケーションとらないといけないし、 勉強するのにも時間が取られる...。

ということでけ、継続的に開発していくには...

  • マインドを保つのが大切
    • 完璧にすることはできないんだ

ということかな?

エラー設計について/Designing Errors

スライド

docs.google.com

発表者

twitter.com

概要

これこそGoにおけるエラーハンドリングのベストプラクティス。

内容

エラーとは、

  • エラーは処理が失敗した時に発生する
  • エラーは既知のエラー(予測されるエラー)と未知のエラー(予測されないエラー、Goではpanicが起きる)がある

未知エラーを既知エラーにする

  • エラーをアプリケーションの一部に組み込む

エラーに求められていること

  • どうやってエラー情報を誰に知らせるか
    • アプリケーション
      • エラーを識別できること
      • 型などで知らせる
    • クライアント
      • エラーを識別できること
      • ステータスで返す
    • エンドユーザー
      • 問題を解決するヒントになるようなメッセージが含まれていること
    • 運用者
      • 問題の根本的な原因を調査し、解決する手助けになる情報が含まれていること

Goのアプリケーションでエラーをどのように扱う

  • アプリケーション固有のエラーコードを定義し、エラーを識別する
    • クライアントで使うステータスコードを使う
  • 既知の外部のエラーは上で定義したエラーコードに変換する

failureというツールを作ったよ!

github.com

スポンサーセッション

クラウドサインの弁護士ドットコム

freee

twitter.com

H3 (S): 標準パッケージのみで大量のPNG画像をいかに高速に処理するか

スライド

go-talks.appspot.com

発表者

twitter.com

github.com

概要

Goの標準パッケージimage/pngを愚直に使って大量のPNG画像を処理すると、非常に遅い。 そこでサンプルのソースコードに対して、プロファイリングツールのpprofを用い、どの関数がボトルネックになっているかを調査します。 そして、「ボトルネックの発見」と「ソースコードの修正」を繰り返しながらインクリメンタルに処理を高速化する例を示します。

内容

  • プロファリングツール

プロファリングした結果、
image/png.filterで時間がかかっていることがわかった(全体の実行時間の1/7を使っていた)

  • フィルタの種類
    • None
    • Sub
      • Up
      • Average
    • Paeth

ただ、image/png.filterは標準パッケージなので、 ここのボトルネックは解決できないので次に時間がかかっているところを調べ、 ボトルネックを解消したことで速度が2倍になった。

compress/flateが3番目に重かった。
圧縮レベルを調整できる。

image/png.CompressionLevel

  • DefaultCompression
  • NoCompression
  • BestSpeed
  • BestCompression

A4 (S): Design considerations for container-based Go applications

スライド

speakerdeck.com

発表者

twitter.com

概要

Go言語でのアプリケーション開発で、特にコンテナを前提とする場合の設計考慮点について話します。 例えば、Go言語でAPIを開発する場合、コンテナとして動かすことを前提とするケースが多いと感じます。コンテナベースで動かすことを前提とした場合、コンテナイメージ作成・アプリケーション監視において、考慮すべき点が出てくるでしょう。このトークでは、Go言語での実装にまで踏み込んだ上で、コンテナベースアプリケーションにおける設計の考慮点について話します。

内容

H5 (L): Writing Go Analyses with go/analysis (from Go Team)

スライド

発表者

Michael Matloob

twitter.com

github.com

概要

The Analysis API is used to write analyses (like those in go vet and go lint) that canhelp surface bugs and show code improvements to users. I’ll show how to use andwrite analyses, and see their results, so you can help improve your code quality.

内容

今日プレゼン内で出てきたソースコード

github.com

今日プレゼン中に起きたこと
プレゼン者のPCがバッテリー切れ&カーネルパニック
バッテリ切れはあるけど、カーネルパニックが起きるのはなかなかないから、
そういう意味でも貴重な公演だった!

プレゼン解説ツイート群(ほぼ全て上田さんのツイート)

備考

今日の話、メルカリの上田さんの記事や「Mercari Engineering Blog」に書かれていた。

qiita.com

tech.mercari.com

B6 (S): GoでAPIサーバをはやくつくる

スライド

speakerdeck.com

発表者

twitter.com

概要

クリーンアーキテクチャで依存関係を整理しつつ、コード生成(wire, grpc, xorm, gotests, implなど)を利用してGoでAPIサーバを作る方法を説明します

techbookfest.org

内容

github.com

参考

H7 (S): We want AWESOME CLI tool & development

スライド

speakerdeck.com

発表者

twitter.com

概要

golang と言えば CLI ツール、CLI ツールと言えば golang、といった純粋想起が醸成されつつあります。初学者から達人まで、あらゆる Gopher が CLI ツールを開発し、CLI ツールの開発は難しくないと思われがちです。しかし、「優れた」設計・テスト・UI・ビルド・リリース・アップデート・CI・ドキュメンテーションなど、「より」CLI ツールを洗練するために考慮すべき点はあります。一方でその知見はあまり集合知として語られず、「達人」であっても疎かになっている点はあります。そこで今回は CLI ツール開発の包括的知見を紹介したいと思います。

内容

メモ

qiita.com

github.com

devblog.thebase.in

budougumi0617.github.io

github.com

B8 (L): CPU, Memory and Go

スライド

speakerdeck.com

発表者

twitter.com

概要

基本的なCPUやメモリを簡単に触れ、Goの最適化、コンパイラの最適化、Goで実装したときのCPUやメモリの振る舞いを紹介します。 またこれら最適化の様子やパフォーマンスを実際にGoの標準ツールを使いながら確認していきます。

内容

Other Session

Hacking Go Compiler Internals

スライド

speakerdeck.com

発表者

twitter.com

概要

Since the previous talk at Go Con 2014 Autumn, lots of things in the internals have changed. In this talk, I will try to give an overview of Go compiler internals and update the information as much as possible, along with my new hacks.

Case studies of designing developer friendly libraries

スライド

speakerdeck.com

発表者

twitter.com

概要

ライブラリやツールなど、自分以外の人間が「ユーザ」となる開発では、その Interface / Experience が重要であり、生産性や開発の楽しさにも直結します。本セッションでは、自身のこれまでの経験・まわりからのフィードバックから集めた、Developer にとってより良い Interface / Experience なライブラリ・ツールを作るための Tips や考え方を紹介します。

Golang JP Google+ Community Survey Results

スライド

talks.godoc.org

発表者

twitter.com

概要

Golang JP Google+ Community was closed on April 2, 2019. There were about 950 posts in 8 years and 4 months. I surveyed these posts as the last work of a coordinator. Let’s look back on trends and events of Go in Japan from this survey results! q@w@p

Security Scan for golang Using Open Source

スライド

Not found.

発表者

twitter.com

メモ

github.com

github.com

Better asset bundling tool than the best

スライド

docs.google.com

発表者

twitter.com

概要

I am creating new asset bundling tool. It will have some new features that the existing tools don’t have

Subee: Pub/Sub Worker Framework Implementation

スライド

speakerdeck.com

発表者

twitter.com

概要

マイクロサービス間で非同期処理を実現するために,メッセージキュー(Google Cloud Pub/Sub,Apache Kafka…etc)を用いた方法などが存在します.メッセージをキューと呼ばれる領域に保持し,メッセージを取得する側の処理が完了するのを待たずに次の処理を実行できるといった特徴があります.メッセージを取得する側では,単一メッセージまたは,複数メッセージを扱うWorkerを実装する必要があります.そこで,これらの要件を満たす,Pub/Sub Worker FrameworkであるSubeeを開発しました.本セッションでは,実装時に意識したこと,実際の利用方法について紹介します.

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

スライド

songmu.github.io

発表者

twitter.com

概要

Goで外部プロセスを起動する方法をシステムプログラミングにまで踏み込んで解説します。また、外部コマンドのタイムアウトを正しくハンドリングするための、github.com/Songmu/timeoutパッケージの解説もおこないます。これはGNU timeoutのGo portingですが、GNU版との差異についても解説します。

Gopherと行く Langな旅

スライド

yooappn.github.io

発表者

twitter.com

概要

Go書こうかなぁどう書いたらいいんだろう? 新しく言語書きたいけど、Goではああいう書き方できるのかな? の疑問・不安を解決します

煩雑な運用をGoを使って楽にする

スライド

speakerdeck.com

発表者

twitter.com

概要

プロジェクトを運用していると日々様々なタスクが発生します 例えばExcelでやりとりされるデータを適切に処理する必要があったり、Google Driveに保存してあるファイルを処理しつつバージョン管理する必要があったり、特定のファイルを大量に生成する必要があったり などです そんなGoで開発/運用されているのプロジェクトで起きた課題をどのように解決し、またその過程で嵌った点などを紹介できればと思います

Go1.9 で作られた App Engine のサービスを Go1.11 に移行した話

スライド

speakerdeck.com

発表者

twitter.com

概要

GAE/Go1.9 で運用されてきた MicroServices で作られたプラットフォームサービスを GAE/Go1.11 に移行する中で得た知見を紹介します。

Expand observability in Go

スライド

docs.google.com

発表者

twitter.com

概要

Go standard toolkit provides benchmark, tracer and profiler out of the box and its ecosystem provides those extensions that fit large-scale systems. In this talk, I’ll introduce how you can start implementing performant applications with standard tools, and how you can expand it to larger scale app.

Design pattern for Image and text composition in Go

スライド

Not found.

発表者

[https://twitter.com/search?q=timakin&src=typd:embed:cite]

概要

Owing to sophisticated standard or semi-standard packages, Go lets you process image and text composition so simply. However, a lot of references show only how to simply process images. In my talk session, I will explain one of a design pattern to combine them flexibly depending on a real business.

Dive into Buildkit LLB with Go

スライド

speakerdeck.com

発表者

twitter.com

概要

Dockerに正式統合されたBuildKitをGoで扱う方法について発表します。

BuildKit は Goで実装されている為、Goのソースコードを読むことでGoを使ったDockerfile解析ツールや、独自のBuildKit LLB frontendを作成できます。

今回の発表ではGoでどのようにBuildkitが記述されているかをコードを追いながら、Goを使ったDoコンテナイメージフロントエンドの解析ツールの作り方や、独自のコンテナイメージフロントエンドの作り方にも触れて行く為、Goでコンテナ技術を理解する大きな1歩になるでしょう。

内容

Building FIDO2 server in Go

スライド

speakerdeck.com

発表者

twitter.com

概要

FIDO2 (WebAuthn) is an authentication standard which enables passwordless authentication. I’ll introduce the mechanism of FIDO2 and how we can implement its server-side processing, especially the signature algorithm, in Go. I’ll also mention its integration with existing API servers written in Go.

Golang で Dockerベース のCIを作る

スライド

speakerdeck.com

発表者

twitter.com

概要

Continuous Integration (CI) は開発者にとってなくてはならないものですが、 CI定義などの学習/メンテナンスのコストや、ローカル開発環境との差分に悩まされることもあります。 そこで、Dockerfile のみで定義を行うCIサーバーを開発しています。 GolangにはCIサーバーの開発に必要な機能を実現するための仕組みが数多く備わっており、本発表ではそれらについて紹介したいと思います。

database/sql入門

スライド

speakerdeck.com

発表者

twitter.com

概要

これから始める人のためにdatabase/sqlパッケージの使い方をまとめます。 アプリケーションコード内での使い方だけではなく、環境構築方法、マイグレーション方法、単体テストや結合テスト、CI上でのテストの仕方も紹介します。以下のような気持ちの初心者にオススメです。

  • GoでDB操作したいけどどこかに情報まとまってない?

  • DB操作するコードってどうやってテストコード書けばいいの?

Fuzzy finder as a Go library

スライド

speakerdeck.com

発表者

twitter.com

概要

fzf や peco のような、インタラクティブにリストから特定の要素を検索・選択できるようなツールの登場は、コマンドラインにおける表現をより一層豊かにさせました。しかし、行指向には限界があり、こういった fuzzy finder はその能力を十分に発揮することができていません。このセッションではコマンドライン fuzzy finder が抱える問題を説明し、その問題を fuzzy finder をライブラリとして提供することで解決することを試みた話をします。

JavaプログラムをGoに移植するためのテクニック――継承と例外

スライド

speakerdeck.com

発表者

twitter.com

概要

Javaプログラムの設計や構造をそのままGoに移植しようとするとき、言語構造の違いに直面します。 Javaではクラスによるオブジェクト指向と例外機構が標準的に使われますが、Goでは構造体とインターフェイスを用いる他、例外機構ではないエラーハンドリングによって、元のJavaプログラムと同等の機能を実現する必要があります。 ここでは、ZXingというJavaのバーコードライブラリをGoに移植しているgozxingプロジェクトの経験から、Javaプログラムの特に継承と例外について、Goでどのように実現したかを紹介します。

Building Modules Discovery (from Go Team)

スライド

Not found.

発表者

Julie Qiu twitter.com

概要

At some point, we all find ourselves wanting to use a third-party Go package in our Go code. This talk discusses strategies for discovering, evaluating and maintaining Go packages and modules. It also shares new tools that the Go team is building to make this process better.

内容

Implementing Quota as a Service

スライド

speakerdeck.com

発表者

twitter.com

概要

Quota、あるいはRate Limitという単語を聞いたことがありますか?あるサービスのリソース単位の割当量をQuota、その中でも特に、APIのリクエスト数など、ある一定時間に対してかけられた制限をRate Limitなどと呼びます。本セッションでは、Quota as a Serviceを実装するに至った経緯や、実際に実装していくにあたって検討したアルゴリズムやOSSとして公開されているQuotaライブラリについて紹介・解説、実装で考慮する必要があった課題とその解決についてお話します。

Dark side of the reflect

スライド

www.slideshare.net

発表者

twitter.com

概要

Golang has a feature called reflect. Generally, it is said that using reflect is antipattern, but sometimes we face the scene to use it. This talk will describe the golang’s reflect function through the experience of writing ORM from scratch using reflect in our products.

スポンサーセッション

Go Quiz

スライド

docs.google.com

発表者

twitter.com

gobpfでPostgreSQLを動的トレーシングする

スライド

docs.google.com

発表者

twitter.com

標準パッケージにおけるテストでの利用例から学ぶ testing.quick パッケージ

スライド

speakerdeck.com

発表者

twitter.com

SQLFormatter written in Go

スライド

Not found.

発表者

twitter.com

Event Sourcing with Go

スライド

docs.google.com

発表者

[https://twitter.com/garsue:embed:cite]

俺はビッグエンディアンでテストがしたいんだ!!!(How to test on BigEndian arch on Travis CI)

スライド

docs.google.com

発表者

twitter.com

システムライブラリに依存しないlessコマンドAPIの簡易版を作った

スライド

speakerdeck.com

発表者

twitter.com

Other memo

medium.com