初心者がGo Conference’19 Summer in Fukuokaに行って、飛び込みLTしてきた

こんにちは、CX事業本部の夏目です。

先週末 "Go Conference'19 Summer in Fukuoka" に参加して、ついでに懇親会LTをしてきました。

懇親会LT "みんなGolangどうやってんの?"

Golang初心者なので、みんなどんな環境で開発しているのか知りたかったので、会場で募集していた懇親会LTで聞いてきました。
とは言えLTなので、何もなしで質問するだけでは時間内でも終わらないと思い、DirectPollというリアルタイムアンケートを実施できるサービスを使って聞いてきました。

Golang始めてどれくらい

どのぐらいの経験者がいるんだろうと思ってした質問。

一年以上が多いかなぁと思ったら、一年未満もそこそこいた。

Golangそのもののバージョン管理何を使ってる?

Golangのそのもののバージョンは何で管理してるんだろうかと思ってした質問。
RubyとかPythonだったら**envとかで管理することが多いから、みんなどうやってるのか気になってた。
質問した後で、バージョンを管理していないという選択肢を作らなかったことを後悔するぐらい"その他"ばかりの回答。

LT後軽く話した感じだと、HomebrewとかでGolangをインストールしてるのではないか、といった感じだった。

Golangでパッケージの管理何でやってる?

個人的にはすごく気になってたパッケージ管理の質問。

Golang 1.11から試験的に導入され、1.12から正式対応したGo Modulesが大半だった。

Golangの開発は何でやってる?

IDE(エディター)に関する質問。
思った以上にVSCodeが多かった。

LTしてみて

初心者として気になってたところは聞けた。

特にエディターは何がいいかなぁと思っていたら、自分が使おうと思っていたVSCodeが多くてちょっと安心。

セッション レポート

ここからはセッションレポート。
自分が聞いてきたセッションについて軽く感想を書いていこうと思います。

(LTについては自分の仕込み中ということもあってあまり聞けてないです、すみません)

Goによる静的解析のはじめかた

スライド

静的解析の必要性と、自作してみるお話。 開発において静的解析が何故必要なのか、どう使えばいいのかがすごくわかりやすかった。

また、自作の静的解析ツールの作り方もわかりやすく、すごく良かった。

懇親会でもLTをしていて、その内容は静的解析ツールのライブコーディング。 ライブコーディング以外の部分をあわせてもLTの5分で完成していた。
(スライド - Go Quiz Analyzer)

Sponsor talk: 「Backlog」のGitを支えるサービス達をGoで刷新した技術的プラクティス

BacklogのバックエンドをGolangで刷新したというお話。

マイクロサービスで作ってたから機能ごとに別言語を使っていたけど、Golangに統一したらよかったよという話(全体的な利益はスライド最後にまとめられてる)。

途中途中つまったところだったり、攻撃受けた話もあって面白かった。

個人的には、"標準パッケージという最高のお手本"という最高のパワーワードが印象的だった。

Sponsor talk: Goで作る大量プロセス管理機構

mockmockというIoTのデータ送信用の仮想デバイスを提供するサービスの裏側の話。

大量のプロセスの管理方法や、モックを動かしながらモックを管理するソフトのアップデート方法とか面白かった。

Linux middleware development

STNSというLinuxのユーザーの名前解決用ミドルウェアを開発中に起きた問題と、どう解決したかというお話。

中身はgdbを見ながらどういった問題だったのか、どのように調査したのかを詳しく解説してくれた。

最終結論としてCGOのc-sharedで利用するときにはforkするような使い方はしないほうがいいとのこと。
(利用するのであればfork先のプロセスで明示的に初期化処理が必要とのこと)

Sponsor talk: ~~Cloud Functions in Go at Mercari~~ マイクロサービスの成果を可視化する

メルカリにおいて、開発者はマイクロサービスの成果をどれだけ享受できているかを数値として取得した話。

一日のデプロイ数を人数で割り、一人あたりのデプロイ数を取得するアプローチが印象にのこった。

なぜ Go はマイクロサービスのための言語なのか

Cacooのバックエンドを開発している人の、Goとマイクロサービスは相性いいぞ、つまりはGoはいいぞ、というお話。

Dockerのmulti-stage buildによるイメージサイズの縮小とか、ObservabilityのためのTracingやMetricsの取得などはGoだと簡単だよということ。

How to Write Go CLI Tools

GolangでCLIツールを俺はこう作った、といった感じのセッション。
CLIツールの実装部分の参考になるものが多く、個人的に非常に嬉しかったセッションの一つ。

Goでコマンドラインツールを量産する僕の方法

スライド

2コマ目のCLIツール開発の話。

前半が頒布(配布)についての話で、後半がコマンドラッパーの話だった。
配布の際のライセンスの話とか、コマンドを終了させたいときのお作法とか、面白いし気になっていたことだったので、めっちゃ面白かった。

Image processing with Go has great potential !!

Golangを使った画像加工の話。

Golangに限らず画像加工全般の話としても面白かった。
GolangではWebAssenblyでブラウザ上でも動くという話と、WebAssenblyではどう画像データを渡すのかという部分があって、自分もやりたくなった。

Data aggregation design with Goroutine, Channel, "sync" package, and Simple diagram

データ処理をGolangでどうやったかというセッション。
ここで言うデータ処理はビッグデータとか大規模なものではなく、手元で扱うような小さなデータの処理のお話。

とはいえ、データ処理をパイプラインとして考え、つなぎこむアーキテクチャはとても面白かった。

Cost-effective Go unit test thinking and practices

Golangのテストを書く際に コストも気にしましょうねというお話。
テストにおいて、メリット・デメリットを比べてメリットのほうが大きくなるようにやっていきましょうね、というもの。

Golangにおけるテストの基本的な考えに従えば大丈夫とか、こういったプラクティスもあるよとか、初心者的には非常に嬉しいものだった。

Hello, Worldまで3ヶ月 Go言語でファミコンエミュレータ実装

Golangで低レイヤープログラミングをしてみた話。

実際にできあがったものがかなりマニアックな仕様だったり、低レイヤープログラミングの沼に引きずり込もうという感じの、いいセッションだった。

LT: Introduction of Women Who Go Tokyo

懇親会LTでのコミュニティーの紹介。

LT: chan + 順序制御 = ochan

スライド

Golangの並行処理の結果を正しい順番で出力するためのライブラリ作ったよ、という話。

便利そうだなぁとは思いつつ、仕組みについては自分には難し過ぎてよくわからなかった。

LT: Fagott - Golang HTTP Client testing framework

HTTP Clientのテスト用Mockを作成したというお話。

まとめ

初心者が行っても、Golang面白そうだなぁ、便利そうだなぁと思わせてくれるいいカンファレンスでした。

とりあえず自分は、並行処理のためにゴルーチンを勉強して、なにかCLIツールを作ってみたいと思います。