このページの本文へ移動

Menu

メニュー

  • 企業 
  • ニュース 
  • サービス 
  • 技術・デザイン 
  • 採用 
  • 投資家情報 
  • サステナビリティ 
  • CyberAgent Way 

 

登壇

「Go Conference 2023 」に渋谷拓真、芳賀壮、藤兼由生、久米祐貴、朝倉信晴が登壇いたします

2023年6月2日(金)に開催されるGo言語に関するテックカンファレンス「Go Conference 2023」に、サイバーエージェントから渋谷拓真、芳賀壮、藤兼由生、久米祐貴、朝倉信晴が登壇いたします。なお、サイバーエージェントは「Go Conference 2023」のシルバースポンサーを務めます。


■Go Conference 2023
Go Conferenceはプログラミング言語Goユーザーのためのカンファレンスで、今年で10年を迎えます。当日はオンラインで、約30のセッションが行われます。


■登壇について

・発表者
渋谷拓真 |14:40 - 15:00 (Room A)

・セッションタイトル
Dive into testing package ~ Part of Fuzzing Test ~

・概要
去年Go Conference mini 2022 Autumn IN SENDAIでgo testとtestingパッケージの仕組みについて発表しました。このセッションではtesting packageはtesting.Tの*testing.T.Logや*testing.T.ParallelなどUnit Testで共通して使われる内容に絞り、Goにおけるtestの全体像とその仕組みを追うようなセッションでした。本セッションではGo Conference mini 2022 Autumn IN SENDAIの発展編としてGo1.18から登場したFuzzing Testの仕組みや内部実装について深掘ります。Fuzzing Testは機能としてもまだGoの公式から出ているチュートリアルのようにどのように動かすかについての詳細は日本語、英語含めて多くありますが、Goが提供するFuzzin Testの内部的な実装や仕組みに踏み込んでいる内容は少ないです。そのため、今後Fuzzing Testの仕組みを知りたい方や、興味はあるがまだソースコードリーディングできていない方に向けて発表します。まずFuzzing Testを読むにあたり必要なtesting packageとgo testの仕組みについて知ることから始めます。これにより今後ご自身でtesting packageのFuzzing Test以外の仕組みを見たい際に1人でソースコードリーディングができるようになります。その後主題でもあるFuzzing Testについて発表します。Fuzzingで与えられるCorpusは内部でどのように処理が行われているのか、go testで渡されたoptionがFuzzing Testにどのような影響を与えているかについてGoの公式から出ているFuzzingのチュートリアルを基に1つずつ見ていきます。本セッションを通して視聴者の方はGoのFuzzing Testの仕組みはもちろんのこと、go testやtesting packageについても理解を深めることができます。

--------------------------------------------

・発表者
芳賀壮|15:20 - 15:40 (Room B)

・セッションタイトル
Go1.19から始めるGCのチューニング方法

・概要
Go1.19のリリースにより新しくGOMEMLIMITという設定値が増えました。GOMEMLIMITが導入されたことによりヒープメモリ量の上限をユーザー側から制御できるようになりました。Go1.19以前のGCのチューニング方法はGOGCだけでしたが、GOMEMLIMITが導入されたことによりGCのチューニング方法の幅が広がりました。しかしGoは設定値を細かくいじらなくてもランタイムがある程度の最適化を行ってくれるため、一般的なAPIサーバーの開発等ではGOGCやGOMEMLIMITを意識することは少ないかと思います。そのため、これらの知見は中々溜まっておらず参考にする資料等も少ないのが現状です。そこで本セッションではGOGC・GOMEMLIMITはどんな役割かについて発表します。また内部実装を見ることで仕組みから理解することを目的に発表したいと思います。また私自身が経験した内容を基にGCチューニングの事例から活用方法についてもお伝えします。視聴者は本セッションを見ることでGOGC・GOMEMLIMITについての知見を深めることができます。また活用事例を通してご自身のプロダクトでGCチューニングをするべきかどうかを判断することもできるようになります。

--------------------------------------------

・発表者
藤兼由生|17:10 - 17:30 (Room A)

・セッションタイトル
sync.Mutexの仕組みを理解する

・概要
syncパッケージとは相互排他ロックなどの基本的な同期プリミティブを提供するパッケージです。その中の一つにsync.Mutexというものが存在します。sync.Mutexはgoroutineの排他制御を行うための機能です。sync.Mutexの使い方やごく簡単なサンプルコードは数多く存在しますが、sync.Mutexの内部的な実装を解説した記事は現時点では2桁もありません。そこで、本セッションでは、排他制御の定義、sync packageの概要について説明した後に、sync.Mutexおよび、Lock、Unlockメソッドに着目し内部実装レベルでコードリーディングし、理解を深めていきます。理解を深めていくにあたって、次世代UNIXとして開発されていた分散OSであるPlan 9の存在は欠かせません。そこで、ベル研究所の元メンバーであり、Plan 9に携わったのち、現Goチームで開発を行うRuss Cox氏の書いたSemaphore in Plan 9の論文を参考にします。上記の論文を引用しながら、sync.Mutexの仕組みを原理原則から整理して話します。セッションの聴講者は、sync.Mutexの理解および、実装を読むにあたり必要なGoのランタイムパッケージ、スケジューラ、go:linkname ディレクティブといったGoのエコシステムの仕組みについても学ぶことができます。

--------------------------------------------

・発表者
久米祐貴|18:00 - 18:05 (Room A)

・セッションタイトル
Information Schemaから自動生成する型付きORM spannent

・概要
GoでRDBを使う際には標準のdatabase/sqlがありますが、ORMを使用することもあります。MySQLやPostgreSQLのような広く普及したDBにはSQLドライバが存在したり、対応したORMが多数存在します。しかしNewSQLのような新しいDBにはそれらが存在しないことも多いです。またGoはパターン化されたコードを自動生成する機構を言語の標準機能だけで作りやすい特徴があります。特にORMの領域では近年有名なEntというパッケージがあります。EntではGoでテーブル定義を行い、各テーブル・カラムに対応した型付きのコードを自動生成する特徴があります。自動生成されたコードは基本的にメソッドチェーンで記述することができます。またマイグレーション機能も存在するため、Goのテーブル定義をDBに反映することもできます。Gormや他の自動生成ではないORMと比較し、存在するテーブル・カラム名や型がコード上に定義されているため、DDLを参考せずともGo上だけでテーブル定義が把握できることや、名前や型を間違えにくいことが利点です。しかしEntも対応したNewSQLの種類は少ないです。そこで今回はNewSQLの一種であるGoogle Cloud SpannerのORMを自動生成しました。生成されるコードは上述の利点からEntを参考にしています。また最小限の機能を持つORMとしたかったため、マイグレーション機能は持たせていません。そのためテーブル定義はGoで定義するのではなく、Information Schemaから読み取ることで、実際のDBのテーブル定義との同期を図っています。本セッションを聴くことで、Spanner以外にもORMをGoで作成する際の実装ヒントを得ることができます。例えばチームによってSnowflakeやBigQueryのORMを作成したいモチベーションがある場合、参考にすることができます。またORMに限らずテーブル定義所の生成やテストコードの生成等のGoで自動生成する強みとアイデアを知ることが可能です。

--------------------------------------------

・発表者
朝倉信晴|18:15 - 18:20 (Room A)

・セッションタイトル
ゲームの抽選ロジックにGenericsを使ってみたら開発が楽になった話

・概要
本セッションではGoにおけるゲームの抽選ロジック紹介と、対象ロジックへのGenerics導入事例について紹介します。ゲーム開発ではランダムドロップやガチャといった抽選を必要とする機能が多く存在するため、Interfaceを利用し各抽選ロジックの共通化を行ったのでその設計について紹介します。また、Go1.18でGenericsが導入された後は、上記ロジックにGenericsを適用することで開発効率が向上したため、Generics導入前後の事例についても共有します。本セッションを通じて、Goにおけるゲーム開発やGenerics活用の手助けになれば幸いです。

■ブース企画について
当日はreBako(オンライン会場)のサイバーエージェントブースにて、下記の企画をご用意しています。途中参加・途中退出も可能ですので、ぜひお気軽にご参加ください。

SGE での Go 活用事例紹介(10:00-13:00)
SGE(サイバーエージェント ゲーム&エンターテイメント事業部)で Go のコミュニティを運営している SGE.go のメンバーが、普段見られないゲーム開発の裏側のどんなところで Go を活用しているかや、SGE.go が普段行っている活動についてお話します。

登壇者&人事と話せるトークルーム①(13:00-14:00)
登壇者に向けて、登壇に関する質問や聞いてみたいことなど、なんでも話せるコーナーです。人事も同席しておりますので、事業やカルチャー、採用についてなど、とにかくサイバーエージェントについて聞いてみたい!と思うことをお気軽にご相談ください。

AI事業本部のエンジニアとの座談会ルーム(14:00-16:30)
AI事業本部に所属するエンジニアとの座談会を実施いたします! 皆様より自由にご質問いただける場を設けておりますので、Goを活用しているエンジニアから生の声をしっかりお届けしてまいります。それ以外にもGoに関するトークテーマをご用意しておりますので、皆さんとお話できることを楽しみにしております。

登壇者&人事と話せるトークルーム②(16:30-18:30)
登壇者に向けて、登壇に関する質問や聞いてみたいことなど、なんでも話せるコーナーです。人事も同席しておりますので、事業やカルチャー、採用についてなど、とにかくサイバーエージェントについて聞いてみたい!と思うことをお気軽にご相談ください。