タグ

ブックマーク / engineering.mercari.com (43)

  • メルカリShops 注文システム反省会 | メルカリエンジニアリング

    こんにちは。ソウゾウ Software Engineer の @sou です。連載:メルカリShops 開発の裏側 Vol.2 の6日目を担当させていただきます。 この記事ではメルカリShops 注文システム反省会として、リリースから半年を迎える中で注文システムにどのような問題が起こり、どのような改修が必要になったかを振り返ってみたいと思います。 注文システムの概要 メルカリShops はマイクロサービスで構成されており、注文の受付を行うために様々なマイクロサービスにまたがって API を呼び出す必要があります。 まずは購入画面をご覧ください。 メルカリShops の購入画面 「購入する」を押すとローディングアイコンが表示されて待ちに入り、クライアントがレスポンスを受け取ると購入の完了を示す画面が表示されます。 一方裏では購入を完了させるまでに在庫確保や決済など様々な操作を行っています。

    メルカリShops 注文システム反省会 | メルカリエンジニアリング
  • GitHub上のsensitive dataを削除するための手順と道のり | メルカリエンジニアリング

    Advent Calendar day 7 担当の vvakame です。 予告では Apollo Federation Gateway Node.js実装についてポイント解説 としていましたが、社内各所のご協力によりAdvent Calendarの私の担当日に間に合う形で公開できる運びとなりました。そのため告知とは異なりますが GitHub上のsensitive data削除の手順と道のり をお届けしていきたいと思います。 メルペイVPoE hidekによるday 1の記事で振り返りがあったように、今年、弊社ではCodecovのBash Uploaderに係る情報流出という事案が発生しました。当該インシデント対応において、プレスリリースにも記載のある通り、ソースコード上に混入してしまった認証情報や一部個人情報などの機密性の高い情報(sensitive data)について調査を実施し、対応

    GitHub上のsensitive dataを削除するための手順と道のり | メルカリエンジニアリング
  • ソウゾウのソフトウェアエンジニア選考ガイドを公開しました | メルカリエンジニアリング

    こんにちは。ソウゾウのソフトウェアエンジニアの@naopr です。 ソウゾウでは、10/7にメルカリShopsの格提供を開始しました! これを機にサービス開発を今まで以上に加速するため、より多くのエンジニアにソウゾウのことを知っていただこうと思いソフトウェアエンジニアの選考ガイドをGitHub上で公開することとしました。 https://github.com/mercari/souzoh-recruitment/blob/master/guide_software_engineer.md このエントリでは、選考内容の公開に至った背景と思い、公開にあたってこだわった点をお伝えできればと思っています。 公開に至った背景と思い 9月にソウゾウが開催したTech Talkにご参加いただいたエンジニアの方とカジュアル面談をする機会があったのですが、その中で「コーディングテストはどのような内容を何ヶ

    ソウゾウのソフトウェアエンジニア選考ガイドを公開しました | メルカリエンジニアリング
  • メルカリShops の技術スタックと、その選定理由 | メルカリエンジニアリング

    こんにちは。ソウゾウの Software Engineer (CTO) の @suguru です。連載:「メルカリShops」プレオープンまでの開発の裏側の1日目を担当させていただきます。 7月末にメルカリShopsという新しいサービスが公開されました。メルカリShops は、2021年1月にメルカリのグループ会社として設立したソウゾウが新たに立ち上げたサービスです。 この記事では、メルカリShops を作るにあたり、どういった技術、アーキテクチャを選定したのか、その背景と意思決定をまとめて共有したいと思います。 monorepo まず最初にプロジェクトをスタートしたときに、サービスのリポジトリを作るのですが、迷わず monorepo による構成を選択しました。monorepo は、システムを構成する複数のコンポーネントの独立性を保ちつつ、全ての構成を1つのリポジトリで管理する手法です。今

    メルカリShops の技術スタックと、その選定理由 | メルカリエンジニアリング
  • Engineering Ladder | メルカリエンジニアリング

    エンジニアの成長段階ごとに期待される行動を明文化

    Engineering Ladder | メルカリエンジニアリング
  • 決済サービスを閉じるときのやることリスト | メルカリエンジニアリング

    Merpay Advent Calendar 2020の20日目は、メルペイProduct EngineeringチームのVP of Engineeringを担当しているnozaqがお送りします。 2020年はメルペイEngineeringチームとして業務しながら、一方で年初からOrigami PayというQRコード決済サービスの提供終了に伴うシステム停止業務を計画・実行してきました。サービスの終わらせ方について詳しく説明されることは中々ないと思ったので、投稿では決済という外部影響が大きい種類のサービスを終了するにあたり、どのような検討がなされたのかを事例としてお伝えできればと思います。 取り組んだこと 決済サービスはお支払いを行う一般のお客さま・お支払いを受け付ける加盟店様・システム連携している金融機関様やパートナー様など多くのステークホルダーが存在します。また店頭でのお支払い方法をご

    決済サービスを閉じるときのやることリスト | メルカリエンジニアリング
  • 「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。稿は Merpay Tech Openness Month の11日目の記事です。 「プログラミング言語Go完全入門」の期間限定公開のお知らせでも書いたように、メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに8回開催し100人以上の方に参加していただきました。 また、Gopher道場の動画や資料はGopher道場 自習室として誰でも利用できるようになっており、現時点で300名以上の方が利用されています。 Gopher道場の資料のベースになっている「プログラミング言語Go完全入門」は、2020年7月31日までの限定公開になっていましたが、日より公開期限を撤廃し、完全公開することになりました。 また、日8月31日から始まる「Online Summer Int

    「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング
  • Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜 | メルカリエンジニアリング

    この記事は、Merpay Tech Openness Month 2020 の6日目の記事です。 メルペイでBackendエンジニアをしている柴田(@yoshiki_shibata)です。この記事では、Go言語のtestingパッケージに用意されている並列化の機能について説明します。 Go言語では、テストコードを作成するためのtestingパッケージが用意されています。一般に開発するソフトウェアの規模が大きくなるに従って、作成されるテストコードの量も多くなり、すべてのテストが終了するまでの時間も長くなっていきます。特に、データベースへアクセスするようなテストでは、データベースへの通信時間がテスト時間の多く占めますので、テストコードを逐次実行するよりは並列実行することで、テスト時間を短縮できます(厳密には用語「並行」ですが、t.Parallel()メソッドの説明なので、この記事では用語「並列

    Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜 | メルカリエンジニアリング
  • 「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。 メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに7回開催し100人以上の方に参加していただきました。 自社でもGoを基幹技術として使っている背景があり、今後もGoコミュニティへの貢献は継続していきます。しかしながら、新型コロナウイルス感染症の状況を踏まえて直近のGopher道場開催を見合わせています。 Goを学ぶ場を提供することでGoに触れる方を増やしたいと考えている筆者にとっては、 開催できないことが非常に残念です。そこでエキスパートチームでは違う形で学ぶ場を提供できないかと考え、Gopher道場で使用している資料のベースになっている「プログラミング言語Go完全入門」を期間限定で公開することにしました。 bit.ly bit.ly 追記 3/18:PDF

    「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング
  • Mercari Microservices Platformの進捗(2019年) | メルカリエンジニアリング

    Microservices Platform TeamでTech leadをしている@deeeeeeetです. 昨年のMTC2018ではMicroservices Platformチームの立ち上げから1年で僕らが取り組んできたことを紹介しました. speakerdeck.com 具体的にはStranglerパターンによるMonolithからMicroservicesへの段階的なリクエスト移行を行うためのAPI gatewayの開発や,Microservicesのインフラのセットアップを簡単にしサービス開発チームのSelf-service化を進めるためのStarter-kitの開発,GoでのMicroservicesの開発を高速で始めるためのTemplateプロジェクトの開発,Spinnakerの導入などについて紹介しました. これらはPlatformとして最低限の機能を整備したにすぎず,さ

    Mercari Microservices Platformの進捗(2019年) | メルカリエンジニアリング
  • マルチモーダルNeural Architecture Searchを用いて出品違反検知モデルの作成を高速化したお話 | メルカリエンジニアリング

    この記事は先日公開されたこちらの記事の日語版です こんにちは、AI Engineeringチームでインターンをしている @dkumazawです。今日は、出品違反検知モデルの開発をマルチモーダルなNeural Architecture Search(以下、NAS)システムを使って高速化したお話をご紹介します。 概要 メルカリでは月間利用者数が1000万人を超える中、利用規約に違反する出品を即座に発見し削除するニーズが高まっている。その中で、出品画像や紹介文など、複数モダリティのデータを最大限に活用して高い精度で違反を発見するシステムを開発することがAIチームには求められている。しかし、(1)マルチモーダルなモデル開発では単一モダリティの場合と比較してベストプラクティスが確立されておらず、(2)また規約や関連法令等の変化に応じて違反カテゴリが追加・変更される場合にもスケーラブルに対応する必要

    マルチモーダルNeural Architecture Searchを用いて出品違反検知モデルの作成を高速化したお話 | メルカリエンジニアリング
  • メルペイでのSpannerとの戦いの日々 | メルカリエンジニアリング

    こんにちは、メルペイのバックエンドエンジニアの @kazegusuri です。 メルペイではメインのデータベースとしてGoogle Cloud Spannerを利用しています。 マイクロサービスによっては秒間数千リクエストをSpannerで処理しています。 いかにSpannerをスケールできるようにして安定させられるかが会社全体として重要になっています。 記事では数ヶ月間戦ってきたSpannerのレイテンシが高くなる問題とその解決法について紹介したいと思います。 社内への調査報告も含めて書いているため、かなり詳細で長い内容になっています。 なおこの問題の大部分はGoSpannerを使ったときにだけ発生する問題のため、Javaなどの他の言語では該当しない可能性があります。 CreateSession問題 ここで紹介しなくても良いくらい基的なところですが、CreateSessionが非常

    メルペイでのSpannerとの戦いの日々 | メルカリエンジニアリング
  • メルカリの写真検索を支えるバックエンド | メルカリエンジニアリング

    メルカリのAI EngineeringでTech Leadを務めている中河です。今回は3/18に正式リリースされた「写真検索機能」を支えるバックエンド・インフラをシステム側からの視点でご紹介します。 写真検索とは 所謂、画像検索機能で商品名を知らなくても画像から商品を検索できる機能の事です。詳しくは下記の公式リリースをご覧ください。 about.mercari.com 基的な写真検索の仕組みは、Deep Neural Networks (DNN)を使用して商品画像から特徴ベクトルを取得し、取得した特徴ベクトルをApproximate Nearest Neighbor Index(ANN Index)に追加して画像indexを構築。 検索時には同じく商品画像からDNNを介して特徴量ベクトルを取得し、ANN Indexから検索します。 アーキテクチャの概要 Figure1 上記がアーキテクチ

    メルカリの写真検索を支えるバックエンド | メルカリエンジニアリング
  • バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング

    こんにちは。メルペイで、決済・振込申請のバックエンドソフトウェアエンジニアをしている id:koemu です。 今日は、バッチ処理を行う理由について、考察を深めて設計に活かしていく話をしたいと思います。 はじめに バッチ処理とは、ある決まったタイミングで1つのプログラムが複数のデータを 一括処理 することを指します。この反対の言葉として、オンライン処理があります。オンライン処理とは、お客様の操作を初めとしたイベントをもとに 逐次処理 されるものです。OLTP(Online Transaction Processing)とも言います。 エントリでは、バッチ処理を採用するにあたり、どういったユースケースが適切なのかを整理して、今後のソフトウェアの設計の指針にできることを目指しています。今回は、「バッチ処理を採用するとき」と「バッチ処理の設計」の2つについて取り上げます。 バッチ処理を採用する

    バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング
  • E2Eテストのテスト結果を可視化することで気づきが生まれた | メルカリエンジニアリング

    メルカリの自動化&品質保証グループ(Automation & QA Group:通称AQA)の おれたま@AHA_oretama です。 私は普段、テスト自動化やCI / CD を主に行っています。 今回は、Appium×Android E2Eテストのテスト結果の見やすさを改善し、テスト結果を可視化することで気づきが生まれた話について、紹介していきたいと思います。 テスト結果の見やすさ、可視化の重要性について いま使っているテストレポートの課題 Allure Framework 並列化した分だけレポートも分かれてしまうことへの対処 スクリーンショット、スクリーンレコード以外のアタッチメントを追加することができないことへの対処 過去のテスト結果と比較できないことへの対処 他の改善点 テストのタイムラインが見える トレンドも表示できる Looker 生まれた気づき 課題 終わりに テスト結果の

    E2Eテストのテスト結果を可視化することで気づきが生まれた | メルカリエンジニアリング
  • TB越えのMySQL 巨大テーブルを 1日で BigQueryへLOADする | メルカリエンジニアリング

    こんにちは!! 私はメルカリでSREをしている k-oguma ( ktykogm ) です。 ちょうど1年くらい前にジョインしました。 よろしくお願いします! 今日は、タイトルの件で対応した方法をご紹介したいと思います。 それはある日突然やってきた TL;DR BigQueryへLOADさせる方法を考える 初期の検討 見直し Embulk Embulk 説明 Digdag Digdag 説明 Digdag呼び出し処理 Dry-run いざ、実行 補足: もっと高速化させたいなら 終わったあとは 最後に 参考にしたURL それはある日突然やってきた ある日、ETL作業 (データ分析基盤運用)の依頼がUSチームからやってきました。 要件は次のようなものでした。 1.4TB サイズの MySQL innodb tableを1つをBigQueryに上げる 約1年分。期間指定。 期限数日、なる早

    TB越えのMySQL 巨大テーブルを 1日で BigQueryへLOADする | メルカリエンジニアリング
  • GraphQL Summit 2018 に参加してきました - Mercari Engineering Blog

    フロントエンドエンジニアの @vwxyutarooo (Yutaro) です。11月の7-8日に San Francisco にて行われた GrahpQL Summit 2018 に参加してきましたのでその様子をお伝えします。 フロントエンドからは私とチームメイトの @carlos の2名、バックエンドからも3名参加しました。 現在のメルカリ Web では GraphQL は使われていませんが、アーキテクチャを刷新する Re-Architecture というプロジェクトにおいて GraphQL を使用しています。 トークの内容は YouTube にて公開される予定ですので、全体の雰囲気と私が気になったトークをいくつか紹介します。 GraphQL Summit とは GraphQL Summit 2018 GraphQL Summit は2016年から始まり今年で3年目となります。Graph

    GraphQL Summit 2018 に参加してきました - Mercari Engineering Blog
  • 「必要最低限のルール」に何を望む? 徳丸浩×メルカリ八木橋のセキュリティ対談 | メルカリエンジニアリング

    きっかけは、メルカリのセキュリティエンジニア・八木橋優のFacebook投稿でした。 対談のきっかけになった、メルカリ八木橋のFacebook投稿 「徳丸」とは、Webセキュリティの第一人者であり、現在は情報システムの監査やコンサルティングを行うEGセキュアソリューションズ株式会社の代表取締役である徳丸浩さんの著書についた愛称。かくして、社内メンバーでひっそりと行う予定だった輪読会は、徳丸さんというビッグゲストを迎えて開催されることになったのです。 同じWebセキュリティ界隈としてつながりはあったものの、それほど深いやりとりはなかったという2人。ですが、今回の輪読会をきっかけに、甘いものをべながらじっくり話し合う対談が実現しました。 ▷メルカン記事バージョンはこちら mercan.mercari.com 「より内側」にいるインハウスならではのセキュリティ体制 徳丸:今日は「メルカリでは

    「必要最低限のルール」に何を望む? 徳丸浩×メルカリ八木橋のセキュリティ対談 | メルカリエンジニアリング
  • Custom Controller で Kubernetes の上の TLS 証明書を監視する | メルカリエンジニアリング

    こんにちは!Summer Internship 2018 にて Microservices Platform Team でインターンをしていた @everysick です*1。この記事ではインターン期間中に実装を行い、OSS として公開した Certificate Expiry Monitor Controller の紹介をします。 github.com 背景 有効期限監視の限界 TLS 証明書の運用では有効期限が来る前に TLS 証明書を更新をする必要があります。 これまでのメルカリでは mackerel.io の URL 外形監視機能に登録したエンドポイントの TLS 証明書を監視することで、有効期限が切れる前に通知をする運用を行っていました。 しかしながら、Microservices Platform 環境では日々新しいサービスが立ち上がっているため、従来の運用を適用するのであれば下

    Custom Controller で Kubernetes の上の TLS 証明書を監視する | メルカリエンジニアリング
  • Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング

    はじめに メルペイ エキスパートチームのtenntennです。 メルカリグループでは、毎週金曜日にGo Fridayという社内勉強会を開催しています。 毎週やっているとそれなりに知見が溜まってくるので、定期的に”こぼれ話”としてブログを書こうという話になりました。 今回の記事では、先日のGo Fridayで話題にあがった非公開な機能を使ったテストについて扱いたいと思います。 なお、Goにおけるテストの手法やテストしやすいコードの書き方については、GopherCon 2017でも発表があったmitchellhさんの”Advanced Testing with Go”(スライド/動画)が参考になります。テーブル駆動テストやテストヘルパーなど非常に勉強になるので、まだ見たことのない方はぜひスライドや動画をご覧ください。 TL;DR Goのテストではテスト対象とテストコードを別パッケージにできる

    Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング
    hyaknihyak
    hyaknihyak 2018/08/08
    #golangtokyo