Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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?