Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

Souzoh iOS Talkを開催しました #souzohios

ソウゾウのiOSエンジニアの@motokieeです。

2017年10月11日水曜日にソウゾウのiOSエンジニア陣によるテックトークイベント、Souzoh iOS Talkを初開催しました。 mercari.connpass.com

メルカリ アッテ、メルカリ カウル、メルカリ メゾンズなどの開発していく中で得た知見について共有しました。

トークまとめ

Move Fast iOS Development

まずは私(@motokiee)からソウゾウの開発体制やエンジニア文化について話をしました。

f:id:motokiee:20171017183132j:plain:w512

ソウゾウのiOSメンバーがどんなValueで開発をしているのか、技術情報の共有をどのように行っているのかについてお話しました。

speakerdeck.com

メルカリアッテのRxSwift実装ガイド

@parakeetyからはメルカリ アッテを開発する中で得られたRxSwiftのベストプラクティスについての解説でした。

f:id:motokiee:20171017183145j:plain:w512

1からRxSwiftで開発して継続的にアップデートをしているメルカリ アッテのようなサービスはなかなかないと思います。歴史と知見の詰まったトークでした。

speakerdeck.com

RxSwift4をチラ見する

@tarunonはソウゾウではなくメルカリのiOSエンジニアなのですが、ソウゾウのiOS技術共有会によく顔を出している縁で発表をしてもらいました。

f:id:motokiee:20171017183206j:plain:w512

彼自身、RxSwiftにコントリビュートしていることもあり、RxSwiftのアップデートについて詳しく解説していました。

www.icloud.com

Project開始後に導入するAssetsの自動共有

メルカリ カウルの立ち上げメンバーでもある@yudoufuからはAssetsの自動化についてのトークでした。

f:id:motokiee:20171017183154j:plain:w512

プロジェクト開始後にAssetsを入れ替えるの怖いですよね。一方で自動化したい部分でもあり、技術チャレンジの知見と成功への道のりについて解説がありました。 speakerdeck.com

メルカリ アッテを支えるオートマトン

最後のトークはメルカリ アッテのiOSエンジニアである@orakaroです。

f:id:motokiee:20171017183219j:plain:w512

「メルカリアッテ」アプリのリニューアルの一つとして会員登録フローを実装し直した際の設計と実装についての話でした。状態管理技術のステートマシン(オートマトン)の実現方法について詳しく解説しました。

speakerdeck.com

懇親会

全てのトーク終了後に懇親会を開催しました。

f:id:motokiee:20171017184450p:plain:w512

Souzoh iOS Talkでは、発表を聞くだけでなく開発メンバーや参加者同士での交流が活発になるよう、iOSDC Japan 2017でも採用されていたパックマンルールを採用しました。

f:id:motokiee:20171017183314j:plain:w512

皆さん話しやすかったのか懇親会は大いに盛り上がりました。

まとめ

Souzoh iOS Talkは今後も定期的に開催します。ソウゾウのエンジニアだけではなく、社外のエンジニアの発表も交えて開催できるよう企画中です。

f:id:motokiee:20171017183122j:plain:w512

ソウゾウは今回のトークで取り上げられたサービス以外にもメルチャリのような全く新しいサービスにも挑戦できるとても刺激的な環境です。 [souzoh]エンジニア(iOS) / メルカリ

ちょっと話を聞いてみたいな、と思ったら@motokieeまでいつでもご連絡ください。大歓迎です!

PHPカンファレンス2017でFirebase Realtime Databaseについて登壇してきました #phpcon2017

こんにちは、サーバサイドエンジニアの@sota1235です。

先日10/8(日)に東京で開催されたPHPカンファレンス2017に登壇してきました。

phpcon.php.gr.jp

何について話したか

登壇した際のスライドは以下です。

動画も上がっているようなのでよろしければどうぞ。

youtu.be

今回はメルカリの一機能であるメルカリチャンネルでの開発の裏話について発表しました。

メルカリチャンネルではリアルタイムメッセージング(コメントやいいね等の機能)にFirebase Realtime Databaseを利用しています。

その開発時の工夫やテクニックについてお話しました。

どんな工夫をしたのか、実際にFirebase Realtime Databaseを導入してみてどうだったのかは全てスライドに書いてあるので興味のある方はぜひ目を通してみてください!

登壇してみて

今回は技術的に最新のことや手法を紹介する、というよりも現場でいろんな課題がある中でそれにどう立ち向かっていったのか、その際にFirebase Realtime Databaseがどのように活躍したのかにフォーカスして発表しました。

聴衆にとってそのような発表に需要があるのか不安でしたが、発表後の質疑応答や懇親会等で前向きなフィードバックを頂くことができました。

また、同じように動画サービスをやってる開発者の方と「ココがツライですよね、動画開発!」といった話もできて非常に楽しかったです。

今回はメルカリチャンネルのリアルタイムメッセージング回りのお話でしたが、別の視点からの開発の話もチャンスがあればシェアしていきたいです。

最後に

メルカリではメルカリチャンネルの成長を100倍加速させるエンジニアを募集しています。

ソフトウェアエンジニア(Server Side)/ Software Engineer (Server Side) / メルカリ

ソフトウェアエンジニア(Android)/ Software Engineer(Android) / メルカリ

ソフトウェアエンジニア(iOS)/ Software Engineer (iOS) / メルカリ

PHPカンファレンス2017のスポンサーブースに出展しました

こんにちは!メルカリでサーバーサイドエンジニアをしている @bravewood と申します。 メルカリでは2017年10月7日に行われた PHPカンファレンスにおいて、ゴールドスポンサーをさせていただきました。当日はスポンサーブースに出展を行い、そこで、缶バッジやシールなどのノベルティーをお配りするとともに、訪問された方々といろいろお話をさせていただきました。本記事では、その際にお伺いした質問と回答をまとめさせていただきました。

f:id:bravewood:20171008084513j:plain

組織・開発に関すること

メンター・メンティーの割り当てはどうなっていますか?

新卒など技術的なキャッチアップが必要な人には、技術力の高い人を割り当てたりとかするのですか?

現状は明確にメンターは固定されておらず、入社される方に対してタスクやチームがまず決まり、その後チーム内で空いている人や教えるのが上手そうな人がメンターに任命され、通常1ヶ月間つきます。 さらに、技術メンター制度というものがあり、プリンシパルエンジニアなど技術的バックグラウンドが確立しているメンターが1ヶ月から半年の間、「開発スピードを維持するために、変更に強くてしなやかな設計/きれいなコードを書ける人を増やす」という目的でメンティーを丁寧に教える制度もあります。

エンジニア何人ぐらいいるんですか?

エンジニア全体で120名弱、サーバーサイドエンジニアに絞ると50人強います。

※新規サービス開発を行う子会社のSouzohにもかなりの開発者が在籍していますが、上記には含めておりません。

エンジニアどのくらい増えているんですか?

2年前は25名ほどでしたからざっくり5倍くらいには増えております。

3拠点の時差はどうやっているんですか?

ほぼ時差が8時間間隔あるので、どこかの拠点に合わせるようにしています。 現状日本にいる開発メンバーのタスクはざっくり分けると、アメリカのメルカリを担当する人と、日本のメルカリを担当する人がおり、それぞれで数チームずつ開発チームが存在します。 またイギリス拠点はサービスの立ち上げ期ということで、ほぼ現地のエンジニアだけで時差なく開発しています。

入社時にすでに規模が大きかったと思うのですが、入社する人たちは大規模系のバックグラウンドがある人が多いのですか?

あることは望ましいと思いますが、全員がそうではないです。 また、@kazeburo をはじめとするSREチームのレビューやメンター制度などを通してエンジニアが大規模系サービスの開発経験を積むのをサポートする体制があります。

(現職で)基盤系の構築と開発の両方をやっていて、他の人が協力してくれなくて辛いのですが、そういうことを専門にやる人たちがいていいですね!

メルカリでは、SET(Software Engineer in Test)やBackend System エンジニアなど基盤系の構築を主なタスクとして勤務するメンバーが複数人おり、APIエンジニアが主担当であるAPIの開発業務に注力できる環境が整っているので、非常に助かっています。 例えば、メルカリのほぼ全機能をDocker上に再現した個人向け開発環境であるMercari miniを構築しているのはSETチームですし、マイクロサービスの基盤や各種ミドルウェアはBackend System エンジニア/SREチームが担当しています。

プロデューサーは具体的に何している?

メルカリでは主に企画やチームの運営をする人たちのことをまとめて「プロデューサー」職と呼称しております。他社ではディレクターと呼ばれることも多いかと思います。 仕事内容は下記のとおりです。 https://open.talentio.com/1/c/mercari/requisitions/detail/4263

エンジニアとプロデューサーの比率は?

比率はチームによって異なりますが、おおよそプロデューサーが1に対してエンジニアが2~3程度になっています。

プロデューサーはコードを書くのか?

基本的にコードは書きません。 プロデューサーにはエンジニアのバックグラウンドがない人も多いですが、各自がSQLを書いてデータを分析したりすることはあります。

開発言語に関すること

f:id:bravewood:20171011144503p:plain

PHPとGoの組み合わせいいですよねー

はい。 どちらも習得の容易性や開発のしやすさが高く、メルカリではPHPで出来た既存のAPIエンドポイントをGoで構築した新たなエンドポイントから叩く構成にすることが多いのですが、Goのレイヤーが増えてもほとんどレスポンスタイムの低下が気にならないくらいGoが速いため、今後も積極的にGoを使っていく予定です。

PHPとGoがメイン?

既存コードはめっちゃPHPで、新しく実装する際はGoが選ばれるシーンが非常に多いです。 PHPのバージョンは7.1で、割とモダンなコードで書かれていると思います。 余談ですが、PHP 7.1化によってレスポンスタイムが全体的に数パーセント、効果の高い箇所だと数十パーセント改善したほか、アプリケーションサーバのCPU使用率が半分近く下がりました。

メルカリってPHPなんですか?

めっちゃPHPです! 意外と知られていなかったのでもう一度言いますが、メルカリのAPIにおけるメイン開発言語はPHPです!!!!

f:id:bravewood:20171008090051j:plain

Rubyを使っているのは知らなかったです

SETの一部で使ってたりします。 またRubyだけではなく、PythonやPerl、Goなど幅広い言語を使っています。

PHPエンジニア募集してますか?

下記の通りめっちゃ募集しています!! 是非宜しくお願いします! https://open.talentio.com/1/c/mercari/requisitions/detail/4244

PHPフレームワークは何を使っていますか?

DietCakeDietcubeをメインで使っています。 基本的にフレームワークは薄いやつを使ってレスポンスタイムをなるべく小さくするように保っています。

PHPフレームワークのリプレイスはやったことありますか?

メルカリ本体のAPIについてはやったことはありません。現在、メルカリAPIは大きなコードベースになっており、一部にはレガシーと思われるようなコードが残ってはいますが、フレームワークが起因となる速度の低下や開発のしづらさが問題になったことはなく、リプレイスする必要性があまり感じられなかったからです。 また、会社の方針として新しいサービスなどは積極的にマイクロサービス化を行うことになっており、その際はサービスごとにフレームワークなどは別途選定しています。 一方で、社内Webツールの一つであるカスタマーサポートツールはフレームワークをDietCakeからDietcubeへリプレイスした経緯があります。この動機としては、独自のJavaScriptフレームワークを使ったSPA(Single Page Application)からサーバーサイドレンダリングに変更し、メンテナンス性やテスタビリティを向上したかったこと、TwigやRoutingの自由さ、PimpleでのDIなどのメリットを受けられるDietcubeを使いたかったからです。

その他

DQNEOさんにGitの本を監修してもらいました!

社内に技術本の著者がたくさんいるのも良いところの一つで、例えばGoなど新しい言語を勉強する際には社内で勉強会を開催してもらうなどメリットを享受できます。 「わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

メルカリ主催で勉強会とか、外部の人呼んでやってたりするんですか?

メルカリとしての勉強会はあまりやっていませんが、在籍者が主催する勉強会などは多くあり、会場を提供させていただくこともあります。 直近ではGo Conference 2017 Autumnの会場提供や社員がスタッフをさせていただきます。 PHPまわりですと、PHPBLTというライトニングトーク大会をよく弊社を会場/スタッフとして開催させていただいています。

メルカリ主催という意味では、勉強会ではないですが、技術発表会として最近Mercari Tech Conferenceを開催させていただきました。

メルカリを利用しようと思うんですけど、発送がめんどくさくて、なかなかね・・・

らくらくメルカリ便ゆうゆうメルカリ便などがあります。 これらを使うと匿名での配送やコンビニ/郵便局からの発送もできますし、集荷サービスもあります。 ぜひお使いください! とはいえ、配送まわりが分かりづらいとか、使いづらいなどの問題は認識しており、ぜひ改善したい項目の一つです。 配送周りを一緒に担当してくれる方も絶賛募集中です!!

まとめ

メルカリはPHPをメインで使っておりPHPエンジニアを募集しています! PHP以外の言語をバックグラウンドにもつ方も多く在籍しています! メルカリは既にほとんど開発が終わったサービスであるというお話も聞くのですが、全然そんなことはなく、最近ではメルカリチャンネルメルカリボックスといった新しいサービス開発も積極的に行っており、またメルカリ自体についても上記の例のように沢山改善したいポイントがあります。 少しでも興味を持たれた方がいれば、ご飯を食べながらお話をさせていただくこともできます。 下記に募集中の職種一覧を掲載しておりますので、是非ご覧いただきご連絡をください!

https://www.mercari.com/jp/jobs/

第1回 Mercari Tech Conf を開催しました

tech.mercari.com

先日からお伝えしていた通り、9/30 (土) にベルサール六本木にて第1回 Mercari Tech Conf 2017 が開催されました。

テーマに Next を掲げ、過去から現在にいたるまでに実現してきたこと、そしてこれから実現する未来について発表しました。

togetter.com

それでは、簡単に各発表を振り返っていきます。

続きを読む

メルカリQA-SETチームが進めているテスト自動化についての質問まとめ

f:id:daipresents2:20171002193559j:plain

こんにちは。メルカリでQA-SETチームのマネージャ兼自動化エンジニアとして、スマホアプリのテスト自動化をぶりぶりしている@daipresentsです。

先日開催された Mercari Tech Conf 2017 において、自動テストのデモ展示を担当させていただきました。当日は多くの方にお越しいただき、スマホアプリの自動化への関心は大きいのかなぁと感じております。

この記事では、テスト自動化についてよく質問されたことをまとめてみたいと思います。どの現場も同じように悩んでおり、試行錯誤している点も似ていたので、ノウハウとして残れば幸いです。

続きを読む