blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2019.05.28 イベントレポート

Go Conference 2019 Spring に参加・発表してきました!

by Daisuke Tamada

#go

Go Conference 2019 Spring お疲れ様でした!技術企画の玉田です。 みなさんの熱が冷める前にご報告したいと思います。

エンジニアによる登壇

今回、弊社からは「3名」のエンジニアが登壇しました! 各エンジニアからヒトコトをもらいましたのでご紹介します!

Go1.9 で作られた App Engine のサービスを Go1.11 に移行した話

現在 AndApp で進めている App Engine の Go のバージョン移行について取り上げさせていただきました。

App Engine の新しいランタイムが登場し、年単位の猶予はあると想定されるものの、今までと同じようにApp Engineを使えなくなるときに慌てないように、今から少しずつ移行を進める中で、色んな知見が溜まってきたので、これはApp Engineを使ってサービス開発を行ってる方に有用なのではないかと思い、登壇してみました。 ただ、登壇内容としては少しニッチな内容により過ぎてしまったという個人的な反省点があります。

発表では話しきれませんでしたが、Go1.11の次のGo1.12に向けても少しずつ移行の検討を進めているので、まだどこかでお話しできればと思います。

実は、Go Conference のような大きなカンファレンスで発表するのは初めての経験で、当日までとても緊張していましたが、準備に積極的に協力してくれた皆さんのおかげで無事に終えることができました。

Dark side of the reflect

ORM (Object Relational Mapper) を書いた経験を元に、golang の reflect について発表しました。

発表では時間の都合もあり、触れられなかったのですが、reflect の闇というか、 可読性や保守性を悪くしている点の一つとして、.Elem() という関数が、呼び出し元の reflect の型、 そして reflect の指す型によって挙動が異なる点があります。

reflect.Value の .Elem() 関数は、reflect.Value の指す値がポインタであれば、 ポインタの参照先の reflect.Value を返してくれます。

一方で、reflect.Type の .Elem() 関数は、reflect.Type の指す型がポインタであれば、 ポインタの参照先の reflect.Type を返してくれますが、 reflect.Type の指す型が Array, Slice, Mapであれば、 中身の型の reflect.Type を返してくれます。([]string であれば string の部分の型情報ですね)

コード内のある変数を見たときに、それが reflect.Type なのか reflect.Value なのか、 さらにその reflect.Type あるいは reflect.Value はどの型の値を保持しているのか… といったように、2種類の型を頭に入れないといけない点も、コードを読む際の混乱の一つだと思います。

標準パッケージにおけるテストでの利用例から学ぶ testing.quick パッケージ

今回、Go言語でProperty-based Testing用のライブラリはあるのだろうかと調べたのが発表のきっかけでした。 調べてみたら標準パッケージとして提供されており、しかも標準ライブラリのテストコードにも利用されていることを知り、これは面白いと思いCfPを出してみました。

発表では触れませんでしたが、testing/quickパッケージはProperty-based Testing用のライブラリとしてみると、機能的にはかなり限定されておりシンプルに作られています。 少し物足りないかもと感じる一方で、このあたりにもGo言語における「シンプルさ」という思想が入り込んでいるのだろうと感じました。

今回はLTということで多くを紹介できませんでしたが、testing/quickパッケージのコードを読んでみるとリフレクションの使い方なども学べるので、よろしければ是非コードリーディングをしてみてください。

スポンサーとしての支援

当日は mini Display port のアダプターが無いと伺いましたので、急遽 mini Display Port スポンサーも行いました。

また、前回の Go Conference にて懇親会の飲食の量が足らず、十分に懇親出来なかったのではないかとの反省がありました。今回の Go Conference では前回の懇親会予算をすべてベイスターズのビールに注ぎ込んでスポンサードいたしました。「ベイスターズのビール美味しい」との声をいくつもいただき、とても嬉しかったです。

おわりに

今回も多くの面白い発表があり、Go界隈の盛り上がりを感じました! 運営者のみなさま、登壇者のみなさま、参加者のみなさま、その他の Go Conference を盛り上げてくださった皆さまのおかげで、とてもよいカンファレンスになったと思います!この場を借りてお礼を申し上げます!

スポンサーセッションでも周知させていただきましたが、 DeNAでは今後も引き続き Go Community に貢献していきたいと思います! 今後共どうぞよろしくおねがいします!

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。