Slide 1

Slide 1 text

Go in Corporate Solutions Engineering mercari.go #5 / @fivestar

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

小川 雄大 (OGAWA Katsuhiro) ● @fivestar ● CSE 所属 ● Backend Engineering アーキテクト ● 2018/1/1 入社 ● 得意な言語は PHP ● 前職は Ancar Inc. / CTO

Slide 4

Slide 4 text

CSE について 今日のトピック 01 プロダクトと開発チーム体制 02 Backend of People Products 03 開発の歩み 04 技術的課題 05

Slide 5

Slide 5 text

CSE について

Slide 6

Slide 6 text

4 Corporate Solutions Engineering チーム “Solving business challenges with engineering” 経営課題をエンジニアリングで解決する

Slide 7

Slide 7 text

● 2017/11 に元メルカリ CTO・VPoE の @sotarok により立ち上げ ○ 初期名称は Corporate Engineering チーム ● 組織課題の解決にフォーカスしたエンジニアチーム ● メルカリアプリの開発チームからは独立 ○ メルカリのバリューを活かしつつ独自のチーム文化を形成 生い立ち

Slide 8

Slide 8 text

2018 /01 3人 / 1ドメイン プロダクト開発が始まる 2月には人数が倍に 2018 /07 15人 / 3ドメイン 2018 /12 26人 / 4ドメイン IIT から新卒加入 CSE チームの変遷 PM 加入 チーム名を CSE に変更

Slide 9

Slide 9 text

ビジネスドメイン People Products 人と組織のデータベース、人事評価 Accounting Products 会計システム、連結決算、会計監査レポート Communication & Knowledge Wiki PR & Branding コーポレート Web

Slide 10

Slide 10 text

プロダクトと 開発チーム体制

Slide 11

Slide 11 text

People Products Teams 人と組織のデータベース Reviews 人事評価システム Benefits インセンティブマネジメント

Slide 12

Slide 12 text

Frontend / Backend Frontend フレームワークは プロダクトごとに選定 REST API Backend

Slide 13

Slide 13 text

People Products 開発チーム体制 ● エンジニアリングマネージャー (EM) / 2人 ● プロダクトマネージャー (PM) / 2人 ● ソフトウェアエンジニア / 11人 ● QAエンジニア / 1人 ● デザイナー / 2人

Slide 14

Slide 14 text

● 担当領域 ○ プロダクトあるいはエピックごとに担当をつける ○ ある程度流動的 ● 技術領域 ○ 多くのメンバーは Frontend/Backend 両方やる エンジニアリングチーム体制

Slide 15

Slide 15 text

● Frontend / Backend それぞれにアーキテクトが1人 ○ 一部 Tech Lead のロールを兼任 ○ プロダクト横断でアーキテクチャに責任を持つ ● コードもめっちゃ書く アーキテクト

Slide 16

Slide 16 text

● 月に1度、2日に渡って技術的課題解決に注力する ○ リファクタリングやドキュメンテーションなど ○ PM ではなくエンジニアがオーナーシップを持つ ● EM も参加 DevDay

Slide 17

Slide 17 text

Backend of People Products

Slide 18

Slide 18 text

Backend 基本構成 ● アプリケーション ○ Go 製の API ● インフラ ○ メルカリの Microservices プラットフォーム ○ MySQL (CloudSQL)

Slide 19

Slide 19 text

Backend アーキテクチャ ● REST API ● Entity Model ● Repository ● Service (Usecase)

Slide 20

Slide 20 text

REST フレームワーク ● BEAR.Sunday respected ● Handler を Resource 単位で管理 ● HAL フォーマットをサポート

Slide 21

Slide 21 text

● On{HttpMethod} ハンドラー ○ 未定義の場合は 405 ● View Model ○ JSON 定義はこちらに ● resource.Base ○ State 管理 Resource 指向ハンドラー

Slide 22

Slide 22 text

この他に使用している主な外部パッケージ ● github.com/dgrijalva/jwt-go ● github.com/go-chi/chi ● github.com/mattes/migrate ● github.com/pilu/fresh ● go.uber.org/zap ● gopkg.in/guregu/null.v3

Slide 23

Slide 23 text

開発の歩み

Slide 24

Slide 24 text

開発の歩み (2018/1~) ● Reviews の MVP バージョンリリース ○ 1月末に実施される評価に向けた機能開発を2週間で実装 ● Go はみんな素人レベル ○ @fivestar が趣味でツール作ってた程度 ● 動くこと最優先 ○ ベタベタに Handler を書いていた ○ hot-reload の仕組みを最優先で整えた

Slide 25

Slide 25 text

● 2週間で REST フレームワーク開発 ● ドメイン層の基本アーキテクチャを決める ○ シンプルな Entity Model ○ DDD 由来の Repository / Service 開発の歩み (2018/2~)

Slide 26

Slide 26 text

● Teams / Reviews の正式リリース ● リリースを前に管理者用ページがなく運用面がガバガバだったため PHP でその場しのぎのツールを作る ○ 未だに活用されてしまっている... 開発の歩み (2018/4~)

Slide 27

Slide 27 text

● API アクセスコントロールのための仕組みを導入 ○ Teams IAM ● データ暗号化基盤の導入 ○ 評価等の機密データを暗号化 ○ Cloud KMS を利用 開発の歩み (2018/6~)

Slide 28

Slide 28 text

● Slack 通知の仕組みを Cloud Functions を用いて実装 ○ 新卒が担当 ○ Go… ではなく JavaScript ● Benefits リリース ○ 日本初の挑戦を。メルカリが新インセンティブ制度に込めた想いとその舞台裏 開発の歩み (2018/12~)

Slide 29

Slide 29 text

技術的課題

Slide 30

Slide 30 text

● ORM などは導入しておらず SQL をベタベタと書いている ● カラム追加時などソースコードの変更箇所が多いため効率的にスキーマ・ クエリ管理ができるツールがほしい SQL Building

Slide 31

Slide 31 text

● 途中で testify が導入された ○ 個人的には testing パッケージで十分だと思っている ● モックどうするか テストの書き方が統一されていない

Slide 32

Slide 32 text

● バックエンドも肥大化しつつある ● 少なくともアプリケーションドメインごとにコードを分けたい マイクロサービス化

Slide 33

Slide 33 text

● 短期間で作ったため DevDay にて調整中 REST フレームワークの OSS 化

Slide 34

Slide 34 text

● メルカリ本体側の人たちともっと交流したい Go のスペシャリスト不在

Slide 35

Slide 35 text

Any questions?