Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

チーム開発合宿 2024 in 徳島県神山町(技術編)

こんにちは、研究開発部 Architectグループの辻田です。 この記事はチームメンバー合同で作成した記事です。

先日、神山ラボへ開発合宿に行ってきました。この記事では合宿中に取り組んだ内容について紹介します。合宿の目的や、全体の様子はチーム開発合宿 2024 in 徳島県神山町(レポート編)をご参照ください。

本記事は【R&D DevOps通信】という連載記事のひとつです。

続きを読む

TypeScript開発にRailway Orientedを持ち込み、より型安全なエラーハンドリングへ

Digitization部 Bill One Entry*1グループの秋山です。

  • はじめに
  • Domain Modeling Made Functionalというスゴ本
    • 補講:Make Illegal States Unrepresentable
  • バックエンドの処理を抽象化する
  • 手続き型プログラミングの典型例
    • 課題1:制約のないエラーハンドリング
    • 課題2:低い可読性
    • 課題3:エラーハンドリングの低い網羅性
  • Railway Oriented Programming
  • TypeScriptで型安全にエラーハンドリングする
    • ステップ1:サブ関数の出力はResult型で表現する
    • ステップ2:サブ関数にResult型を入力できるようにする
    • ステップ3:サブ関数を連結する
    • ステップ4:網羅的にエラーハンドリングする
  • おわりに
  • 付録
    • TypeScriptの全文サンプル

はじめに

エラーハンドリングは重要な処理にも関わらず、静的型付け言語の恩恵を十分に活かしきれていない領域です。特にTypeScriptを用いた開発では、その発展途上な言語仕様も手伝い、型安全なエラーハンドリングはそもそも実現が難しいという実情がありました。

しかし昨今の周辺ライブラリの発展により、型安全なエラーハンドリングを実際の開発現場で実現できるようになってきました。

この記事ではScott Wlaschinの2018年の書籍『Domain Modeling Made Functional(以後、「DMMF本」)』で提唱されているRailway Oriented Programmingと呼ばれるパラダイムを借り、TypeScriptを用いた開発でどのように型安全なエラーハンドリングを担保できるかを検討していきます。

*1:クラウド請求書受領サービス「Bill One」が提供するデータ化機能。

続きを読む

チーム開発合宿 2024 in 徳島県神山町(レポート編)

こんにちは、研究開発部 Architectグループの辻田です。

今年も神山ラボへ開発合宿に行ってきました!新メンバーも加わり、チームとしては2回目の開発合宿*1です。本記事では合宿レポートを紹介します。合宿で取り組んだ技術的な内容は別記事で出しますので乞うご期待です。

本記事は【R&D DevOps通信】という連載記事のひとつです。

*1:前回の合宿記事はこちらです。

続きを読む

Firehoseを介したS3への中間データ保管と検索性強化

はじめに

こんにちは、研究開発部 Architectグループの辻田です。

SansanではユーザーフィードバックがSlackのフィードバックチャンネルに集まります。研究開発部ではこれらからモデルやアルゴリズムなどの改善をしています。

そのため、より多くのフィードバックに早く対応することが改善サイクルを回していく上で重要な活動となります。

本記事では、改善対象のデータ抽出を効率化するために、Amazon Data Firehoseを使用してS3に中間データをストリーミングし、Athenaを使ってデータ検索を実現する方法を紹介します。さらに、パーティショニングの適用によって検索性を向上させる手法も紹介します。

この記事は、【R&D DevOps通信】の連載記事のひとつです。

続きを読む

Eightのデータ抽出基盤をサーバーレスで作る際に工夫したこと

こんにちは、Eight Engineering Unitの井上です。
Eightのデータ抽出基盤である Data Management Platform(以下、DMP)の開発を担当しています。

はじめに

Eightは330万人を超えるユーザーにご利用いただいており、お預かりしているデータ量も日々多くなっています。
データが多いことに加えて抽出条件もさまざまなため、データアクセスは基本的にフルスキャンとなり高い負荷がかかります。
負荷は高いのですが頻度は高くないこともあり、DMPではサーバーレスのGlueAthenaを利用して低コストで安定した稼動となる構成を採用しました。

ざっくりとしたシステム構成は以下になります。

  1. Glue JobでEightデータをS3へエクスポート
  2. エクスポートしたファイルはGlue Data Catalogでテーブル定義
  3. アプリケーションからAthenaへクエリを投げてデータ抽出

この記事では Athena のデータソースを用意するGlueの開発で工夫した点をご紹介します。

続きを読む

terraform planの自動化に向けて直面した課題と解決策

はじめに

こんにちは! 技術本部 Bill One Engineering Unit(以下、Bill One EU)の笹島です。

IaC推進チーム(横串チームの1つ)として、CI環境でのTerraform Planの自動化に取り組んできました。 横串チームとは、Bill One EU内の各グループの垣根のない横断チームであり、Bill Oneで抱えている課題を解決するために有志で集まったメンバーによって構成されています。 IaC推進チームとは、文字通りインフラのコード化を推進するチームです。

本記事では、CI環境でセキュアなTerraform Plan自動実行を実現するにあたって直面した課題とその解決策について共有します。 特に、モノレポ環境での複数プロダクト・環境の管理における自動化の課題についても紹介します。

続きを読む

Salesforceの「取引の開始」関連項目がnullになるタイミングについての話

はじめに

初めまして、技術本部 Sansan Engineering Unit Data Hubグループの菊池です。

約6年間Salesforce エンジニアとしてさまざまな経験を積み、2021年1月からSansan株式会社に入社しました。

現在は、営業DXサービス「Sansan」とSalesforce連携を実現する、Data Hub AppExchange Packageの開発/運用・保守をしています。

今回とある調査で初めて知った仕様があったので、本ブログで共有します。

続きを読む

© Sansan, Inc.