mercari.go #5
Go inCorporate Solutions Engineeringmercari.go #5 / @fivestar
View Slide
自己紹介
小川 雄大 (OGAWA Katsuhiro)● @fivestar● CSE 所属● Backend Engineering アーキテクト● 2018/1/1 入社● 得意な言語は PHP● 前職は Ancar Inc. / CTO
CSE について今日のトピック01プロダクトと開発チーム体制02Backend of People Products03開発の歩み04技術的課題05
CSE について
4Corporate Solutions Engineering チーム“Solving business challenges with engineering”経営課題をエンジニアリングで解決する
● 2017/11 に元メルカリ CTO・VPoE の @sotarok により立ち上げ○ 初期名称は Corporate Engineering チーム● 組織課題の解決にフォーカスしたエンジニアチーム● メルカリアプリの開発チームからは独立○ メルカリのバリューを活かしつつ独自のチーム文化を形成生い立ち
2018/013人 / 1ドメインプロダクト開発が始まる2月には人数が倍に2018/0715人 / 3ドメイン2018/1226人 / 4ドメインIIT から新卒加入CSE チームの変遷PM 加入チーム名を CSE に変更
ビジネスドメインPeople Products人と組織のデータベース、人事評価Accounting Products会計システム、連結決算、会計監査レポートCommunication & KnowledgeWikiPR & Brandingコーポレート Web
プロダクトと開発チーム体制
People ProductsTeams人と組織のデータベースReviews人事評価システムBenefitsインセンティブマネジメント
Frontend / BackendFrontendフレームワークはプロダクトごとに選定REST APIBackend
People Products 開発チーム体制● エンジニアリングマネージャー (EM) / 2人● プロダクトマネージャー (PM) / 2人● ソフトウェアエンジニア / 11人● QAエンジニア / 1人● デザイナー / 2人
● 担当領域○ プロダクトあるいはエピックごとに担当をつける○ ある程度流動的● 技術領域○ 多くのメンバーは Frontend/Backend 両方やるエンジニアリングチーム体制
● Frontend / Backend それぞれにアーキテクトが1人○ 一部 Tech Lead のロールを兼任○ プロダクト横断でアーキテクチャに責任を持つ● コードもめっちゃ書くアーキテクト
● 月に1度、2日に渡って技術的課題解決に注力する○ リファクタリングやドキュメンテーションなど○ PM ではなくエンジニアがオーナーシップを持つ● EM も参加DevDay
Backend ofPeople Products
Backend 基本構成● アプリケーション○ Go 製の API● インフラ○ メルカリの Microservices プラットフォーム○ MySQL (CloudSQL)
Backend アーキテクチャ● REST API● Entity Model● Repository● Service (Usecase)
RESTフレームワーク● BEAR.Sunday respected● Handler を Resource 単位で管理● HAL フォーマットをサポート
● On{HttpMethod} ハンドラー○ 未定義の場合は 405● View Model○ JSON 定義はこちらに● resource.Base○ State 管理Resource 指向ハンドラー
この他に使用している主な外部パッケージ● 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
開発の歩み
開発の歩み (2018/1~)● Reviews の MVP バージョンリリース○ 1月末に実施される評価に向けた機能開発を2週間で実装● Go はみんな素人レベル○ @fivestar が趣味でツール作ってた程度● 動くこと最優先○ ベタベタに Handler を書いていた○ hot-reload の仕組みを最優先で整えた
● 2週間で REST フレームワーク開発● ドメイン層の基本アーキテクチャを決める○ シンプルな Entity Model○ DDD 由来の Repository / Service開発の歩み (2018/2~)
● Teams / Reviews の正式リリース● リリースを前に管理者用ページがなく運用面がガバガバだったため PHPでその場しのぎのツールを作る○ 未だに活用されてしまっている...開発の歩み (2018/4~)
● API アクセスコントロールのための仕組みを導入○ Teams IAM● データ暗号化基盤の導入○ 評価等の機密データを暗号化○ Cloud KMS を利用開発の歩み (2018/6~)
● Slack 通知の仕組みを Cloud Functions を用いて実装○ 新卒が担当○ Go… ではなく JavaScript● Benefits リリース○ 日本初の挑戦を。メルカリが新インセンティブ制度に込めた想いとその舞台裏開発の歩み (2018/12~)
技術的課題
● ORM などは導入しておらず SQL をベタベタと書いている● カラム追加時などソースコードの変更箇所が多いため効率的にスキーマ・クエリ管理ができるツールがほしいSQL Building
● 途中で testify が導入された○ 個人的には testing パッケージで十分だと思っている● モックどうするかテストの書き方が統一されていない
● バックエンドも肥大化しつつある● 少なくともアプリケーションドメインごとにコードを分けたいマイクロサービス化
● 短期間で作ったため DevDay にて調整中REST フレームワークの OSS 化
● メルカリ本体側の人たちともっと交流したいGo のスペシャリスト不在
Any questions?