Mercari Engineering Blog

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

社内の面倒な手作業はZapierにやらせようーーノンプログラマーでも業務自動化ができるツールを導入してみて

これは Mercari Advent Calendar 2017 22日目の記事です。

こんにちは、メルカリのQA-SETチームで自動化をぶりぶりしている tadashi0713 です。

前回は業務自動化の1つとして、Seleniumを使ったブラウザ操作自動化についてご紹介しました。

tech.mercari.com

コメントや反応を見ますと、最近はRPA(Robotic Process Automation)をはじめとした業務自動化に関心が高い印象を受けました。

メルカリでは1ヶ月ほど前にZapierというツールをTeam Planで導入しました。

zapier.com

このツールを使って、社員がより簡単に業務自動化ができるようにしようとしています。

今回はZapierを導入した背景や社内での使われ方、またどう社員に使ってもらえるようにしたか、などについてご紹介したいと思います。

続きを読む

カラクリ メルカリ カウル - iOS版アプリの週1アップデートを支えるAutomationとKarakuri

Mercari Advent Calendar 2017 の21日目はメルカリ カウルチームのiOSエンジニアの@motokieeがお送りします。

はじめに

メルカリ カウルは今年の5月のローンチしたエンタメ専用のメルカリ姉妹アプリです。立ち上げから半年ほどが経過し、日々サービスの改善を続けています。

iOS版メルカリ カウルはこの7ヶ月で30回アップデートしており、ほぼ週に一度はアップデートしていることになります。もちろん規則正しく週1でリリースをしているわけではないのですが、開発サイクルの速さがお分かりいただけるのではないでしょうか。

f:id:motokiee:20171220154056j:plain:w300

現在メルカリ カウルのiOS版はほぼ1人で開発をしています(自分の他にもう1人iOSエンジニアはいるのですが、PJの都合上BIがメインの業務となっています)。

少ない人数でも改善を続けることができているのは、メルカリエンジニアの行動指針の1つであるAutomation, Karakuriに基づいて開発に関わる業務を効率化をしているからです。

今回はiOS版メルカリ カウルの高速アップデートを支えているAutomation, Karakuriについてご紹介いたします。

続きを読む

Mercari BOLD Scholarship をはじめる話

f:id:ikkou:20171220165404j:plain

この記事は Mercari Advent Calendar 2017 20日目の記事です。昨日は @_hitima の「Mercari Web版 に Workbox で Service Worker を導入する話」でした。本日は研究開発組織の @ikkou が Mercari BOLD Internship に続く新しい企画 Mercari BOLD Scholarship をはじめる話をします。

メルカリにジョインするきっかけとなった xR(VR/AR/MR) のことや、研究開発組織については、この記事が公開される翌々日に メルカリ新研究開発組織オープニングイベント が開催されるので、そこから段々と明らかにしていく予定です。

続きを読む

Mercari Web版 に Workbox で Service Worker を導入する話

Mercari Advent Calendar 2017 19日目は フロントエンドチームの @_hitima が JP Web版 にてサイトのオフライン対応を検証している話をします。

メルカリのWeb版強化への道

メルカリは iOS と Android のアプリ版のほかに Web ブラウザから利用可能な Web 版があります。アプリ版と機能面で差はあるものの、購入から出品まで一通りのことはできるようになっています。本エントリではWeb版の強化施策として現在進行中の Service Worker 導入について解説します。

Facebook のザッカーバーグ CEO はかつてこのような事を言いました。

When I’m introspective about the last few years I think the biggest mistake that we made, as a company, is betting too much on HTML5 as opposed to native… because it just wasn’t there.

iOS 向けのアプリを HTML5 ベースにしたのは失敗だったと。もう5年以上も前の話ですね。

Facebook のこの有名な話は、パフォーマンスが起因する話が主だったと思いますが、Service Worker , App Shell Model , PRPL Pettern などを駆使した Google 提唱する Progressive Web Apps と言う HTML / JS / CSS だけでほぼ構成された新しいスタンダードが台頭してきていて、そのほとんどが今、解決されようとしています。

PWA とよく呼称されますね。 主にモバイルユーザーの体験向上を目指す技術の集合体を指す名前だと私は理解しています。(マーケティング用語だと言う方もいます)

弊社会長の山田も、Twitter でこのようなことをつぶやいております。

f:id:h1tima:20171217224744p:plain

PWA のような比較的新しい構成の技術スタックが必要になってくることもあり、今回はサイトのオフライン対応を検証して、お客さまにオフラインでもメルカリを楽しんでいただくべく、導入検討してみることにしました。

続きを読む

デッドロックおじさん戦記

Mercari Advent Calendar 2017 の18日目です。

こんにちは。メルカリJPのサーバーサイドエンジニアの@Hirakuです。最近はメルカリNOWの立ち上げに関わっておりGoとPHPを行ったり来たりしています。

今回はネタとしては地味ですが、2017年に遭遇した、MySQLのデッドロックの話をしようと思います。 これまでも何度か話されている通り、メルカリのコア部分は今でもPHP + MySQLで構成されており、複雑なトランザクションを含む処理が各所に存在しています。そのため、意図せずしてデッドロックを作ってしまうことがあり、場合によっては重大な問題につながります。

今年は本当にデッドロックに関するトラブルに多く遭遇し、すっかり「デッドロック絶対に許さないおじさん」みたいになっていました。

事例1)出品者と購入者

デッドロックと言われてもピンと来ない方もいらっしゃるでしょう。 まずは小手調べです。

メルカリはC2Cのフリマアプリですので、お客さまは出品も購入もできます。 ここで、あるAPIの中に、

「(1)出品者の情報を更新し、(2)購入者の情報を更新する」

という処理が書かれていたとしたらどうでしょうか? もちろん、処理は1トランザクションの中で行われます。以下のコードに何か問題はあるでしょうか?(制限時間5秒)

<?php
// 擬似コード
doTransaction(function (User $seller, User $buyer) {
    $seller->update();
    $buyer->update();
});
続きを読む