shuntaka.dev
shuntaka.dev
Go Conference 2022 Spring参加レポート

04/23 09:12 2022

01/03 14:22 2026

#はじめに

Goとしばらく離れていましたが、最近作りたいものができたこともあり、変化に追いつくためにもGo Conference 2022 Springに参加した。今回はリモート開催となる。イベント詳細情報は、下記の通り。

  • Go Conference 2022 Spring公式ページ
  • connpassのイベント参加ページ

#スケジュール

4/24(日) AM 7:00 時点で、公開されている発表資料/スライドのリンクを更新しました 不備がありましたら、こちらまで

スライドのリンクが分からない箇所には(未)を入れています

時刻 Track A Track B
10:00 - -
10:10 人間の直感に対応させた複雑度<Cognitive Complexity>の計測ツールをgo/astで実装してみよう 📄(未) -
10:30 創業以来のPHPシステムが生み出した混沌をGoへの移行で乗り越えた話 📄(未) -
11:00 Dissecting Slices, Maps and Channels in Go 📄(未) ゼロから作る Protocol Buffer のパーサーとレキサー 📄
11:40 GoのGC(garbage collector)について理解する 📄 lock free な doubly linked list を実装していたらいつのまにか concurrent skip list map を実装していたでござる 📄
13:10 レガシーシステムをGoにリプレースした一年間の振り返り 📄(未) -
13:30 メタバースを支える技術 ~UGCに溢れる3D空間のリアルタイム同期を支えるGo〜 📄(未) -
14:00 高速で統一的な自動生成ツールをprotocプラグインとして実装した話 📄(未) Go で RDB に SQL でアクセスするためのライブラリ Kra の紹介 📄
14:40 database/sqlパッケージを理解する 📄 「自動コード生成ツール」を20分で作れるようになろう 📄(未)
15:20 GoでAPI クライアントの実装 📄(未) GoらしいAPIを求める旅路 並行処理編 📄(未) 🎥
15:40 testingパッケージを使ったWebアプリケーションテスト(単体テストからE2Eテストまで) 📄 HTTP Tunneling in Go 📄(未)
16:00 GoとLambdaを使用した高パフォーマンスでサーバレスなマイクロサービスの開発と運用 📄 Go Module with Microservices and Monorepo: Clear Dependencies with Ease of Development 📄(未) 🎥
16:30 型パラメータが使えるようになったのでLINQを実装してみた 📄 IoT with TinyGo 📄
16:50 Let's contribute to OSS with Go 📄(未) Go で始める将棋AI 📄(未)
17:10 The introduction of my way to learn Go together with Go community. 📄 Motto Go Forward Goを支える文化とコミュニティ 〜なぜ我々はコミュニティにコントリビュートするのか?〜 📄(未)
17:45 Goの標準機能で簡易システムを低コストで作成するテクニック 📄 -
17:50 Python製の姓名分割ライブラリをGoに移植した話 📄 -
17:55 外部コマンドの実行を含む関数のテスト 📄 -
18:00 大規模ゲーム開発におけるContext活用パターン 📄(未) -
18:05 GoとKubernetesを用いたバッチ開発のすすめ 📄 -
18:10 Gopher, Chrome, Automation in 5m 📄 -
18:15 Go runtime の歩き方 📄 -
18:20 Go言語仕様輪読会の開催を通じた振り返り 📄 -

#セッションの感想

#人間の直感に対応させた複雑度<Cognitive Complexity>の計測ツールをgo/astで実装してみよう

📄(未)

メモ

  • 認知的複雑度を測定する静的解析ツール nrnrk/gocognito

感想

Cyclomatic complexity(循環環複雑度)は聞いたことがあったが、Cognitive Complexity(認知的複雑度)は知らなかった。。人間の直感近い複雑度が計測できるとのこと。 Cognitive Complexityを計測するためgo/astを使って、静的解析ツールを作るセッション。astの構造体を理解する上で参考にしたいと思いました!

#創業以来のPHPシステムが生み出した混沌をGoへの移行で乗り越えた話

📄(未)

メモ

  • CMS側をPHPからGoへ移行した話。テスト,静的解析,クラス,関数全てなしのコードのリプレースに関するセッション
  • RDBにJSONのカラム(text)があり、map[string]stringや定義した構造体にパースするため、sqlxのScannerやValuerといったインタフェースを駆使し、課題解決した

感想 sqlxでイレギュラーなRDBの値に対して、対応する手段があるのは便利だなと思いました!

#ゼロから作る Protocol Buffer のパーサーとレキサー

📄

感想 個人的にGoはパーサー実装に強いと思っています。理由としてgojqやesbuildの既存実装を移植したプロジェクトも存在し、どれも本家と遜色ないどころか高パフォーマンスだったりします。 本セッションは、なんらかの理由で(Google公式のprotoパーサーだと全ての文法規則に対応していない?)Protocol Bufferのパーサーを実装するという内容。

木構造の設計の工夫などパーサーだけでなく、静的解析のツールチェインを作ることも考慮したTipsが説明されていた。VimのALEプラグイン経由で自動修正のデモもあり、かっこよかったです。自作言語のもう一歩先を行ったトピックで、自分良い題材が見つかったら参考にしたいと思いました。

go-protoparserを読むのも良さそうです(執筆時15000行くらいはあるので、全体を把握するのは大変そうですが、、)

#GoのGC(garbage collector)について理解する

📄

メモ

  • discordの事例でGoを利用した結果、2分毎のGCによってSTWが起きて、レイテンシが高くなり、許容できずRustにリライトした
    • Go 1.9.2の利用事例で少し古いという指摘もあり
  • GCは生産性を上げるために必要なため、GoにはGCが存在する
  • GoはConcurrent Mark Sweep(CMS)を採用
    • 最古のGCアルゴリズムを改良した
  • GCもバージョン毎に改善が入っている
    • GoチームでGCのSLOがある

感想 GoのGC理解の大一歩としてとても良いセッションと感じました。GoのGCアルゴリズムの概要から始まり、バージョン毎に改善が入っている点、GoチームでGCのSLOがある点など、個人的に知らないこと盛りだくさんでした!

#レガシーシステムをGoにリプレースした一年間の振り返り

📄(未)

感想 DDD, Clean Architecture, Onion Architectureを利用したプロダクトの話。並列テストにも少し言及があり、参考になりました。

#メタバースを支える技術 ~UGCに溢れる3D空間のリアルタイム同期を支えるGo〜

📄(未)

感想

メタバースなアプリケーションのサーバーサイドでのGo活用事例。UGC(ユーザー側で作成できるコンテンツ)の素材の転送効率の最適化やPub Subサーバー(ユーザーアバター、空間制御周り)でGoを利用しているとのこと。一般的なWebアプリと異なる高負荷、ステーフルな環境下であるメタバース領域でのGo活用事例でとても新鮮でした!

#高速で統一的な自動生成ツールをprotocプラグインとして実装した話

📄(未)

メモ

  • ソーシャルゲームのGo事例。マスターデータ量が多く、コードを自動生成しないと辛いレベルの規模感。自動ジェネレートが遅く、Protocol Bufferを活用
  • goimportsをかけたときに、import文を追加する処理は、対象のライブラリが見つかるまで探索(Nまで探索)するので重い。対策として、あらかじめimportを追加しておく、goimportsのimports削除はAST解析のみでされるので、誤ってimportしてしまうことを許容して問題ないとのこと。
  • filepath.Walkよりfilepath.Walkdirが速い。(Go 1.16で追加)
  • protcプラグインはログに標準エラー出力を使う

感想 自動生成コードI/O処理の極小化として、File I/Oはギリギリまで発生させないという話は分かりみが深かった。goimportsやgofmtをライブラリから生成されたバイト配列に対して適用しているとのこと(面白い)。自動生成定義にprotocを使って素振りしたいなと感じました。

#GoとLambdaを使用した高パフォーマンスでサーバレスなマイクロサービスの開発と運用

📄

感想 ランタイムが1つというのは確かにメリットだなと感じました!ベンチマーク結果は、GoはやはりLambdaでも良いパフォーマンス結果が出ていました。ただ実際にアプリを書くと、Nodeは自然と非同期になる一方、Goはgoroutineを使う必要があることを考慮すると要件次第だなぁとも思いました。。

#IoT with TinyGo

📄

メモ

  • fastlyがほぼフルタイムでTinyGoの改善をしているとのこと

感想 goroutineも使えるのは意外だった。httpやMQTT(内部的にはpahoを利用)のpub/subが使えるので、それなりに遊びが出来る段階には来ているんだなーと感じました。Wio Terminal持っているし、どこかで試したいですね。

#外部コマンドの実行を含む関数のテスト

📄

感想

目から鱗でした。外部コマンド実行結果のモックがサクッと実装できるとテストが捗りそうですね。。標準ライブラリのテスト読んでみることの重要さにも気づけて良かったです。

#Gopher, Chrome, Automation in 5m

感想 私が昔Chrome自動化をする際には、sclevine/agoutiを使っていましたね。紹介されていたライブライどれも使いやすそうです。

  • mafredri/cdp
  • go-rod/rod
  • chromedp/chromedp

この手のchrome自動化ツールはスタンドアローンで起動しますが、プロファイルのcookieやlocal storageを使いたいケースがあり、そこら辺いい感じになっていると嬉しいなーと思いました!

#最後に

幅広い分野でGoが活用されていることが再認識できました。運営のみなさまこのような機会を設けて頂きありがとうございました!