マネーフォワードからGopherConに参加しました!

こんにちは!
京都開発拠点でGoエンジニアをしています @ysakura_ です。
Goによる マネーフォワード クラウド会計Plus の性能改善を担当しています。

先日、『ここが楽しみ!GopherCon 2020』 でお伝えした通り、GopherConにマネーフォワードから8名参加しました。
今回はセッションの内容を中心にGopherConの様子をお伝えします。

リモートでの国際カンファレンス

今年のGopherConはGoVirConと称して、リモートでの開催となりました。
※ 英語では日本語のリモートの事をVirtualと呼ぶ様です。

EST タイムゾーンでの開催となり、日本時間で23:30 ~ 9:00の開催時間でした。
なので参加者は昼夜逆転をして参加しました。
リアルタイムで参加する事で、その場で議論したり、カンファレンスのお祭り感も味わう事が出来ました。

参加者の様子

参加者の様子を少し紹介します。

こちらはGenericのドラフトデザインを映しながら、Genericのセッションに臨む様子です。

こちらはGopherのぬいぐるみと一緒にGopherConに参加する様子
Gopherが可愛くてほっこりしましたw

また、当日は #gophercon_2020 というMF内のSlack Channelで実況スレを立てて、皆でGopherConに参加しました。
リモートでも一緒に参加している体験が出来て満足度が高かったです。


さて、ここからは、特に興味深かったセッションの要約です。
スライドが公開されているセッションは、タイトルにスライドのリンクを貼っています。

勉強になったセッション

Typing [Generic] Go

Go 2におけるGenericの話題です
func myGenericFunc[typeParameter](Argument)の形式でGenericを定義できる事が紹介されました。
typeParameterにGenericの制約を入れるのですが、その制約としてGoのInterfaceが利用できます。
Interfaceを利用するため、既存のGoとの互換性がある点が個人的に気に入りました。
ただし、何にでもGenericを使うのは複雑性が増すため、非推奨との事でした。

また、Type listsという仕組みによりInterface内でtypeが設定出来ます。
これにより、比較が定義されたPrimitiveな型を纏めたInterfacceなどが作成できる様です。

type Ordered interface {
    type int, int8, int16, int32, int64,
        uint, uint8, uint16, uint32, uint64, uintptr,
        float32, float64,
        string
}

Type listsは type xxID int64の様なdefined typeにも使えるとの事で利便性が高いと思いました。
Goではdefined typeを定義して想定外の値の混入を避ける事をよく行いますが、各defined type毎にメソッドを定義しなくて済む点が良いなと思いました。

Genericを使う事でGoの開発体験がより向上すると思うので、今後の動向に期待です。
詳しい事が気になった方は、Go 2におけるGenericのドラフトデザインを参照してみてください

マネーフォワードに活かせそうなセッション

マネーフォワードではマイクロサービスで主にGoを使っています。
マネーフォワードでの業務に活かせそうに思ったセッションについて紹介します。

The Quest for the Fastest Deployment Time

Go製のアプリケーションのデプロイを高速化する話題です。
Docker BuildKitのcacheオプションを用いてデプロイを高速化する方法が紹介されていました。
これは、レイヤーキャッシュとは別に、コンパイルやパッケージマネージャーの為にディレクトリをキャッシュするオプションです。
Goでは、Vendor配下をキャッシュする事でModuleの取得を高速化出来る様です。
Vendoringの大きなメリットを知る事が出来て勉強になりました。
また、Goのビルドキャッシュをキャッシュしビルドを高速化出来る様です。

また、コンテナのImageを更新せず、ソースコードやバイナリのみをアップロードする事で、デプロイを5%まで短縮出来る方法が紹介されていました。

マネーフォワードでも開発環境のデプロイ高速化に使えそうな方法で、大変参考になりました。

A Journey to Postgres Productivity with Go

Postgresで高い生産性を生む為のライブラリが紹介されていたセッションです。
マネーフォワードではMySQLを主に用いているのですが、RDBやSQLに関する内容が多かった為、非常に参考になりました。

特にory/dockertestというライブラリが、Goからコンテナを操作出来ると紹介されており印象的でした。
マネーフォワードの多くのプロジェクトでは、jwilder/dockerizeを使って依存コンテナの起動を待っています。
dockertestを利用すれば、Goのコード上で依存コンテナの起動が待てる為、非常に便利に思いました。

他にも、自分達の知らないライブラリがたくさんある事が知れたのは大きな学びでした。
この教訓を元に、マネーフォワードのGoエンジニアで3rd Party ライブラリの知見を深めていく会を開催していく予定です。
その会を通して、より良いアプリケーションをユーザーに高速で届けられる様にしたいです。

国際カンファレンスに参加してみて

私は国際カンファレンスへは初参加でした。
グローバルに触れてみての振り返りを書いてみます。

英語

英語はやはり難しかったです。ライブには英語字幕がついており、その点は非常に助かりました。
Otterという文字起こしのサービスを使ってる人もおり、AI技術の進化により英語のハードルもかなり下がってきた様に思います。

英語は難しかったですが、参加者の英語に対するモチベーションが全体的に向上しており、良い機会だったと思います。
英語はハードルになる事が多いですが、一度参加してみるとハードルが下がるので勇気を持って参加してみるのがオススメです。

Goのコミュニティ

技術的なセッションだけでなく、コミュニティに関するセッションが複数あった点が印象的でした。
Goのコミュニティに対する思想がこれらの根幹にあり、非常にGoらしいカンファレンスだと思いました。
Goのコミュニティへの考えについては、Go, Open Source, Community で多様性を重視している点や、Go Community Code of Conductrespectful behaviorを重視している点から垣間見えると思います。

コミュニティ関連のセッション紹介

以下のセッションが特に印象的でした。

得た学び

Crossing the Chasmのセッションは、Gopher(Goエンジニア)に出来る事はまだまだあると思える内容で非常にモチベーションが上がりました。自分も、Goの活用事例を増やしたり、社内のGoの教育コンテンツを作るなど、マネーフォワードにおけるGoの利活用に寄与出来る事はたくさんあると認識できました。

まとめ

セッションの内容を中心にGopherConの参加レポートを紹介しました。

今回は文量の関係で紹介しきれなかったのですが、Go自体の高速化に関するセッションも多く、Goのバージョンは極力最新にしておくのがやはり望ましいと改めて思いました。

参加者全員で振り返り会をしてみると、全体的にGoのモチベーションが高まった様に思います。
今後は輪読会やライブラリの勉強会を通して、社内のGoエンジニアの繋がりを強化しながら、マネーフォワードにおけるGoの価値を高めていこうと思います。


マネーフォワードではGoエンジニアを募集中です。
ご応募お待ちしております。

【サイトのご案内】
マネーフォワード採用サイト
Wantedly
京都開発拠点

【プロダクトのご紹介】
お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android

ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』

おつり貯金アプリ 『しらたま』

お金の悩みを無料で相談 『マネーフォワード お金の相談』

だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』

金融商品の比較・申し込みサイト 『Money Forward Mall』

くらしの経済メディア 『MONEY PLUS』

Pocket