1/8(火)は「mercari.go #5」に参加してきました。

会場は 株式会社メルカリ さん。いつ来てもきれいで広い会場ですね!



目次
何故参加したか
前回も参加して、実践的な知見を聞くことが出来てとてもいいなと思ったので参加しました。
ちなみに、前回の参加報告はこちら。
タイムテーブル
| 時間 | 内容 |
|---|---|
| 19:00 | 開場 |
| 19:30~19:40 | オープニング |
| 19:40~20:10 | Go in Corporate Solutions Engineering @fivestar |
| 20:10~20:15 | 休憩 |
| 20:15~20:45 | 俺たちのmicroserviceはまだ始まったばかり @kokukuma |
| 20:45~20:50 | 休憩 |
| 20:50~21:20 | Keep watching and extending features of gRPC @kazegusuri |
| 21:20~22:00 | 懇親会 |
| 22:00 | 終了 |
内容
最初に飲み物と食べ物が配られて、それらを頂きながらお話を聞くスタイルです。
飲み物、食べ物準備万端! #mercarigo pic.twitter.com/bpJRlUFsUd
— kabukawa (@kabukawa) 2019年1月8日
前回は食べ物が盛り付けられているところから各自で皿に取ってくる形でしたが、今回はラップされたおにぎりと、容器に分けられたお惣菜という組み合わせに。 椅子に備え付けのテーブルでスペースが限られているので、こういう形のほうが汚したりする心配も少ないので有り難いです。
おいしそうな食べ物、頂きました!ありがとうございます! #mercarigo pic.twitter.com/S72IyDOpCI
— kabukawa (@kabukawa) 2019年1月8日
オープニング
オーガナイザーの morikuni(@inukirom) さんのトークで始まりました。
はじまた! #mercarigo pic.twitter.com/SwYluehZ5r
— kabukawa (@kabukawa) 2019年1月8日
前回参加したときも説明があったのですが、懇親会の時に一部の人で固まって話してしまうことのないように一部を他の参加者が参加しやすいように開けておく「懇親会のGルール」という提案、すごくいいなと思います。

Go in Corporate Solutions Engineering
Ken Smeaton(@fivestar) さんの発表。
Corporate Solutions Engineeringチームで取り組んでいる事と、それを解決するためにGoでアプリケーションを作成しているという内容。
以下、個人メモ。
- CSE:Corporate Solutions Engineering。組織課題の解決にフォーカスしたチーム。
- メルカリアプリの開発からは独立した、かなり特殊なチーム。
- フロントはReactとRedux、バックエンドはGo。バックエンドはAPIとして実装。
- People Products
- Teams:人と組織のデータベース
- Reviews:人事評価システム
- Benefits:インセンティブマネジメント
- アーキテクト
- プロダクト横断でアーキテクチャに責任を持つ
- コードもめっちゃ書く
- DevDay
- 月に1度, 2日間技術課題の解決に注力する
- リファクタやドキュメンテーションなど
- PM ではなくエンジニアがオーナーシップを持つ
- EMも参加する
- 月に1度, 2日間技術課題の解決に注力する
- DDDよりもクリーンアーキテクチャに近いアーキテクチャを採用している。
- RESTフレームワークはPHPのBEAR.Sundayを参考に独自実装。
- 使用している主な外部パッケージ
github.com github.com github.com github.com github.com gopkg.in
- チームメンバーはGo初心者
- 管理ツールがなく、間に合わせで作ったPHPのツールが未だに使われている
- 評価周りは暗号化され、鍵は Cloud KMSで管理
- Slack通知はインドから来た新卒社員がJavascriptで実装
- SQL Building
- 本体とは切り離されているので自由度は高いが、とはいえ本体側のGoのスペシャリストとの交流もしていきたい。
- Goを選択した理由。メルカリ全体のテクノロジー戦略を踏まえて採用。
- GoでJSONは扱いづらい
立ち上げから①年でこれだけの体制とプロダクトを整備しているのはすごいなと思いました。
俺たちのmicroserviceはまだ始まったばかり
kokukokukokukoku(@kokukuma) さんの発表。
mercariのmicroservice化はどの程度進んでいるのか、という内容。
mercari.go なのに、最初から「Goの要素は殆ど出てきません」と 宣言して始めるスタイル。 興味のある話題なので個人的には嬉しいですが(笑)
- マイクロせービス化
- こんな感じで分割するといい

- こんな感じで分割するといい
- コードやデータ、開発プロセス、運用プロセス、組織がそれぞれのサービスにおいて独立しているのが、良いマイクロサービス
- クライアントややDBの構造は変えない
- マイクロサービスが最低限満たすべきもののチェックリストをプラットフォームチームが準備
- 基本はGCPを使用。
- インターネット越しでのDB利用はコストが高いので、メルカリのDBにつなぐサービスはsakura(石狩)に置かれる。
- 1、2名のチームが実態。但しQAチームは別にいる。
- サービス数が増えすぎる問題が出てきた
- 一時的対処としてLegacy DB Serviceというのを用意してmercariのDBに対するCRUDを提供。但しできれば早めに削除したい
- 一時的に、と思って作ったものが延々使われ続けるのはよくある話なので、程よく使いづらさを残すとか、何らかの制約をかけておくのは大事。
LegacyではなくLegendにすれば良かったのでは(違
— kabukawa (@kabukawa) 2019年1月8日
#mercarigo
- マイクロサービス側のQA環境にはまだ課題がある
QAが安定しない問題
— kabukawa (@kabukawa) 2019年1月8日
#mercarigo pic.twitter.com/8LiAyMwaxl
開発者が低コストでQA環境を準備できない
— kabukawa (@kabukawa) 2019年1月8日
#mercarigo pic.twitter.com/k5K4OnOXXJ
QA環境の状態が分からない
— kabukawa (@kabukawa) 2019年1月8日
#mercarigo pic.twitter.com/Su1zn64FJf
テストを該当部分だけに絞り込みたいという話に対して、テストの観点が違うから頭からの通しテストも必要なのでは?という質問が出ていました。僕もそう思いました。
マイクロサービス化したときに、個別のAPIだけのテストで完結させるというのはいわゆる単体テストとしては正しいと思うけど、結合テストとしては不味い、ということではないかと。
— kabukawa (@kabukawa) 2019年1月8日
観点が違うというのはまさにそのとおりだと聞いていて思いました。
#mercarigo
マイクロサービスの難しいところは、個別の機能は作りやすくなる半面、結合したときのテストとか、障害が起きたときの検知とか、それぞれの機能の責任範囲とか、そういうところなのではないかと思います。
— kabukawa (@kabukawa) 2019年1月8日
そのあたりを解決しておかないと、あとで結構たいへんそうだなぁ、と。
#mercarigo
mercariのマイクロサービス化は着実に進んでいる印象。 でも、従来のサービスと並行で作業しているので、互換性等を考慮しつつ段階を分けて進んでいる。 色々苦労もされているようだけど、うまくいくと良いなと思いました。
Keep watching and extending features of gRPC
@kazegusuri) さんの発表。
gRPCについて、変更履歴を追いながら機能の説明などを30分間ひたすら喋り続ける、という内容。 marcari社内でgRPC王と呼ばれているだけあって、メチャgRPC愛に溢れるセッションでした。
gRPCについての情報源
gRPCのリリース情報のページはこちら。
このページに書かれている内容から、リリースごとにポイントとなる機能について解説をしながら、これまでのgRPCについて振り返っていく流れ。
gRPCはふわっとしたイメージしか無かったので、こうやって解説をしてもらえるのは有り難いです。
好きなことを話している人って良いよな。
— kabukawa (@kabukawa) 2019年1月8日
楽しそうだし、楽しいゾ!ってのが伝わってくるから。
gRPC王と呼ばれるだけのことはある。
メチャ興味が出てきた。
#mercarigo
話に熱中しすぎてスクリーンロックがかかってる(笑)
— kabukawa (@kabukawa) 2019年1月8日
でも、そんなの気にならないくらい楽しそう!
#mercarigo
もう13分だ。
— kabukawa (@kabukawa) 2019年1月8日
時間を忘れてひたすら話し続けているのすごい。
#mercarigo
30分のセッションで既に13分経過。ここまででスライドの1/5しか終わってない(笑)
熱中しすぎて飲み物が視界から消失してたwww
— kabukawa (@kabukawa) 2019年1月8日
#mercarigo
ひたすら歴史を語るというのも愛があるとすごく楽しいものだ。
— kabukawa (@kabukawa) 2019年1月8日
素晴らしいセッションを聞いている気がする。
#mercarigo
とにかく凄い熱量で、圧倒された30分でした。 できれば次回は1時間枠で聞きたいなと思いました!
懇親会
セッションの熱が冷めやらぬまま、懇親会に突入しました。 食べ物は既に無くなっていたので、追加でおつまみ的なものが提供されて懇親会スタート。 ちょっと時間が短かったのと、知り合いと話をしていたらあっという間に終わってしまい、折角のチャンスなのにGoの話を聞けなかった。。。
オリジナルビール #mercarigo pic.twitter.com/sF3bJzEcIl
— kabukawa (@kabukawa) 2019年1月8日
まとめ
今回はGoが殆ど出てこないセッションもありましたが、どのセッションも内容の濃い、聞いていて楽しい内容でした。 実際の開発での知見などは、会場からも「あるある」等の声もあり、とても良かったと思います。
また次回も参加できれば(抽選なので。。。)したいなと思います。 ありがとうございました!
