🛫

イテレータによってGoはどう変わるのか - Gopher Day Taiwan 2024 基調講演登壇レポート

2024/05/27に公開

はじめに

株式会社ナレッジワークの上田(@tenntenn)です。
2024年5月25日(土)に台湾で行われたGopherDay Taiwan 2024というGoのカンファレンスにキーノート(基調講演)スピーカーとして招待頂き参加しました。

https://gopherday.golang.tw/2024/en

登壇中の様子登壇中の様子

筆者は過去に海外カンファレンスであるGopherCon(アメリカ)やGopherCon India(インド)にプロポーザルを提出し、登壇した経験があります。しかし、基調講演を行うのは初めてで英語の登壇も数年ぶりでした。

基調講演のお誘いは、前職(株式会社メルペイ)の同僚であるtenling(てんりん)さんからで、2023年のアメリカで行われたGopherConでお話したことがきっかけでした。

他の登壇者との写真他の登壇者との写真。左からマネーフォワードのluccafortさん、メルペイのtenlingさん、筆者、LINEのDevRelで筆者と同じGoogle Developers Expert (Go)のEvan Linさん。

GopherDay Taiwan 2024への参加は、台湾のGoコミュニティが渡航費の一部をサポートしてくれました。残りの費用は株式会社ナレッジワークのナレッジスポンサー制度を活用して参加しています。

https://note.com/knowledgework/n/n70722bd5f441

基調講演では、"What is the iterator and how does it build an ecosystem in Go?"というタイトルで、Go1.23で導入予定のイテレータについてお話しました。

https://tenn.in/iter-en

本記事では、登壇した内容について簡単に説明し、GopherDay Taiwan 2024の雰囲気についてレポートします。

登壇内容について

筆者のプレゼンテーションは、以下の3つについてお話しました。

  • イテレータとは何なのか?
  • Go1.23以降で加わるイテレータに関する変更について
  • イテレータが作るGoのエコシステムについて

ここでは、イテレータの概要について説明しますが、さらなる詳細はGo Conference 2024でもお話する予定です(2024年5月27日現在)。

https://gocon.jp/2024/sessions/2/

Goにおけるイテレータとは、任意のデータ構造を関数によってfor range文からシーケンシャルにアクセスできるようにする仕組みです。たとえば、木構造を深さ優先探索で巡るような関数を用いて、for rangeから各ノードにあたかもシーケンシャルにアクセスできるようにできます。

イテレータは、range over funcという名前で提案されたfor range文の変更です。for range文は、Go1.22までは配列、配列へのポインタ、スライス、文字列、チャネル、整数(Go1.22で追加)しか繰り返しできませんでしたが、そこに関数が加わるという変更です。

たとえば、イテレータの導入により、maps.Keys関数maps.Values関数が正式に標準ライブラリに加わることになります。これらの関数はもともとジェネリクス(型パラメータ)と共に提案されていましたが、戻り値を単なるスライスではなく、イテレータのような形式にするほうが良いという話になり、導入が延期されていました。

また、Go1.23またはGo1.24あたりで試験的に提供されるであろう、golang.org/x/exp/xiterパッケージにおいては、Filter関数やMap関数などが提供される予定です。xiterパッケージがうまくGoコミュニティに受け入れられると、標準ライブラリのiterパッケージに導入されるかもしれません。なお、iterパッケージはGo1.23で標準ライブラリに加わる予定のパッケージです。loのようなサードパーティライブラリを利用している開発現場では、将来的に標準ライブラリに置き換えることになるかもしれません。

Goでは、リリース当初からio.Readerやio.WriterによるI/Oの抽象化を提供し、エコシステムを作ってきました。また、Go1.16で導入されたfs.FSパッケージはファイルシステムの抽象化を提供し、さまざまなデータをファイルシステムとして扱えるようにする新たなエコシステムを作りました。

イテレータは、任意のデータ構造へのアクセスをシーケンシャルなものとして抽象化をし、さまざまなデータ構造や処理がイテレータとして表現され、新たなエコシステムを作っていくでしょう。

筆者は、イテレータはジェネリクスに引き続き、Goにおけるコーディングのあり方を変えるであろう大きな変更になると考えています。

GopherDay Taiwan 2024のセッションにおいても、参加者から「Goが大事にしている考え方にシンプルさがあるが、イテレータの登場によって壊れないか?」と質問されました。筆者はそれに対して、「確かに一定の複雑さは入るが、また別の側面で現在複雑になっている処理をシンプルにするだろう」と答えました。

イテレータについて更に詳しく知りたい方は、Go Conference 2024に参加して(すでに満員ですが)、筆者のセッションを聞いて頂くと良いでしょう。

また、学生向けには2024年5月29日(水)に、Enablement Workshop for Gophersを開催予定です。そちらでは、ステップバイステップでイテレータを学ぶワークショップを行う予定です。

https://knowledgework.connpass.com/event/318676/

学生ではない方にも参加いただける2024年6月30日(日)に開催予定の筆者オンリーのカンファレンスであるtenntenn Conference 2024の午前中にもジェネリクスおよびイテレータを学ぶワークショップを開催予定です。余談ですが、tenntenn Conferenceについては、GopherDay 2024のオーガナイザーにも知ってもらえていました(笑)。

https://tenntenn.connpass.com/event/315013/

台湾のカンファレンスに参加してみて

筆者はGopherDay Taiwan 2024で初めて台湾に滞在しました。あちこちに日本で見かけるお店(コンビニなど)があり、アニメ・日本食・日本語など日本文化が点在していました。スーパーなどでも英語より日本語が通じるシーンもあり、日本からの旅行者としては助かりました。


カンファレンスで頂いたお弁当を開けようとしたら日本語が突然現れました

お会いした方々はとても親切で、特にオーガナイザーの皆さんは空港まで車で迎えにきていただきました。また、メルペイのtenlingさんには日本文化と台湾文化の違いを楽しく教えていただきました。

教えて頂いた文化の1つに、食事の重要性があります。日本では天気について、「今日は雨だね」や「今日は暑いね」と挨拶代わりに話しますが、台湾では「ご飯食べた?」や「今日の朝ご飯は何だった?」と話すことが多いそうです。

確かに振り返ると、カンファレンスの当日に運営メンバーの方々に複数回、「朝ご飯食べた?」って聞かれました。最初は外国から来たから気を使ってもらえてるんだなありがたいなと思っていましたが、それだけではなく、そういう文化でもあるんだと気づきました。

また、カンファレンス中は常に軽食が用意されており、振り返ると確かに食を大切にしていることが感じられました。

カンファレンスで用意されていた軽食。甘いものもたくさんありました。

GopherDay Taiwan 2024では、アナウンスは英語でも行われ、スライドの多くも英語で書かれていました。そのおかげで日本から参加した筆者も何となく何を話しているのか理解できました。

海外カンファレンスに参加するモチベーションは、技術以外にも現地のコミュニティを知り、その場でリアルにコミュニケーションを取ることにもあります。現地でしか知ることのできない雰囲気、日本の文化と現地の文化が混ざり合う瞬間などが見れてとても有意義な時間になります。

これらの海外カンファレンスで学んだこと・感じたことは、日本の技術コミュニティに持ち帰り、Goコミュニティをはじめとするコミュニティ運営のヒントにしていきたいです。

おわりに

本記事では、GopherDay Taiwan 2024の参加レポートを行いました。誘って頂いたメルペイのtenlingさん、一緒に行動してくれたマネーフォワードのluccafortさん、現地でさまざまなサポートやカンファレンスの運営をしてくれた台湾のGoコミュニティの皆さん、ありがとうございました。

日本のGoコミュニティでも、海外から参加する方が増えるよう頑張ろうと思います。

また、Go1.23のイテレータについても今後の展開が楽しみです。Go1.22でもGOEXPERIMENT=rangefuncをつけると一部機能が試せますのでビルドして試してみてください。

$ GOEXPERIMENT=rangefunc go run .
株式会社ナレッジワーク

Discussion