🌍

GopherCon Europe 2025 に参加しました

に公開

Finatextのデニスです。InspireというSaaSを作っています。

今回は、6月16~19日にドイツの首都ベルリンで行われたGopherCon EUに参加してきましたので、カンファレンス全体のまとめと感想を語りたいと思います!

https://x.com/d_mzgr/status/1934883799911051308

GopherCon Europe とは

毎年ヨーロッパで行われるGo言語に関するカンファレンスです。毎年アメリカで行われるGopherConの姉妹カンファレンスでもあります。

参加者はおそらく300人くらいだったと思います。ロケーションはベルリンのど真ん中、ミッテ地区でした。

カンファレンスは4日間にわたって行われましたので、以下ではそれぞれの日程の紹介と簡単なまとめ、そして特に印象に残っている発表については少し詳しくコメントしていきます。

https://www.gophercon.eu/

Day 1 / ワークショップ

初日は8時間のワークショップが企画され、以下の3つが同時進行で催されました。

  • Ultimate Software Design with Kubernetes
  • Go Faster with AI Agents: Building and Using MCP Tools in Go
  • Go Design Principles for Great Go Development

私が参加したのは上記の2つ目、AIに関するワークショップです。ハンズオンは以下の3つのステップで実施されました。

  1. robotgo でGUIオートメーションCLIを作成
  2. mcp-go を使ってそのCLIからMCPサーバーを作成
  3. 最後に MCP とエージェントを langchaingo で連携

最終的にエージェントがスクリーンショットを撮り、クリックする場所を認識してカーソルをそこへ自動で動かしてクリックしたり、キーを打ったりするところまで実装しました。

コードは基本的にエージェンティックコーディングで生成しました。インストラクターが適切なプロンプトの書き方や、間違ったコードが生成された際の対応方法について説明してくれました。バイブコーディングとの違いについても何度も触れていました。ポイントは、LLMを厳しく制限することだそうです。

参加者はそれぞれ違うLLMを使っていたため、生成されたコードの品質もバラバラだったのですが、MCPサーバーを作るところまで割とトラブル無く進められていました。ただ、langchaingoとの連携がうまくいかない参加者が多かったため、そこで時間を取られてしまい、その後の説明のペースが上がってしまい、最後までフォローできた人はほとんどいなかった印象です。

私は"ちゃんとした"エージェンティックコーディングを使うのは初めてだったので、色々な新しい知識を得ることができましたし、MCPの仕組みやエージェントとの連携は今後の業務でも活かせるのではないかと感じています。また、ワークショップで作ったパソコンを操作するAIも、もう少し磨けば自動テストで活用できると思います(Playwright的な感じで)。

ランチ

ランチはビュッフェでした。すごく混んでいて座るところを見つけるのに時間がかかってしまいましたが、アメリカ人とオランダ人のテーブルに入れてもらいました。そのテーブルでは、何故かずっとRustの話をしていました。

Day 2 / カンファレンススタート

朝食

カンファレンスで提供される食事は、基本的にすべてヴィーガンでした。朝はサンドイッチのビュッフェがありました。発表が始まる前に参加者とスモールトークをできる時間でした。

朝食の時間は発表の30分前から設けられていました。

The Things I Find Myself Repeating About Go

Go歴15年のベテランDave Cheney氏がよく指摘しているGoのコードに関する私見をまとめて解説していました。

Taming the Goroutine Beast

Red Hatのエンジニアが、goroutineがpanicする際に生成されるスタックトレースだけでは発生元がわからないという問題を、カスタムライブラリで解決した話でした。

ライブラリを貼っておきます↓

go キーワードの代わりに上記のライブラリでgoroutineを実行すると色々なオブザーバーをつけることができたり、メトリクスを好きなだけ蓄積できたります。ユースケースがあれば便利なライブラリという印象でした。

Panel with the Go Team

Goメンテナーとの質疑応答

質問に答えたGoメンテナーは以下の4名でした。

  • Michael Pratt (Goコンパイラー、ランタイム)
  • Jonathan Amsterdam (slogの作成者)
  • Damien Neil (synctestの作成者)
  • Michael Stapelberg (protobufチーム)

Go言語全体に関する質問や、コミュニティに関する質問が多かったです。すごく専門的な質問はほとんど無かったと思います。

ランチ

この日のランチは、アフリカ料理とアジア料理から選ぶことができました。普段アジア料理を食べているので、アフリカ料理の"フフ"を食べました。アジア料理は日本のカレーでしたw。

https://x.com/d_mzgr/status/1934937491452072427

ランチの時間は1時間半確保されていて、色々な参加者と交流できました。

Refactoring Go: Patterns and Practices for Maintaining and Evolving Large Codebases

GithubのBrittany Ellich氏がリファクタ-vsリメイクについて語りました。特にGoに限った話ではなかったと思います。プロジェクトをリメイクするより少しずつリファクタをかけたほうがうまく行くよねという話でした。

発表の最後の方に提示されたコードリファクタ-用のプロジェクトのサンプルはかなり活用できそうでした。

https://x.com/d_mzgr/status/1934954078099968503

具体的な例としては、以下のようなものです。

  • Table-driven Testのカバレッジを上げるためのプロンプトにTable-driven Testについてのブログを参考として追加する
  • エラーフォーマットを統一するためのプロンプトにコードサンプルを入れる
  • mockライブラリの切り替え依頼プロンプトにサンプルPRを参考として追加する

LLMをガイドするための+α情報も教えてあげるとより理想的なコードが生成されるということですね。

Evolving Your API

Jonathan Amsterdam氏によるAPIの拡張性に関する発表でした。この発表は本カンファレンスのハイライトだったと思います。

Goの後方互換性の約束に縛られたAPI設計をどう行うべきなのか、スペックが変わる可能性をどのように考慮すべきかについて話していました。

特にオプションをどう渡すのかというトピックが面白かったです。また、いつどのようにAPIを廃止するのか、実験的なパッケージをどのように提供するのか、学ぶことが非常に多い発表でした。

go:fix というフラグも初めて聞きました。

https://x.com/d_mzgr/status/1934960557649502295

Implementing Parallelism: How We Added Threading and Multicore Support in TinyGo

TinyGoのチームメンバーであるAyke van Laethem氏がTinyGoにマルチスレッドを追加した話でした。

これまで、マイクロチップはコアが1つしかなかったので、マルチスレッディングに対応していませんでした。しかし、最近は複数のコアを持つチップも出始めているため、TinyGoで対応する必要があったそうです。

試行錯誤しつつ、たまにチートして、うまく行ったという話でした。

Go Protobuf

Michael Stapelberg氏が最新のprotobufを紹介していました。

以下の記事と少し内容が被っていましたので、参考までに以下にリンクを貼っておきます。

https://go.dev/blog/protobuf-opaque

Social Mixer

2日目は発表が17時頃に終わり、その後に懇親会も開催されました。国籍で言うと、現地のドイツ人が最も多かったです。オランダ人も意外と多かった印象です。あとはバラバラでしたが、アジアからやってきた方は見かけませんでした。

懇親会は21時まで続き、21時になった瞬間にセキュリティに追い出されました(さすがドイツ)。
その後、喋り足りない数人でレストランに行って、夜中までお酒を飲みながら意見交換をしていました。

Day 3

Y: Recursion The Hard Way

3日目は朝から激ムズ発表でした。Eleanor McHugh氏(Rubyがメインの方かな?)がGo言語でYコンビネータを作れるかということについて語りました。

Yコンビネータとは、自分を再帰的に呼び出せる無名関数のことをいうらしいです(私も初めて聞きました)。

結論:できるようですが、スライドのコードが複雑過ぎてがあまり理解できなかったというか読めませんでした(()が多すぎて)。

AI-Driven Load Test Analysis: From Routine Toward Action

Delivery HeroのAndrii Raikov氏が負荷試験の結果をLLMでまとめるという発表をしました。

とにかく引っかかるところが多かったようです。LLMが喋りぎる問題、ハルシネーション問題、明らかなことしか言わない問題などに対して、どのように対応したかという面白い発表でした。

Faster Go Maps With Swiss Tables

Michael Pratt氏がGoのmapのパフォーマンスを向上させた話でした。非常にわかりやすくとても良い発表でした。

発表内容は以下のブログをもう少し整理して膨らませた内容でしたので、こちらもリンクを貼っておきます。

https://go.dev/blog/swisstable

Testing Time (and other asynchronous code)

Damien Neil氏がsynctestパッケージの成り立ちについて解説しました。

公式ブログに載っているコードサンプルを取り上げており、また実装で苦労した点についても述べていました。こちらも参考までにブログのリンクを貼っておきます。

https://go.dev/blog/synctest

For the Love of Go: How to Contribute, Really

Grafana LabsのArati Rana氏が、初めてGoへコントリビュートした物語について語りました。3年前のGopherCon EUで出会ったJonathan Amsterdam氏がメンターになってくれたようです。

二人で適切なissueを見つけて、設計を決めたあと、一人で実装したという話でした。(実装した機能はGoの1.25でリリースされる予定のT.Output()でした)。

手書きのスライドとにかく可愛かったです。発表の最後にはRana氏が感極まり、その様子に全ベルリンが泣きました。

Speakers -v- Audience

参加者がこれまでの発表内容をちゃんと覚えているのかを確認するためのちょっとした遊びの時間でした。それぞれの発表者がステージに立って自分の発表についてオーディエンスに2つの質問を投げかけ、オーディエンスが3回間違えたら発表者の勝ちというゲームでした。

オーディエンスに勝った発表者は、Eleanor McHugh氏(それはそう)と(多分)Dave Cheney氏の2名でした。Dave Cheneyはゲーム内容を勘違いしていて、自分の発表についての質問ではなくて、Goのなぞなぞを出していました。それもそれで面白かったです。

Lightning Talks

5分程度の短い発表がいくつか行われましたが、印象に残ったLTは以下の2つでした。

Quim Muntal - Go-ing Native: Supercharging Windows Support In Go

Microsoftのエンジニアで、GoのWindows実装などを行っている方でした。この方のおかげでWindowsでのGoのパフォーマンスがどんどん向上されています。ただ、スペイン訛りが強かったです。しっかり聞かないとだんだんスペイン語に聞こえてくるLTでした。

Ron Evans - An Update On TinyGo

TinyGoのあらゆるアップデートやイベントについての話でした。ほとんどPRのような内容でしたが、めちゃくちゃ時間をオーバーしていました。

Day 4 / heyAI

最終日はGopherConという場を借りてheyAIという別のカンファレンスが行われていました。

初めて開催されたイベントだったので、参考までにリンクを貼っておきます。

https://heyai.dev/

Whose code is it anyway? Machine Sympathy and Carbon-conscious programming in a Prompt-Driven World.

Jessica Greene氏による発表で、技術的な話というよりも、AIやLLMがもたらす社会問題についての話でした。非常に面白い内容でした。

https://x.com/d_mzgr/status/1935623311716737528

主に取り上げられたテーマは以下のようなものでした。

  • AIの電気代やリソースの消費について(SDGs!)
  • 新卒採用への影響(エンジニアを育てる必要はあるのか問題)
  • 様々な実験の解説(AIを使うと頭の回転が遅くなるとか、AIで生成されるほとんどのコードがそもそもマージされないことについて、などなど)

LangChainGo Past, Present, and Future: Building the Go LLM Ecosystem

LangChainGoのメンテナーであるTravis Cline氏がプロジェクトの未来について語りました。

プロジェクトがすごく大きくなってしまい、一人だと手が回らないのでサポーターを募集しているということと、API設計を自分で考えるより、プロポーザル形式にしたいという話でした。

About Processes and (Multi-)Agents

SAPのChristian Warmuth氏が(社内外)の"プロセス"について語りました(日本語だとワークフローという言葉が近い気がします)。AIで自動的にフローチャートを生成できるソフトの宣伝のような内容だった気がしますが、正直に言うとオーディエンスを間違えたのかなという印象でした。発表後に他の参加者と話をしても、マネージメント向けの話だったよね?という意見が多かったです。

本カンファレンスの最も微妙なトークでした。

The Go MCP SDK

Jonathan Amsterdam氏による2回目の登壇でした。Goの公式MCPフレームワークの発表でした!
実はその日にリリースする予定だったようですが、リーガルで色々かかってしまったということでした(AnthropicとGoogleがライバルのため)。

現時点でもまだリリースされていないため、リポジトリのリンクだけ貼っておきます。

https://github.com/modelcontextprotocol/go-sdk

発表内容はSDKの紹介、コードサンプル、設計に関するものでした。

How AI Is Redefining the Startup Journey

Google Accelerator Europeの責任者であるPati Jurek氏に対するインタビューで始まり、最終的にはオーディエンスとのディスカッションも行われました。

AIの登場でスタートアップ市場がどのように変わったのか、今までピッチで聞いた最もニッチなAIの使い方など、色々なテーマについて語っていました。

また、これから起業を考えている人たちの相談などにも乗っていました。

終わりに

以上がGopherCon EU / heyAI 2025の参加レポートでした。

非常にレベルの高い発表を聞くことができただけでなく、たくさんの方と繋がることもできてすごく楽しい4日間でした。私はもともとベルリン周辺で育ったので、観光は特にしませんでしたが、5年ぶりのドイツは色んなところが変化しているように感じました。

なぜアメリカのGopherConではなくて、EUの方に行ったのかと言うと、そもそもカンファレンスへの参加を考えていた時には、まだアメリカのスケジュールが発表されておらず、詳細がまったくわからない状況でした。一方で、EUのスケジュールを確認してみると、ちょうど今社内で動いているプロジェクトにピッタリの発表がとても多かったので、このチャンスを逃す手は無いと思ってEUの方に参加しました。

結果としては、大満足な旅になりました。

そして、9月27日(土)~28日(日)には渋谷でGo Conference 2025が開催予定です。

実は私も登壇の申請をしているので、採用されたら発表を行う予定です。興味がある方がいらっしゃいましたら、是非、聞きに来てください!

https://x.com/d_mzgr/status/1930858279258972384

Finatext Tech Blog

Discussion