4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go Workshop Conference 2025 In Kobe 参加レポート

Last updated at Posted at 2025-12-16

本記事でやること

本記事では、2025年12月13日(土)に開催された「Go Workshop Conference 2025」で私が参加したワークショップの内容や感想などをまとめていきます。また、当日の会場の様子なども簡単に紹介していきます。

はじめに

Go Workshop Conference とは、下記公式HPから引用した通り参加者が手を動かしながら交流するワークショップ中心のGo言語イベントです。LTや会場展示などもありましたが、ワークショップを中心としたイベントは今回が初めてだったそうです。

Go Workshop Conferenceは、みんなで手を動かしながら交流するワークショップを中心としたGo言語のイベントです。初心者から上級者まで、Go言語に関心のあるすべての方を対象としています。

開催場所

神戸市三宮の海側にあるデザイン・クリエイティブセンター神戸(KIITO)で開催されました。私は三宮駅から徒歩で会場まで移動しましたが、約15分ほどでした。

ワークショップ一覧

参加者は時間帯が重複しない範囲で、午前・午後それぞれ1つずつワークショップに参加可能です。

時間帯 ワークショップ名 概要
午前の部 低レベルコンテナランタイム自作講座 コンテナ技術の地盤を理解するハンズオン
10:30-12:30 Gopher のための「自由な話し合い」ワークショップ オープンスペーステクノロジー形式の対話セッション
TinyGo Keeb Tour at GWC TinyGoを使ったキーボード開発体験
はじめてのGo言語教室 Go言語初心者向けの入門講座
Goカードゲームで遊ぼう カードゲームを通じてGo言語の基礎を学習
並行処理スピードアップコンテスト Go言語の並行処理を競うコンテスト形式のワークショップ
午後の部 動かして理解する適材適所のプロファイリング 実践的なGoのプロファイリング技術を習得
15:45-17:30 Gopherのためのチームビルディングするインプロワークショップ 即興演劇を通じたチームビルディング体験
Gopherくん基板を作ってTinyGoで遊ぼう 実際にハードウェアを組み立ててTinyGoでプログラミング
Go Doc Comments 完全理解ハンズオン Go言語のドキュメントコメントの書き方を学ぶ
Go with AI AIとGoを組み合わせた開発体験
はじめてのGo体験!そしてあなたのキーキャップがおしゃれになる! Go入門とキーキャップ制作を楽しむワークショップ

その他のコンテンツ

  • ブースコンテンツ: 一日中実施(ジェスチャーゲーム、Go製ゲーム展示、ゆるLT会など)
  • シャッフルランチ: 12:30-14:00
  • 懇親会: 19:30-21:30(イベント終了後)

会場の様子

image.png

KIITOのワンフロア(1階)が会場として開かれており、ワークショップ/LT/ブース展示が区画毎に分かれていました。以下の画像は、各ワークショップが実施されたスペースの様子です。

IMG_6180.jpg

私が参加した「並行処理スピードアップコンテスト」は2人1組のペアとなり以下のように各ペア会話しながらコーディングをしました。参加者同士や講師の方と距離が近く、講義中は気軽に質問ができたりコーディング中はわいわいしながら進めることができるような机の配置でした。ワークショップ後は仲良くなった方・講師の@kuroさんと一緒にランチへ行かせてもらいました!参加者・講師の方と繋がれるのもGo Workshop Conferenceのすごく魅力的な点だと思いました。

ブースコンテンツもとても充実しておりました!

IMG_6182.jpg

LTの会場は飛び込みでも登壇可能なとてもラフな雰囲気でした。LTの内容はどれも興味深いものばかりでした。

IMG_6181.jpg

参加したワークショップ

【午前】 並行処理スピードアップコンテスト

午前のワークショップは、@kuroさんの「並行処理スピードアップコンテスト」に参加しました。実務で並行処理を書く機会がなく、sync.WaitGroupchannelは聞いたことあるけど、実際どう使えばいいのかなどは全くわかっていなかったことやどうすれば効率的な処理を書けるのかを知りたかったので、すごく楽しみにしていたワークショップでした。(このワークショップに参加するために神戸に来たと言っても過言ではないです :v:

資料

概要

ワークショップの冒頭は以下の資料を元に並行処理の基本的な文法から実装パターン(ワーカープール)についての講義でした。Go初学者向けに丁寧に解説されていることに加えて、なぜこのような実装をするのかといったストーリーがありとても理解しやすかったです。

座学の後は、2人1組のペアとなり遅い逐次処理を並行処理に書き直し実行完了までの時間(改善率)を競い合いました。ただし、いきなり競い合うのではなく以下のように段階的に並行処理へと書き直していき、最後のphase4で各ペア自由に処理を書いて改善率を競い合う流れでした。

お題

「大量のログファイル(JSON Lines形式)を読み込み、各JSONオブジェクトのステータスコード別に件数をカウントした結果を出力する」というものでした。

  • ログファイルの数: 200ファイル
  • 1ファイルあたり行数: 50,000行
phase 実装内容
1 逐次処理を実装
2 並行処理(ファイル数分groutineを起動)を実装
3 並行処理(Worker Pool形式)を実装
4 並行処理を実装(制約なし)

1ファイルを処理する関数(processFile)は、すでに実装されておりこの関数を呼び出し全てのファイルを処理する関数(processFiles)をPhase1~4のテーマに合わせて実装する流れでした。

成果

各Phase毎に実行した結果は記録されるようになっており、私の最終的な改善率は以下となりました。逐次処理で13.53秒掛かっていた処理が並行処理を実装することで最終的には1.61秒まで改善することができました :v_tone1:

phase1=13.53
phase2=2.57 (phase1から5.26倍高速, 81.0%改善)
phase3=2.12 (phase1から6.38倍高速, 84.3%改善)
phase4=1.61 (phase1から8.42倍高速, 88.1%改善)

phase3で大半の時間を使ってしまい、phase4にほとんど時間を費やせなかったのでI/Oの部分のメモリアロケーションを削減すれば改善するのではと思い、encoding/jsonパッケージでストリーミング処理をしている箇所に目をつけencoding/json/v2へ置き換えるためGOEXPERIMENT=jsonv2を有効にして、実行したら下記の結果を得ることができました。(並行処理とは関係ない箇所の改善だったなと反省し、後日ちゃんと書き直しました :pray:

座学での学び

個人的な学びとしては、

1. Go1.25で追加されたsync.WaitGroupGo()メソッドによる記述

  • 複数のgoroutineを起動し全ての処理が完了するまで待つ際にsync.WaitGroupが用いられることが多いです
  • Go1.24まではgroutineのスレッドを起動する前にsync.WaitGroupが内部的に保持しているカウンターをAdd()で増やし、goroutineのスレッドでの処理を抜ける際にDone()でカウンターを減らし、カウンターが0になるまでWait()で待つという典型的な構文を明示的に書く必要がありました
  • Go1.25で追加されたsync.WaitGroupGo()は従来のAdd()からDone()の組みわせを自動的に行ってくれるようになりました

2. channelをfor rangeで処理した時の挙動

  • for ~ range channelの終了条件はchannelが閉じられること
  • (バッファなしの場合)送信側は値が受信されるまでブロック(待機)されるので、送信側と受信側で同期が取れる
  • channelが閉じられたことを明示的にチェックする必要がない

以下のコードではclose(ch)は、全ての値が受信されてから実行されるので、for range channelで全ての値を確実に受信することができます。

package main

import "fmt"

func main() {
	ch := make(chan int)
	go func() {
		for i := 0; i < 5; i++ {
			ch <- i
		}
		close(ch)

	}()
	for val := range ch {
		fmt.Println(val) // 0, 1, 2, 3, 4 が順に出力される
	}
}

【午後】 Go Doc Comments 完全理解ハンズオン

午後のワークショップは、@taku_tingさん/@uji_rbさん/@renyayyさんの「Go Doc Comments 完全理解ハンズオン」に参加しました。実務ではGo Doc Commentを書く機会はないのですが、ソースコード上でどのようにコメントを書けば良いのか作法などが学べる良い機会だな思い参加しました。

資料

概要

公式ガイドラインに基づき、Package、Commands、Types、Funcs、Constsそれぞれのドキュメント記述方法を学びました。実際にコードを書き、go docコマンドでローカルプレビューを確認しながら進める実践的な内容でした。

感想

ワークショップ中心のGo Conferenceは初ということでしたが最高でした!! :v: 初めての場所で初対面の方と少し緊張感がある状況で手を動かしながら学ぶ機会はなかなか無いので貴重な経験をさせてもらいました。ワークショップを用意してくださった講師の方含めGo Workshop Conferenceを運営してくださった全ての方に感謝したいです。
またどこかのGoのイベントで会えることを楽しみにしています。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?