![見出し画像](https://assets.st-note.com/production/uploads/images/77294978/rectangle_large_type_2_425d6ee747992cbe6a4671948ff682bf.png?width=1200)
【イベントレポート】Go Tech Talk【サイバーエージェント x ミラティブ】
2022年4月14日に開催されたGo Tech Talk【サイバーエージェント x ミラティブ】。バックエンドエンジニアに向けてライブ配信されたこのイベントでは、各社の最前線で活躍するバックエンドエンジニアが、Goについて語りました。本レポートでは、パネルディスカッション内容を中心にその一部をお届けします。
登壇者
株式会社AbemaTV バックエンドエンジニア 菅 俊弥
2021年にバックエンドエンジニアとして新卒入社。
ABEMA のバックエンド開発に従事。現在は、新規機能開発・CI/CD フローの移行を担当。
株式会社サイバーエージェント バックエンドエンジニア 澤田 晋之介
2018年にバックエンドエンジニアとして新卒入社。
アメーバブログのバックエンド開発に従事。現在はアメーバブログのシステム刷新プロジェクトにて開発を担当。
株式会社ミラティブ バックエンドエンジニア 夏 澄彦
DeNAに入社。新卒MVPを受賞し、Mirrativの初期メンバーとして、バックエンド・iOS・Android・Webなどの開発全般に携わる。
2018年、CEO赤川、小川とともにミラティブを創業。現在はバックエンドの基盤開発や新規プロジェクトのリードエンジニアを務める。
株式会社ミラティブ バックエンドエンジニアリード兼マネージャー 牧野 龍彦
2013年にDeNA入社。サーバー・クライアントエンジニアとしてゲーム開発に従事。内製大型タイトルのリードエンジニアやプロジェクトマネージャーを経験。
2019年8月にミラティブに入社し、新規事業立ち上げに携わる。現在は、バックエンドチームのマネージャー兼リードエンジニア。主に基盤開発に携わる。
Twitter : @tatsumack
株式会社ミラティブ CTO 横手 良太
大学院修了後、機械学習の分野で博士号取得。助手として研究活動、論文執筆を行う。
2014年に株式会社DONUTSに入社し、スマートフォンゲーム開発に従事。2017年より技術部部長。
2018年7月ミラティブ参画し、ミラティブのアバター機能「エモモ」の開発をリード。2021年4月にCTOに就任。
Twitter : @n0mimono
「Abema TV」と「Amebaブログ」、そして「Mirrativ」――バックエンドでGoを採用する現場のリアルとは
株式会社サイバーエージェントはメディア事業やインターネット広告事業、ゲーム事業など多岐にわたる領域に事業展開し、1998年の創立以来成長を続けています。従業員数は2022年4月現在約5,400名、うちエンジニアは約1,000名です。事業部別のエンジニア比率ではメディア事業に関わるエンジニアが過半数を占めており、今回登壇するエンジニアもメディア事業に携わるメンバーです。なお、メディア事業部は「20世紀を代表するtoCサービスを創る」をミッションに掲げ、20にわたる事業を展開しています。エンジニア同士の交流やイベントも多く、内外での情報共有が盛んなチームです。
一方、株式会社ミラティブはゲーム配信プラットフォーム「Mirrativ」を提供しています。「Mirrativ」はスマホ1台で簡単にゲームが配信できるコミュニケーションサービスで、配信者数は360万人を突破、スマートフォンゲーム配信者数は国内No.1を誇ります。社員数は89名、うちエンジニアは22名。「わかりあう願いをつなごう」をミッションに、人と人とがつながり、理解し合える場をインターネット上に作りたいという思いのもとプロダクト開発に励んでいます。
イベント前半のライトニングトークでは、両社のバックエンドエンジニアがGoを活用して取り組んでいることについて語りました。
「Abema TV」で開発本部のバックエンドチームに所属する菅俊弥氏は、GoとGitHubActionsを使った業務改善の事例を紹介。Goには簡単なツールを作る上で標準パッケージ機能などが備わっており、GitHubActionsとの相性もよいため、Workflow Dispatchと組み合わせることでさまざまな改善が可能だと語りました。
「Mirrativ」のバックエンドをはじめとした開発全般に携わる夏澄彦氏は、サーバーサイドをGoとClean Architectureによって再設計した事例について発表。以前の課題を振り返り、「コンポーネントの依存性を一方向にする」ことを重視しつつ、Clean Architectureを導入したプロセスを解説しました。
同サービスのバックエンドチームのマネージャー兼リードエンジニアを務める牧野龍彦氏は、Continuous ProfilingをGoで行っている事例について紹介。Continuous Profilingとは、本番環境で継続的にプロファイリングすることを指します。その前提やポイントをさらいつつ、「Mirratv」で導入されたprofefeというOSSについて解説しました。
パネルディスカッション
イベント後半はLT発表者3名に加え、サイバーエージェントのAmeba事業部に所属する澤田晋之介氏がパネルディスカッションから参加。モデレーターはミラティブのCTOである横手良太氏が務めました。
・モデレーター:横手良太
・パネリスト :澤田晋之介、菅俊弥、夏澄彦、牧野龍彦
パネルテーマ1. いま挑戦していること
横手:最初のテーマは「いま挑戦していること」です。Goを使うにあたって挑戦していることや、プロダクト面で取り組んでいることを教えてください。まずはミラティブの牧野さんからお願いします。
牧野:Go移行に挑戦中ですが、まだ道半ばです。Perlで使われている大きなエンドポイントなどは、まだGoへ移行できていません。いかに安全に運用しながらGo移行できるかが、現在の課題です。プロダクト面では、ライブゲームの開発に新しく取り組んでいます。新規プロジェクトもやりつつ基盤も刷新するという両輪で進めています。
澤田:私は「Amebaブログ」のチームに所属していて、私たちもGoへの移行をやっています。もともとJavaだったものを移行させている最中ですが、言語機能の差が大きかったり、フレームワークが異なったりと苦労は多いです。Javaはフレームワークがやってくれる部分が多い一方、Goのフレームワークはライブラリと言えるくらい薄い印象で、Javaとの差を感じています。そこを書き換えるとコードが増えてしまいますし、そもそも書き換えが大変ですね。試行錯誤しつつ、地道に挑戦しています。
横手:なるほど。「Abema TV」に携わる菅さんは、いかがですか?
菅:「Abema TV」は今年のワールドカップ全64試合の放映権を獲得したので、それに向けた開発に取り組んでいますが、今回のワールドカップだけに最適化した機能ではなく、今後も使える機能を目指しています。
横手:「Mirrativ」はPerlからGoへ、「Amebaブログ」はJavaからGoへと移行を進めていますが、「Abema TV」は最初からGoだったのでしょうか。
菅:はい、ずっとGoを使っています。最初はGoの序盤のバージョン、1.4あたりから使っているようでした。
横手:それは化石のようなバージョンですね(笑)。
![](https://assets.st-note.com/img/1651115974111-8LBjcba9eI.png?width=1200)
パネルテーマ2. 技術的に大変だったこと
横手:次のテーマは「技術的に大変だったこと」です。Goを使うにあたって苦労していることなどはありますか?
牧野:移行については今も苦戦している最中です。例えば、GoとPerlでのロジックの重複が挙げられます。現在は特に問題は起きていませんが、今後は重複に気付かずにいずれかにしか修正が入らなかったといったような問題が起きるかもしれません。
横手:なるほど。澤田さんはその点についてどのような対応をしていますか?
澤田:私たちは新規実装というより、既存機能のリアーキテクチャ兼刷新というかたちでやっています。そのため、コア機能のうち、あまり触られていない部分から移行しようとしているので、重複してどちらもメンテが大変だったことはあまりありません。ただし、小さい部分からやっていこうとしているので、「他の部分に依存しているのをどうすればいいのかな?」 といった大変さはあります。
夏:マイクロサービス化されているから入れ替えしやすい、といった傾向はあるんでしょうか?
澤田:いえ、あまりありません。モノリスでこそないものの、巨大なAPIがひとつある状況で、それを必死にマイクロサービス化しようとしているところです。将来的には大きなAPIから作ったマイクロサービスを叩くようにして、テセウスの船のごとく徐々に内部をマイクロサービスにしていくことを想定しています。
夏:ミラティブも今ちょうど同じようなことで悩んでいます。新しいシステムはGoで作ればいいんですが、巨大なエンドポイントはビジネスの源泉でもあるので、その前後のPerlのコードをGoで書き換えるのは躊躇してしまいます。もしかしたら、マイクロサービス化もひとつの手かもしれませんね。
横手:「Abema TV」はGoで立ち上げ、すでに6年ほどが経つそうですが、負債が溜まっているなどの大変なことはありますか?
菅:最近、MongoDBのドライバのバージョンを上げたら古いサービスがきちんと初期化できておらず、テスト時に初期化漏れでパニックして大変でした。初期化はちゃんとしないとな、と改めて感じた出来事です。
横手:それはちゃんと解消されたのでしょうか……?
菅:ちゃんと解消できました。
パネルテーマ3. Go未経験メンバーのキャッチアップスピードを早める工夫は?
横手:ここまで話を伺って、それぞれ頑張っているな、という感じがひしひしと伝わってきました。次は「Go未経験メンバーのキャッチアップスピードを早める工夫は?」というテーマで、まずは澤田さんからお願いします。
澤田:「A Tour of Go」をやってもらって、公式ドキュメントにあるベストプラクティス集を一通り読んでもらったら、あとはもう実践あるのみです。書きながら慣れていくしかないと思います。そこまでやれば、問題になるコードを書くことはほぼありません。
横手:チームメンバーはJavaとGoいずれも書けるのが一般的ですか?
澤田:Javaはほぼ全員書けて、Goを書ける人も最近は多くなっていると思います。最初はGo未経験の人もいましたが、得意な人がリードしながら進めてきた感じです。
横手:菅さんはいつからGoに触り始めましたか?
菅:大学4年生の頃から触り始めたので、まだ3年経っていません。最初は私も「A Tour of Go」でキャッチアップしていました。未経験メンバーが入ってきたときも、同じく「A Tour of Go」や「Effective Go」を勧めています。Goはフォーマットがしっかりしているので、みんな同じような書き方にはなりますが、ベストプラクティスとあまりにもかけ離れているときはフィードバックするなどの対応をしています。
横手:牧野さんはどうでしょうか。
牧野:これといった工夫はあまりありません。というのも、Go自体の言語仕様が複雑ではないですし、linterも用意しているので、あまり経験がなくても問題となるようなコードは書けないようになっていると思います。実際ミラティブに入社するバックエンドエンジニアはGo未経験の人がほとんどですが、すぐにキャッチアップして開発することができています。
横手:「Mirrativ」はGoの前がPerlですよね。Perlを書いたことのある人がそもそもいないので、変な癖も出にくいのではないかなと思います。澤田さん、以前はJavaでしたが、Javaっぽい書き方をしたくなりませんか。
澤田:確かにその傾向はあります。変数名が長いなど、Java風のGoのコードはよく散見されます。「埋め込みを使って承継っぽくしてみました」風コードもよくあります。
横手:なるほど、やっぱりあるんですね!
パネルテーマ4. 最近のホットトピックは?
横手:最後のテーマです。最近のホットトピックがあれば教えてください。
夏:Goがジェネリクスを導入したことですね。これまでGoを使うにあたって、ジェネリクスがないことが非常につらかったんです。とはいえ、もうジェネリクスがない世界に慣れてしまったので、何に使えるのかなと悩んでいます。
横手:まだコードは書いていませんか?
夏:はい、まだです。先月リリースされたGo 1.18でジェネリクスが導入されていて、ミラティブで本番投入したのが先週なので、万が一リバートしても問題がないようにまだ使ってはいません。でもそろそろ使ってもいいかなと思っています。
菅:私もジェネリクス導入がホットトピックだと思いますが、1.18のバージョンはまだ使っていないので、イメージが湧きません。
澤田:やっぱり私もジェネリクスでしょうか。ただ、これまでJavaを使っていた立場として、ジェネリクスが欲しかったかと聞かれると、実はそうでもありません。ジェネリクスを必要とするのは、だいたいライブラリを書くときです。ライブラリを自分で書くことは少ないので、ジェネリクスが欲しいと思ったことはないんです。とはいえ、コード生成でまかなっている部分もあるので、そこをジェネリクスに置き換えられるとメンテナビリティが上がるかも、とは思っています。
横手:ジェネリクスの話で思い出したのですが、みなさんGoのバージョンはどのくらいで変えていますか?
夏:メジャーがリリースされたときは、最初の地雷を踏まないように1ヶ月くらい世間の様子を見た後にアップデートします。マイナーやパッチはできるだけリリースされたらすぐにやるようにしています。
澤田:私たちもパッチの場合はすぐやっています。GitHub Actionsでビルドしているのでsetup-goのcheck-latestを有効にしていると、最新のバージョンに自動的に更新してくれます。
夏:以前2系のRubyを使っていた時はバージョンアップに非常に大変な思いをしたのを覚えています。でもGoを1.17から1.18に上げたときはほぼ何もコード修正せずにすんだので、Goのその辺りはすごいなと思います。
菅:「Abema TV」では1.14から1.17までいろんなバージョンがあふれていて、マイクロサービスが多いというのもありますが、全然バージョンを上げられていません。上げたいなと思いつつ、依存関係が怖くて上げられないというのが現状ですね。
横手:なるほど。現実はなかなかうまくいかないことも多いですね。登壇された皆さん、貴重なエピソードを話してくださり、ありがとうございました。
このほか、イベント当日は視聴者に対する質疑応答や、互いの試行錯誤に対する意見が盛んに交わされました。
LTとパネルディスカッションの詳細を知りたい方は、ぜひYouTubeのアーカイブ動画をご覧ください。
■サイバーエージェント
カジュアル面談応募フォーム
メディア事業部エンジニア中途採用
■ミラティブ
ミラティブテックブログ
エンジニア向け会社紹介資料 / Engineer's Handbook
ミラティブ会社紹介資料
この記事が気に入ったらサポートをしてみませんか?