タグ

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

  • メルカリShops の CI/CD と Pull Request 環境 | メルカリエンジニアリング

    こんにちは!ソウゾウの Software Engineer の @dragon3 です。 連載:「メルカリShops」プレオープンまでの開発の裏側の8日目を担当させていただきます。 この記事では、メルカリShops 開発において、日々バリバリに利用されている CI/CD 環境と Pull Request 毎のデプロイ環境について紹介します。 CI/CD 環境 メルカリShops では、CI/CD (テスト・ビルド・デプロイ)やその他自動化のために GitHub Actions を使っており、ほとんどのワークフロー・ジョブを Self-hosted runners で実行しています。 Self-hosted runners は、専用の VPC ネットワーク 内の GCE インスタンス上で動かしており、Managed Instance Group 等を使い、そのプロビジョニングや起動・停止等は

    メルカリShops の CI/CD と Pull Request 環境 | メルカリエンジニアリング
  • Team Topologies in Souzoh | メルカリエンジニアリング

    こんにちは。ソウゾウの Software Engineer / Engineering Manager の@motokieeです。連載:「メルカリShops」プレオープンまでの開発の裏側の4日目を担当します。 4日目は、ソウゾウがどのような体制でメルカリShopsを開発しているかについて、Team Topologiesの解説を交えてお送りします。 はじめに チームの在り方には様々な形がありたくさんの議論が交わされていると思います。自分自身も以前いた会社はもちろん、メルカリに入ってからも旧ソウゾウ、JP(日事業)、メルペイとの関わり合いなど様々なチーム構成を見てきました。 タイトルにあるTeam Topologiesですが、https://teamtopologies.com/ では以下のように定義されています。 ​​Team Topologies is the leading appro

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

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

    メルカリShops の技術スタックと、その選定理由 | メルカリエンジニアリング
  • 巨大モノリスをKubernetesに移行してシングルクラスタ運用にするためにどうしたか | メルカリエンジニアリング

    この問題を解決するため、もともとのコードベースであるところのモノリスもコンテナ化してKubernetesに乗せることにしました。ツールセットの統一をすることでよりシンプルな体系ができ、プラットフォームチームも一つの環境向けの改善に注力できるようになります。 プロジェクトの流れ PoC 計画についてあたため始めた際にちょうどよくUSチーム内でのハッカソンイベントがあったため、それに合わせて試しにKubernetesで動かすデモを発表しました。デモで見せる部分はごく限られたものだったため3人で3日くらい集中して開発したところ動くものができあがりました。 デモの評判は上々でEM、CTOに説明し実際にプロジェクトとしてすすめられることになりました。 現状分析 プロジェクト始動後、まず実施することは現状分析とどう移行するかの設計です。ここでのどの程度システムを把握できるかが計画の精度を決めます。しか

    巨大モノリスをKubernetesに移行してシングルクラスタ運用にするためにどうしたか | メルカリエンジニアリング
  • Engineering Ladder | メルカリエンジニアリング

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

    Engineering Ladder | メルカリエンジニアリング
  • 開発チームとともに歩むSREチームが成し遂げたいこと | メルカリエンジニアリング

    こんにちは、メルカリMicroservices SREチームでEngineering Managerをしている@m4buyaこと渋谷です。 メルカリでは、昨年6月にSREチームの一部をマイナーアップデートし、プロダクトチームに寄り添いSREとしての専門性を活かし信頼性に貢献していくMicroservices SREチームを発足しました。記事では、そうするに至った背景、何を目指しているのか、これまでに出来たこととまだ出来ていないことを振り返り、今後の展望についてご紹介します。 背景 メルカリでは、2015年よりSREチームを立ち上げ、お客様が安心・安全にメルカリサービスを利用していただくためのシステムの信頼性の維持向上に取り組んできました。年々プロダクトとして成長を続け、トラフィックも増加する一方のメルカリサービスに求められるスケーラビリティ向上において、メルカリSREチームは大きな役割を

    開発チームとともに歩むSREチームが成し遂げたいこと | メルカリエンジニアリング
  • OAuth2の次に来ると言われる認可プロトコルGNAPとはなにか | メルカリエンジニアリング

    Merpay Advant Calendar 2020、23日目の記事は、趣味で認証認可をやっている @nerocrux が送りいたします。 最近 GNAP という認可プロトコルのワーキンググループドラフトが出ていて頑張って細かく読みましたので、(次回はいい加減に仕事でやってることについてお話しますが)今回はその GNAP について紹介させてください。 GNAP とはなにか? GNAP は Grant Negotiation and Authorization Protocol の略で、認可のプロトコルです。Justin Richerさんという方を中心に策定しています。作者によると、GNAP の発音は げなっぷ になります。 認可(Authorization)プロトコルと言えば、OAuth 2.0 (RFC6749) が広く知られ、運用されています。GNAP は OAuth 2 の後継とし

    OAuth2の次に来ると言われる認可プロトコルGNAPとはなにか | メルカリエンジニアリング
  • Merpay Frontend のこれまでとこれから | メルカリエンジニアリング

    @1000ch です。Merpay Advent Calendar 2020 の 22 日目を担当します。私は 2018 年 3 月に創業期のメルペイにジョインしまして、もう 2 年 10 ヶ月が経ったことになります。2020 年は新型コロナウイルスで何かと大変な状況が続いていますが、今年の頭からメルカリ側のプロジェクトにも関わっていまして、メルカリとメルペイ両方の Web に関わっています。メルカリ側の話はまた別の機会に書かせてもらうとして、今回はメルペイの Frontend の話をします。 チーム組成のこれまで 入社したのは 2018 年 3 月ですが、メルペイに Frontend チームが組成されたのは 2018 年 7 月で、PM/EM/TL体制が導入されたタイミングでした。そこから格的に Merpay Frontend の組成に関わってきました。…と言いたいところですが、当は

    Merpay Frontend のこれまでとこれから | メルカリエンジニアリング
  • 決済サービスを閉じるときのやることリスト | メルカリエンジニアリング

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

    決済サービスを閉じるときのやることリスト | メルカリエンジニアリング
  • DevSecOpsとは何か — 導入する組織が増加している理由 | メルカリエンジニアリング

    Mercari Advent Calendar 2020 の15日目は、メルカリ Product Security チームの Gloria Chow がお送りします。 こんにちは、Product Securityチームの@gloriaです。以前、オープンソースとして公開しているTestdeckという、マイクロサービスの自動化テストのための社内ツールについて記事を書きました。 今回は、2020年のAdvent Calendarの記事として、DevSecOpsについてお話をしたいと思います。近年、耳にする機会の多い話題の一つなので既にご存じの方もいらっしゃるかもしれませんが、DevSecOpsの基的なコンセプト、注目されている理由、よくあるチャレンジとメルカリにおけるDevSecOpsの実践事例を紹介したいと思います。 DevSecOpsとは? DevSecOps以前から提唱されているDev

    DevSecOpsとは何か — 導入する組織が増加している理由 | メルカリエンジニアリング
  • Cloud Spanner の実行計画の活用に関する取り組み | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の11日目は、メルペイ Solutions Team の apstndb がお送りします。 色々な場所で既に書かれている通り、メルペイはサービス開始当初から主要なデータベースとして Google Cloud Platform(GCP) の DBaaS である Cloud Spanner を使っています。 この記事ではメルペイにおける Cloud Spanner の実行計画の活用のために取り組んだことについて紹介します。 Cloud Spanner の特性である外部一貫性による強い一貫性保証、レプリケーションによる高い可用性、水平分散による高いスケーラビリティ、リレーショナルデータモデルによるスキーマ、フルマネージドなことによる低い運用負荷などは多くの業界にとってメリットがあるものですが、金融サービスであるメルペイも例外ではありません。

    Cloud Spanner の実行計画の活用に関する取り組み | メルカリエンジニアリング
  • チームで運用と戦い、おいしい牛カツと出会った話 | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の 9 日目は、バックエンドエンジニアの @sou がお送りします。 今日は少し泥臭く、この一年チームを成長させながら運用と戦ってきた話を書こうと思います。 私の所属するチームは加盟店情報の管理を担っており、その性格から運用に伴う作業が数多く発生します。 どんなプロダクトにも運用はあると思いますが、このチームが直面した運用の負荷はそのボリュームと複雑さから、私のキャリアの中でも最大と言えるものでした。 その運用に私たちがどのように立ち向かい改善を行ってきたか、みなさまの参考になれば嬉しく思います。 なぜそんなしんどい運用を頑張っているのか、メルペイでのやりがいや楽しさ、頑張った結果の美味しい牛カツと日酒のお店に出会えた話も添えさせていただければと思います。 ここで言う運用とは、事業を進めていく上でさまざまな場面で発生する、自チーム以

    チームで運用と戦い、おいしい牛カツと出会った話 | メルカリエンジニアリング
  • 本番稼働中の Spanner にダウンタイム無しに57時間かけてインデックスを追加して得た知見 | メルカリエンジニアリング

    こんにちは! Mercari Advent Calendar 2020 の6日目は、メルカリ Notification チーム/Software Engineer の tarotaro0 がお送りします。 Notification チームは、メルカリのアプリ内通知やメール、プッシュ通知などを扱うマイクロサービスの開発・運用を担当しているチームです。いわゆるバックエンドアプリケーションの開発と、そのアプリケーション・サーバー及びデータベースなど関連サービスの運用を行っています。 Notification チームでは、データベースに Google Cloud Spanner (以下 Spanner) を採用しています。メルカリにおける通知は社内でも特に大きいトラフィック・データ量を扱う領域で、秒間数千にも及ぶリクエストに対応出来るスケーラビリティや高可用性などが求められます。Spanner

    本番稼働中の Spanner にダウンタイム無しに57時間かけてインデックスを追加して得た知見 | メルカリエンジニアリング
  • Xcode PreviewsからSnapshotテストを自動生成する | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の6日目は、メルペイiOSチームの kenmaz がお送りします。 こんにちは。merpayのiOSチームのkenmazです。 この記事では「Xcode PreviewsからSnapshotテストを自動生成する」というテーマで、メルペイiOSチームで採用しているiOSアプリの開発スタイルや自動テストについての取り組みの現状、そこで直面した課題、そしてその解決方法について、具体例を交えながら紹介していきます。 背景 Xcode Previewsを用いた開発 メルペイのiOSチームでは、iOSアプリのほとんどのViewやUI部品をコードで記述し、Xcode Previewsを使ってレイアウトの確認を行う、という開発スタイルを採用しています。これによりiOS Simulatorなどを起動することなく、さまざまな状態のViewをXcode上で

    Xcode PreviewsからSnapshotテストを自動生成する | メルカリエンジニアリング
  • 0からRust/Wasmを使ってブラウザで動くバーコードリーダを作ってみた話 @_mkazutaka | メルカリエンジニアリング

    こんにちは!Mercari Advent Calendar 2020 の3日目は、メルカリWebPlatformチーム/Software Engineerの@_mkazutaka がお送りします。普段はメルカリのウェブ周りの開発をしておりGoPHPTypeScriptを書いています。 メルカリでは半期に一度エンジニアのためのお祭りMercari Hack Weekを開催しています。この記事では、第2回Mercari Hack Weekから筆者が取り組んでいるRust/Wasmを使ったバーコードリーダについて紹介します。 こちらプロダクションには出してるものでありません。お願いすればプロダクションへのリリースを許してもらえたと思いますが、筆者自身が出さない選択肢を取ったのでそれも含めて紹介します。 (注釈: いくつかの画像処理の話が出てきますが、筆者は画像処理の専門家でもなければ大学院で

    0からRust/Wasmを使ってブラウザで動くバーコードリーダを作ってみた話 @_mkazutaka | メルカリエンジニアリング
  • 料率計算における小数点数の扱いについて | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の3日目です。 メルペイでバックエンドエンジニアをしている iwata です。 メルペイスマート払いの開発をしている Credit Design というチームに所属しています。 私は2019年の入社以来、「メルペイスマート払い(定額払い)」(以下、定額払い)の開発を担当しており、今年の7月にようやくリリースすることができました。 この定額払いの手数料計算のために、「1万分の1を1とする単位」であるベーシスポイントを扱うGo言語のパッケージ go.mercari.io/go-bps を作成しました。 ちょうど1年前に、 mercari.go #12 で「料率計算における小数の扱いについて」として発表しましたが、当時はオープンソースとして公開していませんでした。 今回オープンソースとして公開しましたので、改めてパッケージを紹介します。 料

    料率計算における小数点数の扱いについて | メルカリエンジニアリング
  • PythonとType Hintsで書くバックエンド | メルカリエンジニアリング

    こんにちは、AIチーム所属の@shidoです。CRE (Customer Reliability Engineering) 領域でMLを扱っています。 みなさんはPython番コードを書くことについてどうお考えでしょうか。「研究/分析以外には使いたくない」「遅い」「動的型付け言語を番用に使いたくない」といった声が聞こえてきそうです。 しかしながら機械学習サービス(または機械学習サービスのためのサービスなど)を作りたい場合、「学習に利用したPython用のライブラリを使用したい」「Pythonでやっていた分析と同じことを番環境内でもやりたい」など、Pythonでバックエンドを実装したくなることがあると思います。 この記事ではtype hintsを付けながらPythonを書くことで、GoJavaのようなサーバーサイドでよく使われる言語と可読性や保守性、場合によっては型安全性も同じレベ

    PythonとType Hintsで書くバックエンド | メルカリエンジニアリング
  • マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング

    この記事はMERPAY TECH OPENNESS MONTHの15日目の記事です。 こんにちは。メルペイのPayment PlatformチームでPaymentServiceの開発を担当するエンジニアの @foghost です。 メルペイではマイクロサービスのアーキテクチャで決済システムを開発しています。その中でPaymentServiceは決済トランザクション管理の基盤サービスとして、下位層のサービス(外部サービスも含め)が提供する各種決済手段を利用して、上位層のサービス(メルカリ、NFC,コード払いなど)に必要な決済フローを共通APIとして提供しています。PaymentServiceが提供する決済処理に複数のサービスを跨いでお金の動きを正確に管理する必要があるので、作り始めた頃から決済トランザクション管理を最も重要な課題として、サービスを跨いでもデータの整合性が取れる仕組みを作ってき

    マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング
  • マイクロサービスのQA・セキュリティ自動化テスト社内ツール「Testdeck」をOSS化しました! | メルカリエンジニアリング

    こんにちは。Product Securityチームの@gloriaです。前回、自動化テストエンジニアからセキュリティエンジニアへのキャリアチェンジについて記事を書きました。 今日は、最近OSSとして公開した社内ツールのプロジェクトについてお話をしたいと思います! 「Testdeck」とは? TestdeckはGolangで書いたgRPCマイクロサービスのインテグレーションテスト、エンドツーエンドテスト(E2E)とセキュリティテストの自動化ツールです。以下の機能を提供しています: gRPCとHTTPエンドポイントのインテグレーションテスト・E2Eテスト ファズテスト 悪意のあるペイロードの注入(Burp SuiteのIntruderという機能のように) gRPCとHTTPリクエストのユーティリティメソッド CharlesやBurp Suiteなどのデバッギングプロクシーに接続し、リクエストの

    マイクロサービスのQA・セキュリティ自動化テスト社内ツール「Testdeck」をOSS化しました! | メルカリエンジニアリング
  • 「プログラミング言語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完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング