タグ

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

  • GraphQLを導入する時に考えておいたほうが良いこと | メルカリエンジニアリング

    はじめに こんにちは、ソウゾウSoftware Engineerの@sue71です。連載:メルカリShops 開発の裏側 Vol.2の13日目を担当させていただきます。 以前メルカリメルカリShopsの技術スタックと、その選定理由でBFFの実装にGraphQLを採用していることをお伝えしました。メルカリShopsをリリースしてから約半年たった今、これまでを振り返ってGraphQLサーバーを実装する上での課題やあらかじめ考えておくと良い項目をまとめてみました。また、記事ではメルカリShopsでGraphQLの実装としてApolloを採用しているため、Apolloの利用が前提の話もいくつか混在しています。予めご容赦ください。 GraphQLの説明や、メルカリShopsの実装方法に関しては以前こちらの記事で紹介しています。こちらも是非ご覧ください。 パフォーマンス課題 GraphQLは、アプリ

    GraphQLを導入する時に考えておいたほうが良いこと | メルカリエンジニアリング
  • GraphQL Client Architecture Recommendation 社外版 | メルカリエンジニアリング

    この記事は、Merpay Advent Calendar 2022 の15日目の記事です。 こんにちは。メルペイのvvakameです。 最近、社内向けにGraphQL Client Architecture Recommendationというドキュメントを書きました。社内のiOS/Android、そしてバックエンドのエンジニア向けにGraphQLをやるならこの辺りの条件を満たしておかないと恩恵を感じられなくなっちゃうかもよ、と伝えるためのものです。嬉しいことに、今までに100名弱の人たちがこのドキュメントを閲覧してくれたようです。 これをAdvent Calendarで公開するために、ちょっと調整したものがこの社外版です。 すでにGraphQLをやっているけどあまり便利じゃないな…なんでだろ?とか、これから導入したいんだけど何を気をつけるべきかな…と考える時の材料にしてください。 併せて、

    GraphQL Client Architecture Recommendation 社外版 | メルカリエンジニアリング
  • 未知の脅威に対抗するメルカリのCI再設計 | メルカリエンジニアリング

    この記事は、Mercari Advent Calendar 2022 の3日目および Developer Productivity Engineering Campブログシリーズの一環で、メルカリCI/CDチームのMichael Findlater (@michaelfindlater)が執筆したものです。 ※記事は2022年2月3日に公開された記事の翻訳版です。 ここではメルカリにおける次世代Continuous Integration(CI)システムの実装、そしてそれに向けたいくつかの技術的な取り組みについて解説します。またこの施策の動機とも言える、サプライチェーンアタックがどのようにCI/CDエンジニア達にとって今後より重要になってきたのかについて解説します。 背景 これまでも常にCI/CDパイプラインに対する攻撃は存在していたものの、ここ最近のこのエリアに対しての攻撃の急増は脅威

    未知の脅威に対抗するメルカリのCI再設計 | メルカリエンジニアリング
  • 決済システムを壊さずに拡張した話 | メルカリエンジニアリング

    メルペイのBackend Engineerの @Hiraku です。与信決済システムのmicroserviceのTech Leadをしております。 この記事は、Merpay Advent Calendar 2022 の5日目の記事 メルカードの舞台裏編です。 2022年11月8日にメルペイ初のクレジットカードであるメルカードがリリースされました。これに伴い、システムにも広範囲に変更が加わっています。この記事ではその中でもちょっと分かりにくい、メルペイスマート払いの請求タイミングの変更について解説します。 月末ごろにメルカードによる決済を行うとわかるのですが、「処理中」と表示され、翌月の請求に含まれないものがあります。こちらはメルカード特有の実売上処理が終わってから請求する挙動です。順番に解説していきます。 カード決済の流れ 決済は大きく2段階の処理で成り立っています。「オーソリ」や「仮売上

    決済システムを壊さずに拡張した話 | メルカリエンジニアリング
  • Kubernetes CronJobと仲良くなりたい | メルカリエンジニアリング

    この記事は、Merpay Tech Openness Month 2020 の17日目の記事です。 こんにちは。メルペイのSREの駒崎(@komattaka)です。 暑かったり台風だったりと大変な日々が続いていますが、ご自愛ください。 目次 対象読者 得られるもの 説明しないこと はじめに CronJobの仕組 そもそもCronJobとは何か パラメータの解説 CronJobが作成される流れ メルペイでは何に困っていた? suspend: trueにしていたCronJobがfalseにした後もJobを生成しない (GKE特有) NodeがCluster Autoscalerによって停止されると、そのNodeで稼働していたJob(Pod)のEvictをCronJobが正常終了したと誤解しconcurrencyPolicy: Forbid(Replace)なのに並列稼働した ユースケース別に設

    Kubernetes CronJobと仲良くなりたい | メルカリエンジニアリング
  • メルカリWebのマイクロサービス化、その4年 | メルカリエンジニアリング

    Author: @urahiroshi, Engineering manager of Web Platform team 2022年8月4日、メルカリで “web-2” と呼ばれるサーバがシャットダウンされました。これはメルカリWeb版の開発に携わっているチームにとって、一つの区切りとなる出来事でした。 web-2はPHPで記述されたwebサーバで、2015年から https://www.mercari.com/jp/ 配下のコンテンツを配信していましたが、現在では複数のWebマイクロサービスがその機能を担っており、 https://www.mercari.com/jp/ 配下のページは後継となるWebマイクロサービスが配信するページへリダイレクトされています。 メルカリWebのマイクロサービス化に向けた開発が始まり、最終的にweb-2がシャットダウンされるまで、実に4年以上の期間がかか

    メルカリWebのマイクロサービス化、その4年 | メルカリエンジニアリング
  • CI/CDチームの紹介 | メルカリエンジニアリング

    記事は2022年1月28日に公開された記事の翻訳版です。 この記事は、「Developer Productivity Engineering Camp」ブログシリーズの一部として、CI/CDチームの by Yuji Kazamaがお届けします。 はじめに こんにちは、Continuous Integration(CI)/Continuous Delivery(CD)チーム エンジニアリングマネージャーのYuji Kazamaです。CI/CDチームは、Developer Productivity Engineering Campに所属しています。この記事では、以下の質問に答えながら、チームの簡単な紹介をします。 チームは何を達成しようとしているのか(ミッション) チームはどのようにそのミッションを実現しようとしているのか(戦略) ミッション 私たちのミッションは次のとおりです。 「CI/

    CI/CDチームの紹介 | メルカリエンジニアリング
  • ログデータと言語モデルを用いた同義語辞書の自動構築 | メルカリエンジニアリング

    こんにちは、メルカリの検索チームで機械学習エンジニアとしてインターンをしていた塚越駿 ( @hpp_ricecake ) です。インターンでは、メルカリのログデータと言語モデルを用いて同義語辞書を自動構築するというタスクに取り組みました。 メルカリではすでに同義語辞書を用いた検索システムの改善が行われていますが、定期的なアップデートに課題が存在したため、今回は日々自動で蓄積される検索クエリと商品データから自動で辞書を構築できる手法を実装しました。記事では、その結果についてご紹介いたします。 同義語辞書について 同義語(synonym)とは、ある語に対して、表層的には異なるものの質的に同じものを表している語のことを表します。検索システムを構築するにあたって、適切な同義語辞書を用いれば検索システムの再現率(recall)を向上させることができるため、質の高い同義語辞書を整備することは非常に

    ログデータと言語モデルを用いた同義語辞書の自動構築 | メルカリエンジニアリング
  • XState + Apollo Clientでフロントエンドのステート管理 | メルカリエンジニアリング

    こんにちは。メルカリのSoftware Engineerのsotaです。 この記事は、Mercari Advent Calendar 2021 の18日目の記事です。 先日限定公開が始まったmerworkのWebフロントエンドでは、より良いUXを実現するためにコードの段階から設計していこう、というテーマをもとに、ライブラリやフレームワークの選定を行なっています。その中でAPIのデータやアプリケーションのステート管理にはXStateとGraphQLクライアントであるApollo Clientを採用しています。今回はこれらのライブラリを採用した経緯やどのように運用しているかについて解説します。 XStateについて XStateはステートチャートに基づいた状態遷移を管理するJavaScriptライブラリです。ReduxやMobXのようなフロントエンドのステート管理ライブラリと比較すると、XSt

    XState + Apollo Clientでフロントエンドのステート管理 | メルカリエンジニアリング
  • 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を削除するための手順と道のり | メルカリエンジニアリング
  • お手軽な検索API構築 | メルカリエンジニアリング

    こんにちは、メルペイソリューションチーム所属エンジニアの@orfeonです。 この記事は Merpay Tech Openness Month 2021 5日目の記事です。 メルペイソリューションチームでは、社内向けの技術コンサル技術研修、部門を跨いだ共通の問題を発見して解決するソリューションの提供などを行っています。 自分は主に社内のデータ周りの課題を解決するソリューションを提供しており、一部の成果はOSSとして公開しています。 この記事ではいろいろな場面で必要とされるものの、運用負荷などの問題から導入の敷居が高い検索機能を(条件付きで)簡易に提供するためのソリューションを紹介します。 基的なアイデア 全文検索や位置検索など、検索はいろいろな場面で必要とされる機能です。しかしいざ検索サーバを立てて運用するとなると、データの整合性やモニタリングなど考えないといけないことも多く、利用に二

    お手軽な検索API構築 | メルカリエンジニアリング
  • 新しいメルカリDesign System Web | メルカリエンジニアリング

    @nekobatoです。メルカリDesign SystemのWeb版開発者をしています。以前の記事で新しくなったメルカリ Webの紹介がありましたが、記事ではそこで使われている、同じく新しくなったDesign System Webの紹介をします。 Design System Webの提供 Design Systemを元にした実装の構造はプラットフォームごとに異なりますが、Design System Webはmonorepoで管理されたnpm module群で、プロダクトはモジュールを用途に合わせて利用可能です。全てを使う必要はなく、基的にはコンポーネントモジュール(CoreまたはReact)を利用すればDesign Systemの恩恵を受けられます。現在は新しくなったデザインのメルカリ Webで実際に利用例を見ることができます。 この記事はDesign System Webの技術的な概

    新しいメルカリDesign System Web | メルカリエンジニアリング
  • メルカリShopsはマイクロサービスとどう向き合っているか | メルカリエンジニアリング

    こんにちは。ソウゾウのSoftware Engineerの@napoliです。連載:「メルカリShops」プレオープンまでの開発の裏側の3日目を担当させていただきます。 メルカリShopsではマイクロサービスアーキテクチャによる開発を採用しています。ここではメルカリShopsではどのようにマイクロサービスと向き合っているかを紹介させていただきます。 メルカリShopsのマイクロサービス群 メルカリShopsはざっくりと、図のような形でマイクロサービス群が構成されています。 Frontendがひとつ、Backend For Frontend(BFF)がひとつ、そして(執筆時点で)約40ほどのBackendサービスが、それぞれが独立した実行環境で稼働しています。 BackendはShop(ショップ)、Product(商品)、Order(注文)、Payment(決済)といったドメインごとに独立し

    メルカリShopsはマイクロサービスとどう向き合っているか | メルカリエンジニアリング
  • Mercari Microservices PlatformにおけるKubernetes Cluster移行 | メルカリエンジニアリング

    Microservices Platform Teamの@deeeeeeetと@dragon3です. Microservices Platform TeamではGoogle Kubernetes Engine(GKE)をメインのコンポーネントとして利用し,その上にメルカリとメルペイのMicroservicesを動かすための基盤を構築しています.メルカリのMicroservices化のプロジェクト自体は2年ほど前から始めており,GKEも当時に構築したものを今日まで運用し続けてきました. この2年間でGKEからは多くの機能がリリースされました.その中のほとんどはそのまま有効にすることができますが,中にはClusterを作り直す必要があるものもあります.例えばRoutes-based ClusterをVPC-native Clusterに,Zonal ClusterをRegional Clust

    Mercari Microservices PlatformにおけるKubernetes Cluster移行 | メルカリエンジニアリング
  • SwiftのWebAssembly対応の進捗 | メルカリエンジニアリング

    こんにちは、メルペイエキスパートチームインターンの@kateinoigakukunです。 記事では私がインターンの中で開発しているSwift言語のWebAssembly対応について紹介します。 背景 メルペイでは「技術アウトプットするところに技術は集まる」という思いから、 稼働の50%以上を技術コミュニティへの貢献や技術の普及に取り組むエキスパートチームが存在します。 私は主にSwiftコミュニティへの技術的な貢献に注力しています。特に去年の10月頃からSwiftWebAssemblyサポートを進めています。 WebAssemblyはブラウザで実行可能なバイナリ形式として開発されている低級言語です。またブラウザ以外の環境でも実行できるポータブルな形式としても設計されており、活用できる用途は多岐にわたります。 Swift教育の現場でも取り扱われるケースが増えてきており、注目されている

    SwiftのWebAssembly対応の進捗 | メルカリエンジニアリング
  • バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング

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

    バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング
  • 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を作るときにハマるポイント | メルカリエンジニアリング
  • Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング

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

    Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング
  • RxCocoa 4 の Signal と Relay のまとめ | メルカリエンジニアリング

    Mercari Advent Calendar 2017 の4日目はソウゾウiOSエンジニアのorakaroがお送りします。 ソウゾウ社はメルカリグループの新規プロダクトを多数開発していますが、ほとんどのiOS版アプリでリアクティブライブラリのRxSwiftを採用しています。RxSwift 4 / RxCocoa 4にいくつか新しいクラスが実装されましたので、そのクラスの実装を覗きながら紹介します。 今回紹介するクラスは Signal, PublishRelay, BehaviorRelayです。 RxCocoa をよく使っている方はご存知だと思いますが、UIレイヤーのリアクティブプログラミングのためにDriverという Trait が提供されています。 SignalはDriverに近い物ですが、SharingStrategyだけが異なります。サブスクライブされる時にDriverは一回re

    RxCocoa 4 の Signal と Relay のまとめ | メルカリエンジニアリング
  • メルカリの分析チームとは?その全ての疑問にひとつひとつ答えます | メルカリエンジニアリング

    この記事はMercari Advent Calendar 6日目の記事です。 メルカリのBIチームのアナリスト/マネジャーの @hikaru が、メルカリの分析チームの事情についてお送りします。 ※ BIチーム…メルカリ内の分析を一手に担うチーム。Business Intelligenceチーム。 この記事について イベントやカジュアル面談などでメルカリの分析チームの内幕についてよく聞かれる質問があります。 いえ、それどころか場合によっては社内であまり一緒に仕事する機会がない方々からも、チームに関して質問されることがあります。 ※ カジュアル面談…メルカリでは、社内のポジションに興味ある方にオフィスに来ていただいて1on1でざっくばらんに話す会を頻繁に行っています。 正直、分析チームというのは外部から何をやっているか見えづらい面もあるため、理解できます。 よく頂く質問としては、 組織的なこ

    メルカリの分析チームとは?その全ての疑問にひとつひとつ答えます | メルカリエンジニアリング