Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

バックエンド

MySQLで「無ければINSERT、あればUPDATE」を実現する方法

こんにちは、駅奪取エンジニアの id:kimkim0106(旧: id:kaoru_k_0106)です。 今回の記事は、駅奪取でテーブルにレコードが「無ければ INSERT、あれば UPDATE」(いわゆる UPSERT)をする箇所で Duplicate entry が出ていたのを修正したり、未然に防ぐ実装…

コスト削減のため Redis の sorted sets で実装していたランキング処理を MySQL に移行しました

駅メモ!チームエンジニアの id:yumlonne です。 この記事では Redis の sorted sets で実装していたランキング処理を MySQL に移行した仕組みを紹介します。 背景 駅メモ!には複数のランキングがあり、Redis の sorted sets を使うことでパフォーマンスの…

Perl で App Store Server Notification V2 の検証をする

こんにちは、エンジニアの id:kaoru-k_0106 です。 駅奪取のサブスク機能である「駅奪取er定期券」は、App Storeのサーバ通知の実装の際に App Store Server Notification V2 を用いました。 他の言語での Server Notification V2 の実装例は見つかりますが…

TypeORMのData Mapperパターンにおけるリレーションの型安全性を担保する

こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 今回は外部リレーションに関して型安全性の乏しい TypeORM の Data Mapper パターンを独自のユーティリティ型を使ってちょっとマシにする方法を紹介します。 前提: TypeORM の外部リレーシ…

NestJS Way より TS Way を意識したバックエンド設計事例と Tips

こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 最近、弊チームで構築した社内向け Web API のバックエンド設計をしたので事例として紹介しようと思います。 フレームワークとして NestJS を採用していますが、NestJS Way よりも TS Way …

NestJS 製のプロジェクトのテストを@swc/jest で高速化する

NestJS は Node.js 向けのウェブフレームワークです。その特徴として Decorator を用いてクラスやメソッドにアノテーションをする仕組みを提供しています。 例えば API のエンドポイントを定義する場合は次のようなコードを実装します。 import { Controller…

Perlでモックを多用したテストを書いてわかったこと

この記事はモバイルファクトリー Advent Calendar 2019 3日目です。 こんにちは、エンジニアのid:yumlonneです! 昨年のモバイルファクトリーAdvent Calendar 2018では、Perlのテストモジュールの紹介という記事を書きました。 今回は単体テストでモック*1を…

Perlのテストモジュールの紹介

この記事は、モバイルファクトリーAdvent Calendar 2018 23日目の記事です。 前日の記事は、id:masasuzさんの モバイルファクトリーのインフラアーキテクチャ でした。 こんにちは、id:yumlonneです! 最近、テストの重要性をひしひしと感じているので、テス…