Go Conference mini 2023 Winter IN KYOTO 参加記録

先日開催された Go Conference mini 2023 Winter IN KYOTO に現地で聴講参加してきました。 Go Conference mini は、プログラミング言語Goに関する地域カンファレンスです。

当日の様子は、Xでハッシュタグ #kyotogo で呟かれているので当日の様子を知りたい方は見てみてください。

https://twitter.com/search?q=%23kyotogo

気になった発表

Deep dive into log/slog package

log/slog パッケージのパフォーマンスを上げるための工夫や実装の背景についてコードやProposalから読み取った内容をまとめた発表でした。 LogLevelの値はユーザがログレベルをカスタムできるように-4, 0, 4, 8 で飛び飛びになっているというのはよく考えられているなと思いました。 nAttrsInline を既存の zap パッケージを使ったログ出力の key-value pairのコードを調査して決められたらしいです。 最適化の文脈で「推測するな計測せよ」とよく言われていますが、実際にライブラリの実装で行われているのをみると自分でもやらなきゃって気持ちになりますね。

Goプログラムがビルドされるまで

インタプリタ型とコンパイラ型の実行の違いの説明がわかりやすかったです。 コンパイラソースコードからAST生成までをフロントエンド,ASTを生成して以降の最適化や機械語に変換する部分をバックグラウンドと分けて説明していました。 コンパイラの文脈でフロントエンド/バックエンドと呼ぶのを聞いたことがなかったので気になって懇親会でASTの前後で呼び分けるのが一般的なのか質問してみたところ一般的に使われているとのことでした。 C言語ととGo言語のバイナリをHello Worldを出力するプログラムで比較していました。 違うというのは知っていましたがhello worldでもアセンブリ行数やシステムコールの呼び出し回数がここまで大きく違うとは思ってませんでした。

Goにおけるcall graphを用いた大規模コードベースの影響調査

データマイグレーションにおける影響調査にどう立ち向かうかという話でした。 影響調査の難しさは範囲を絞り込むことの難しさとおっしゃっていました。 知識がないと全範囲に検索を書けるか参照を一個一個追っていくしかないので、めちゃくちゃ時間がかかってしまうので範囲をどう絞るかというのは納得しかないです。 Goではcall graph生成までで分析はPythonで行っていて、適材適所でツールを使い分けているのが良いですね。

日時処理の新スタンダード: Synchro によるタイムゾーン安全、楽々開発

開発直後に眺めたときは便利そうだけど具体的なコードのイメージはないという状態でしたが、 リクエスト内の時間統一 など発表のなかで具体的な問題とその解決策としてSynchroがどう使えるかを紹介されていて実際に使うときのイメージがわきました。 機会があったら導入してみたいです。 間隔の指定 のようないざ実装しようとすると地味に面倒くさい処理が楽に記述できるようにするメソッドが定義されているのも好感が持てました。

LT: Go1.22で導入予定だったzeroというbuilt-inについての紹介

zero については自分も以前注目して Proposal を読んで纏めたエントリを書いていました。 Gopher ConferenceでRuss Coxさんから直接AcceptedからDeclinedになったのを聞くってすごい体験ですね。 期待していただけに残念ですが、やらないという意味ではないらしいので今後採用されることに期待してます。

LT: context.WithoutCancelについて語る

context.WithoutCancelについてもリリース直後に使い道を考えて上手い使い道が思いつかなかったものの一つです。 リクエスト起因の処理の完了通知などを使いどころとして挙げていて、なるほどなーと思っていました。 Proposal にはもっと色んな考慮が書かれていると思うので時間見つけてProposalも読んでみようと思います。

生成AIによる静的解析ツールの自動生成

直近でLinterなど静的解析ツールについて調べていたので個人的にホットな話題でした。 go/analysis パッケージの今後として Linter 意外も作りやすくなるらしく、今後の拡張に期待です。 生成AIでコードを生成するときに // TODO と書いて埋めさせるなどのテクニックは他でも使えそうで面白いですね。

続) TinyGo で作る自作キーボードの世界

TinyGoは昔使おうとして当時は encoding/json など標準パッケージで動かないパッケージが多かったのでやめたということがありましたが、 現在は殆どのケースで encoding/json が使えるようになったらしく久しぶりに触ってみるかとなって遊んでいました。

組み込み用途向けのGo言語のサブセットTinyGoによるM5Stack Basicの制御を試す - tomato3713’s blog はその勢いで遊んだのを纏めたものです。

会場でサンプルが置かれていた 基礎から学ぶ TinyGoの組込み開発 は、 TinyGoでgoroutineと割込み処理のどちらを使うのかの基準や SetPixel() を繰り返して画面を描画するとなぜ遅いのかなどがわかり易く書かれているのでお勧めです。 初めてマイコンを触ったときにナニコレ?となる単語や知識が上手くまとまっていました。

感想

最近調べてた静的解析周りの発表が幾つか聞けたりTinyGoの開発が進んで色々なライブラリが動くようになったのを知れたりしたので参加した甲斐がありました。

同僚も参加していたので京都のメンバーとも挨拶ができました。 次回は、LTでも発表していきたいです。

振り返り

最後に振り返りを簡単に書いて終りにします。 普段、KPT法という振り返りのフレームワークを使っているので今回の参加記録の振り返りもKPT法で纏めました。 Kはkeepの頭文字で継続していきたいこと、PはProbremの頭文字で課題、TはTryの頭文字で次回以降に試していきたいことを表わしています。

  • K
    • PCを持っていったのでノートが取り易かった。
      • このエントリを書くときもメモを元に書けた。
    • 会場から懇親会の最後までフルで参加できた。
    • Xで #kyotogo を付けて発表で気になったことなどをポストをしていた。
    • 懇親会で発表者に気になったことを聞きにいけた。
      • T: 休憩時間は同僚と話す時間が長かったので社外の人と話しにいっても良かった。
        • とはいえ普段交流が無いメンバー同士だったので同僚と交流できたのは良かった。
    • モバイルバッテリーを持参したのでデザリングでバッテリーの消費が激しくてもスマートフォンの充電ができた
  • P
    • ネットワークがなかったのでスマートフォンのデザリングを使用したのでバッテリーの減りが早かった。
    • PCの充電が不十分だったので途中でバッテリーが切れた
      • T: PCを完全に充電していく。会場に電源があるとは限らない。
    • モバイルバッテリーは持参していたが、元の容量が小さく古かったのですぐ使いはたしてしまった
      • T: 古いモバイルバッテリーの廃棄とモバイルバッテリーの買い替えを検討する
    • 書く意思はあったが参加記録のエントリを書くのに一週間以上かかってしまった。次の日は無理でも1週間以内には書く週間を付けたい。
      • T: カンファレンス参加時にはエントリを書く時間を先にカレンダーに入れておく