タグ

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

  • Merpay & Mercoin Tech Fest 2023 セッション書き起こしまとめ | メルカリエンジニアリング

    Merpay & Mercoin Tech Fest 2023は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りで、2023年8月22日(火)からの3日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。 今回、より多くの方に知ってもらい役立ててもらうため、Merpay & Mercoin Tech Fest 2023の全セッションを書き起こした記事を用意しました。セッションがたくさんあるので、その記事リンクまとめを作成したのが記事です。お役に立てば幸いです。 ▼Merpay & Mercoin Tech Fest 2023 書き起こし一覧 ※各記事にYoutubeのセッション動画が埋め込まれています。 Author Session Title Keynote Shun

    Merpay & Mercoin Tech Fest 2023 セッション書き起こしまとめ | メルカリエンジニアリング
    k1LoW
    k1LoW 2023/10/24
  • Goにおける静的解析のモジュール化について - Mercari Engineering Blog

    Mercari Advent Calendar 2018 の16日目はメルペイ エキスパートチームの@tenntenn お送りします。 この記事では、Goの静的解析の新しいムーブメントであるgolang.org/x/tools/go/analysisを使ったモジュール化について解説したいと思います。 「静的解析は関係ないや」と思って、タイトルを見てブラウザのタブを閉じようと思ったかもしれませんが、ほとんどのGopherには無関係ではないと思いますので、ぐっと我慢してしばらく間お付き合いください。 静的解析のモジュール化とは Goにはgo vetやgolintなど静的解析ツールが多数あります。 静的解析ツールを用いることで、プログラムを実行せずにバグになりうる箇所を検出することができます。 実際に、コードレビューを行う際にCIで静的解析ツールを実行している方も多いかと思います。 Goは標準で

    Goにおける静的解析のモジュール化について - Mercari Engineering Blog
    k1LoW
    k1LoW 2023/09/11
  • Goの抽象構文木(AST)でBoilerplate Codeを自動生成する

    この記事は、Merpay Advent Calendar 2022 の19日目の記事です。 こんにちは。メルペイのPayment PlatformチームでPaymentServiceの開発を担当するエンジニアの @huhu です。主にPaymentServiceに関わるマイクロサービスの開発や運用をしています。 この記事では、私のチームで行ったGoの抽象構文木(AST)でコードを自動生成する取り組みに関して紹介します。 背景 PaymentServiceは決済トランザクション管理の基盤サービスとして、エッジレイヤーのサービス(外部サービスも含め)が提供する各種決済手段を利用して、表層のサービス(メルカリ、NFC、コード払いなど)に必要な決済フローを共通APIとして提供しています。我々の提供している多彩な決済手段を表すEntityが存在していて、例えば支払い方法ではお客さまの残高の決済を表す

    Goの抽象構文木(AST)でBoilerplate Codeを自動生成する
    k1LoW
    k1LoW 2023/08/17
  • マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング

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

    マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング
    k1LoW
    k1LoW 2023/07/12
  • メルコイン決済基盤における分散トランザクション管理 | メルカリエンジニアリング

    この記事は、Merpay Tech Openness Month 2023 の7日目の記事です。 はじめに こんにちは。メルコイン Payment Platform チームの @sapuri です。 メルコインではマイクロサービスアーキテクチャを採用しており、お客さまによりアプリの操作が行われると、それぞれのマイクロサービスを横断してリクエストが処理されます。 メルコインの Payment Platform は、お客さまの残高の管理や各種帳簿の作成などの決済事業のための基盤となる仕組みを提供しています。 そのなかで、Payment Service は決済トランザクションを管理するサービスとして、下位層のサービスが提供する各種決済手段を利用して、上位層のサービスが共通して利用できる決済 API を提供しています。 この記事ではマイクロサービスアーキテクチャにおける分散トランザクション管理の課

    メルコイン決済基盤における分散トランザクション管理 | メルカリエンジニアリング
    k1LoW
    k1LoW 2023/06/16
  • メルカリiOSアプリのBazelを使った高速・高信頼性ビルド | メルカリエンジニアリング

    ここまでBazel の利点をいくつか紹介しましたが、採用には懸念点もありました。次のセクションからは、どのような懸念があったか、それをどのように解決したのかを紹介します。 Xcode 統合 Bazel と Xcode の統合は Bazel の採用においてもっとも大きな懸念でした。 Xcode はビルドシステムと密結合したやや特殊な IDE なので、外部ビルドシステムとの統合が難しいのです。特に indexing や LLDB デバッグを正しく動作させるのは困難でした。 統合とはつまり、Bazel によるビルドのアウトプットを利用して Xcode がサポートする動作を再現することを意味していて、主に下記のような要件を満たす必要があります。 Bazel のビルド構成ファイル群を解析して Xcode プロジェクトを生成する Xcode ビルドの実行を抑制し、代わりに Bazel ビルドを実行する

    メルカリiOSアプリのBazelを使った高速・高信頼性ビルド | メルカリエンジニアリング
    k1LoW
    k1LoW 2023/03/30
  • 【書き起こし】QA自動化チームの立ち上げとテスト自動化の現状 – Masatomo Takano【Merpay Tech Fest 2022】 | メルカリエンジニアリング

    【書き起こし】QA自動化チームの立ち上げとテスト自動化の現状 – Masatomo Takano【Merpay Tech Fest 2022】 Merpay Tech Fest 2022 は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りで、2022年8月23日(火)からの3日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。 この記事は、「QA自動化チームの立ち上げとテスト自動化の現状」の書き起こしです。 それでは、「QA自動化チームの立ち上げとテスト自動化の現状」というタイトルで、QAエンジニアの高野が発表させていただきます。よろしくお願いいたします。 簡単に自己紹介させていただきます。 新卒時には金融系システムのQAを担当していました。その後ゲーム業界へ転職し、ク

    【書き起こし】QA自動化チームの立ち上げとテスト自動化の現状 – Masatomo Takano【Merpay Tech Fest 2022】 | メルカリエンジニアリング
    k1LoW
    k1LoW 2022/10/18
  • マイクロサービスの開発とテストファースト/テスト駆動開発 【Mercari Gears Lecture Series】 | メルカリエンジニアリング

    こんにちは、Mercari Gears事務局です! この記事では、動画公開以来とても反響のある Mercari Gears Lecture Series #47〜#49「マイクロサービスの開発とテストファースト/テスト駆動開発」の動画の内容を記事に起こしたものです。 今回の実際の動画はこちらになります、興味があればぜひご覧ください! MERCARI GEARS Lecture Seriesとは? MERCARI GEARS Lecture Seriesは、株式会社メルカリをはじめとするメルカリグループ各社が、これから目指す方向や、これから取り組む技術的なチャレンジについてご紹介するエンジニア向けのレクチャー動画シリーズです。 MERCARI GEARS Lecture Series お話する人の自己紹介 株式会社メルペイ 柴田芳樹 九州工業大学 情報工学修士 1984年 富士ゼロックス 入

    マイクロサービスの開発とテストファースト/テスト駆動開発 【Mercari Gears Lecture Series】 | メルカリエンジニアリング
    k1LoW
    k1LoW 2022/10/18
  • 料率計算における小数点数の扱いについて | メルカリエンジニアリング

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

    料率計算における小数点数の扱いについて | メルカリエンジニアリング
    k1LoW
    k1LoW 2022/08/04
  • Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜 | メルカリエンジニアリング

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

    Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜 | メルカリエンジニアリング
    k1LoW
    k1LoW 2022/06/21
  • 持続可能なデータベースドキュメント生成 | メルカリエンジニアリング

    この記事は Merpay Tech Openness Month 2022 の17日目の記事です。 はじめに こんにちは。Credit Design Teamでバックエンドエンジニアをしている@tk8です。主にメルペイスマート払いに関わるマイクロサービスの開発や運用をしています。 この記事では、私のチームでの持続可能なデータベースドキュメントへの取り組みに関して紹介します。 背景 私が担当しているマイクロサービスでは歴史的経緯(*1)もあり複雑なスキーマ設計をしています。また、領域的にドメイン知識が複雑なものも多く、バックエンドエンジニアでもデータとスキーマの関連に関して理解が難しいことが多々ありました。 さらに私のチームではQAエンジニアPMもデータベースに関するドキュメントを読むことがあり、不明点があれば都度詳しそうな人に聞いたり過去のSlackでの会話を調べたりするなど非効率な状態

    持続可能なデータベースドキュメント生成 | メルカリエンジニアリング
    k1LoW
    k1LoW 2022/04/26
    うおお、templates: の機能、こう使うのか。なるほど、想像もしてなかった。
  • 理想的な Kubernetes カスタムコントローラーの開発環境を考えた | メルカリエンジニアリング

    はじめまして。メルカリの Microservice Platform CI/CD とメルペイの Architect で Software Engineer Internship をしている riita10069 です。 この記事は、Merpay Tech Openness Month 2021 の3日目の記事です。 記事では、私が Kubernetes1のコントローラー2を開発する上で使用している開発環境について紹介したいと思います。 コントローラーの実行環境についてまとまっていなかった方や、これからコントローラーを実装するけれど環境構築で悩んでいる方などの参考になれば嬉しいです。 Abstract Kubernetes のコントローラーを開発する場合に、動作確認をしたり、自動テストを作成するのには、実際にコントローラーを Kubernetes の環境上で動作させる必要があります。 具体

    理想的な Kubernetes カスタムコントローラーの開発環境を考えた | メルカリエンジニアリング
    k1LoW
    k1LoW 2021/09/07
  • Google Kubernetes Engine上のGoアプリケーションでのHTTPリクエストを行う方法 | メルカリエンジニアリング

    この記事はMERPAY TECH OPENNESS MONTHの最後の記事です。 こんにちは、メルペイのバックエンドエンジニアの@gia.nguyenです。 私は第3回のGopher道場を卒業してから2018年12月に入社しました。 他の記事にも記載されましたが、メルペイのバックエンドは、Google Kubernetes Engine(以下、GKE)を使用して、マイクロサービスアーキテクチャを採用した多数のマイクロサービスから構成されています。マイクロサービスは主にGo言語を使って、開発しています。マイクロサービス間のコミュニケーションはgRPCでやり取りしていますが、外部サービスに対してはほとんどHTTPで通信を行っています。記事はGKE上のGoアプリケーションでHTTPリクエストを投げる際、いくつか工夫した点を紹介したいと思います。 TL;DR httptraceはデバッグに役立つ

    Google Kubernetes Engine上のGoアプリケーションでのHTTPリクエストを行う方法 | メルカリエンジニアリング
    k1LoW
    k1LoW 2019/12/13
  • メルペイでのSpannerとの戦いの日々 | メルカリエンジニアリング

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

    メルペイでのSpannerとの戦いの日々 | メルカリエンジニアリング
    k1LoW
    k1LoW 2019/08/11
  • バッチプログラムの運用と監視について検討しよう | メルカリエンジニアリング

    こんにちは。メルペイでバックエンドソフトウェアエンジニアをしている id:koemu です。 バッチプログラムのお話、今回は運用・監視についてお話したいと思います。当社はすべての業務が24時間行われていますので、システムがオンラインのときに動作するバッチプログラムについてのみ議論します。 過去の記事はこちらにあります。 運用に備えて バッチプログラムの運用について、「プリモーテム」「実行管理」そして「ログ管理」の3点について述べていきます。 プリモーテム ポストモーテムという言葉を聞いたことがある方はいらっしゃるかと思います。ポストモーテムとは、GoogleのSREの15章*1によれば、障害などの失敗を振り返り、今後に活かすプロセスの総称と捉えることができます。 さて、プリモーテム(プリモータム)とは何でしょうか。この言葉は、私が最近読んだThe Manager’s Path*2*3で使

    バッチプログラムの運用と監視について検討しよう | メルカリエンジニアリング
    k1LoW
    k1LoW 2019/04/18
  • Goでproxy serverを作るときにハマるポイント | メルカリエンジニアリング

    Mercari Advent Calendar 2018 の5日目はSREチームの @catatsuy がお送りします。 メルカリではGoで書かれたproxy serverをサービスの各所で使っています。今回はGoでproxy serverを作るときにハマりそうな、標準ライブラリの挙動や特徴について紹介します。 エントリーは2018/12/04現在の最新であるGo 1.11.2を元にして書きます。 Hostヘッダーはreq.Header.Set(“Host”, “example.com”)しても上書きできない https://github.com/golang/go/blob/e8a95aeb75536496432bcace1fb2bbfa449bf0fa/src/net/http/request.go#L1023 https://github.com/golang/go/blob/e8

    Goでproxy serverを作るときにハマるポイント | メルカリエンジニアリング
    k1LoW
    k1LoW 2018/12/09
  • nginxによるTCPロードバランサー | メルカリエンジニアリング

    SREチームの@cubicdaiyaです。今回はnginxによるTCPレイヤーでのロードバランスについて解説します。 ロードバランサーとしてのnginx nginxはHTTPやTCP、UDP等の複数のレイヤーでロードバランサーとして稼働させることができます。(TCPロードバランサーは1.9.0以降、UDPロードバランサーは1.9.13以降で利用可能です) また、ngx_http_ssl_module や ngx_stream_ssl_module を利用することでそれぞれのレイヤーでTLSを有効化することも可能です。 TCPロードバランサー用のモジュールを有効にする HTTPレイヤーでロードバランスするためのモジュールはデフォルトで組み込まれますが、TCP(とUDP)レイヤーでロードバランスするにはnginxのconfigureスクリプトに--with-stream(あるいは --with

    nginxによるTCPロードバランサー | メルカリエンジニアリング
    k1LoW
    k1LoW 2018/03/13
  • オートマトンを活用したiOS版メルカリ アッテの会員登録画面 | メルカリエンジニアリング

    今日は、iOSエンジニアの@orakaroです。 iOSエンジニアの皆さん、iPhone Xの対応はいかがでしょうか? メルカリアッテはようやくSwift4/RxSwift4/iPhone Xの対応が落ち着いたところです。 このブログでは、10月11日に開催した Souzoh iOS Talkの中で発表した メルカリ アッテを支えるオートマトンについて、より詳細な内容をお伝えします。 当日のスライドは下記になります。 speakerdeck.com 会員登録フロー 会員登録フローを実装する時に、以下のような基的な機能を実装することがあります。 メールアドレスとパスワードで登録できること メールアドレスとパスワードでログインできること Facebookで認証(登録、ログイン)できること パスワード再発行できること さらに、メルカリ アッテのようにセカンドパーティーのアプリなら、メルカリ連携

    オートマトンを活用したiOS版メルカリ アッテの会員登録画面 | メルカリエンジニアリング
    k1LoW
    k1LoW 2017/11/18
    こういう設計をしっかり実現したい
  • 1