テクノロジー

Go Conference ‘19 Summer in Fukuokaへ参加してきました

BE部 R&Dの鈴木です 。
2019年07月13日に開催されたGo Conference ‘19 Summer in Fukuokaへ参加してきましたので簡単にレポートしたいと思います。

はじめに

D2Cでもシステム開発にGo言語の採用が増えてきており、より最新の情報へキャッチアップするために Go Conferenceへ参加しました。 D2Cの本社は東京の銀座が所在地ですが、今回の Go Conference は福岡で開催されるということで、出張として参加しました。D2Cではこのように遠方であっても 希望すれば イベントへ参加することができます。

公式サイトは以下のURLからどうぞ

Go Conference ‘19 Summer in Fukuoka

https://fukuoka.gocon.jp/ja/

今後のイベントや開催済みイベントの資料などは以下のconnpassからどうぞ

Go Conference 主催 : GoCon幹事

https://gocon.connpass.com/

開催地について

Go Conference ‘19 Summer in Fukuokaの会場はFukuoka Growth Next(fgn)というところで福岡市から支援されているスタートアップ企業のためのコワーキングスペースやイベントスペースのようです。旧大名小学校跡地ということで小学校っぽさがそこらから感じ取れました。 スペシャルゲストとして福岡市市長のセッションがあり、市としてITを支援していることなどが語られました。このfgnもそのような支援の一貫のようです。現在もさらに支援施設の建設中らしく、Iターンにも期待しているとのことでした。
福岡市の天神あたりを少し散策しましたがとても活気があり住みやすそうな土地でした。 今回の Go Conference、参加費は無料でした(必ずしも無料というわけではないらしい)。当日は結構強めの雨だったので、会場内で軽飲食物が提供されたのはありがたかったです。スポンサーからケーキ、お菓子、サンドイッチ、水、缶コーヒー、生ハム(!)、ビール(!)が提供されていました。

発表について

2トラック制で発表が行われており、私が参加した中で印象に残ったものをレポートしたいと思います。(敬称略)

他の言語ユーザーのためのGoのまとめ (Yoshiki Shibukawa)


初心者や他の言語を使っているユーザーがGoを学ぶときにつまづきやすい点やそれをサポートするときにどのようなことを気をつけてれば良いかということについての発表でした。
他の言語の知識がGoの学習の邪魔をすることがあるという指摘など、わたしもGoを始めたばかりの頃に引っかかったことがあり、D2Cでも新人へGoを教えていく際に役に立ちそうという気付きがありました。
Go言語って言語自体はシンプルで他の言語を知っていればほとんどその知識をスライドして活かせるのですが、実際にはGoはイディオムでカバーしている領域が大きい言語で、そういう点についても意識して学習や教育をしている必要があるんだなと認識しました。発表者さんによる資料は以下にあります
https://future-architect.github.io/articles/20190713/

「Backlog」のGitを支えるサービス達をGoで刷新した技術的プラクティス (Yuichi Watanabe)

チームラボにおけるGo言語の取り組み (Yasuhiro Hayashida)


Goの開発での活用事例の発表でした。詳しくは公開されている資料へご覧いただけたらと思うのですが、Go言語の活用においてgRPCを使うことは当たり前になっているなという印象を受けました。弊社でもgRPCの利用を始めていますが、この事自体がすでに先進的チャレンジでも何でもなく、ごく当たり前であるというくらいgRPCの普及を感じました。gRPC便利です。
https://slides.com/vvatanabe/tech-practice-for-replace-backlogs-git-services-in-go#/

google/wireを使ったGoらしいアーキテクチャ設計への取り組み (Yoichiro Shimizu)


GoのDIライブラリの説明でした。Go Cloudライブラリに含まれていましたが、最近独立ライブラリとして公開されたようです。まだベータ版とのこと。
このライブラリだけでDIを実現しているわけではなく、ツールによるコード生成によってDIが実現されるようですね。やはりGo言語だとこういう実現方法になるのかなと。
DIぽい仕組みはD2Cの開発にも取り入れており、実際はすべて手動でDIの配線を行っているのですが、このようなツールが正式公開されたらいろいろと記述を省略できそうなので、今後に期待していきたいですね。あとGo言語のミッションの一つとして開発としてスケールする言語としてデザインされたということが紹介されており、 D2C の開発でもそれが実現できているのか?という点でちょっと刺さりました。
https://speakerdeck.com/budougumi0617/gocon-fukuoka-2019-summer

マイクロサービス時代のhttpクライアント (Huy Do)


マイクロサービスで使うにはhttp/netのhttpクライアントでは物足りないので、より高機能なhttpクライアントを会社として開発しOSSとして公開した(現時点ではまだ?)という発表でした。xhttpというライブラリだそうです。マイクロサービスに適したhttpクライアントとして回復性と高可用性を重視したとのこと。社内で使っているものをOSS化できる文化がある会社って素晴らしいですね。またGoの標準ライブラリはインターフェースによりいろいろ差し替え可能になっている作りになっているのもこういうことがやりやすくでいいですね。
https://speakerdeck.com/line_developers/how-we-build-our-http-client-for-microservice

なぜ Go はマイクロサービスのための言語なのか (Kohei Kimura)


Go言語がクラウドネイティブと相性がよいということについて様々な特徴を上げつつ紹介された発表でした。クラウドネイティブという単語、実は初耳でした。スケーラブルなアプリケーションを構築及び実行するための技術の総称とのことです。Goを使っていて、~だからGoは開発しやすいなと思う点がいくつかあったのですが、それがもともとそのようにデザインされていたのだと再認識しました。
https://speakerdeck.com/cohhei/naze-go-hamaikurosabisufalsetamefalseyan-yu-nafalseka-why-go-is-a-language-for-microservices

gRPC Streaming によるスケーラブルな常時接続型 API の構築 (井本 裕)


gRPC Streamingによってどんな問題を解決し、どのようなメリットや注意点があるのかを解説した発表でした。 D2C でもgRPCは利用していますが、まだストリーミング型は利用していませんでした。しかし D2C のシステム的にも今後ストリーミングがマッチしそうな部分はあるので、大変参考になりました。
https://speakerdeck.com/avvmoto/grpc-streaming-niyorusukeraburunachang-shi-jie-sok-xing-api-falsegou-zhu

Goでコマンドラインツールを量産する僕の方法 (Masayuki Matsuki)


Goでコマンドラインツールを開発し、それを公開する場合に注意すべき点や、開発における注意点などについての発表でした。私自身、まだGoをサーバー開発ばかりに使っているのみですが、Goの特徴的にもコマンドラインツールへの適正をとても感じるので機会があれば挑戦してみたいですね。
https://junkyard.song.mu/slides/gocon2019-fukuoka/#0

ISUCONの為のpprof (Shiro Seike)


pprofの実戦的な使い方の紹介でした。ISUCONの紹介もあり、これまで名前だけは知っていたのですが、ちょっと興味を惹かれました。 D2C でもサーバーのパフォーマンスがかなり重要なポイントとなるため、pprofの使い方としてとても参考になりました。
https://docs.google.com/presentation/d/1Fghxd31leQN2N2dW9h9D0KivPSSh-ROnzlsdqfsaGVw/edit#slide=id.p

High memory usage server in Golang (haminiku)


メモリだけに乗り切らないデータをどのようにマネージメントしてそのデータのレスポンスを高速にしているのかについての説明の発表でした。そのためのキャッシュアルゴリズムやデータ形式などさまざまな工夫を行ったことについての紹介でした。 D2C でも似たようなこととして、膨大な広告から高速にデータを引き当てるという処理があり、そのための手法を日々考えているため、その方法についての参考になりました。

Data aggregation design with Goroutine, Channel, “sync” package, and Simple diagram (Ken’ichiro Oyama)


goroutineを用いたプログラムの設計を行う際の設計に考え方とその考えに基づいて作成したツールに関する発表でした。設計の考え方として 入力-処理-出力などのブロックをステージとして定義してそれらステージをつなげてパイプラインとして全体の処理を定義するという考えの紹介でした。別言語ですがScalaやJavaのライブラリであるAkka Streamの考えに近いと感じました。
https://speakerdeck.com/k1low/data-aggregation-design-with-goroutine-channel-sync-package-and-simple-diagram

Deep “delve” into Delve : the debugger for the Go (Hikaru Watanabe)


デバッグツールのdelveの紹介でした。私は開発にはintelliJを用いていてそれのデバッガを利用していただけなのですが、delveではより高度なことができるようですし、IntelliJ用の設定もできるようなので試してみたいと思いました。

JavaプログラムをGoに移植するためのテクニック――継承と例外 (牧内大輔)


Javaの継承や例外の機能を利用している部分をGoではどのように書きなせるかということについての発表でした。 D2C でもJava資産はたくさんありますし書き直すときに参考にできそうです。また教育という面でも、Javaとの対比でGo言語を教える際にも役に立てそうな内容でした。 https://speakerdeck.com/makki_d/javapuroguramuwogoniyi-zhi-surutamefalsetekunituku-ji-cheng-toli-wai

Golang BFF with GraphQL and gRPC (Seiji Takahashi)


Backends For Frontendを開発する際にGo言語でgRPCとGraphQLを用いることへの提案とその手法についての発表でした。 D2C でもマイクロサービスが増えてきておりBackends For Frontendパターンによるユーザーインターフェースを考えていましたが GraphQLを用いることまでは考慮しておらず、参考になるセッションでした。 GraphQL自体、gRPCよりもGoogleトレンドでは上に来ていることなど、 GraphQLはまだまだ途上段階と勝手に思っていたのでとても意外でした。 https://speakerdeck.com/timakin/go-backends-for-frontends-with-graphql-and-grpc

おわりに

Go Conference自体に初めての参加でしたが、発表・運営ともにレベルが高く、有意義な時間を過ごせました。次回の開催も2019年10月28日(https://gocon.jp/ja/)に予定されており、是非参加したいと考えています。


関連タグ