データ分析を加速する AI エージェント Synapse の開発と運用

エンジニアの佐野です。最近はバンドルカードのデータ探索を行うための社内プロダクト Synapse (と名付けた) の開発をしています。雨後の筍のように AI の名を冠したソフトウェアやサービスが出るようになって久しいのですが、カンムでもとりわけ生成 LLM を…

Go Conference 2025 Capture The Flag 模範解答

バックエンドチームの近松です。 カンムでは、Go Conference 2025 開催前に Capture The Flag (CTF) を公開していました。皆さん、お楽しみいただけたでしょうか? 本記事では、CTF の模範解答および作問にまつわる裏話を紹介します。 作問担当者 想定ターゲ…

Go Conference 2025 Capture The Flag 公開

バックエンドチームの近松です。 株式会社カンムは、Go Conference 2025 に Silver スポンサーとして参加します! gocon.jp カンムは例年、プログラミングクイズや Capture The Flag(CTF) を Go Conference 前に公開しています。直近では① 脆弱性を利用し…

【CTF出題予定!】カンムは Go Conference 2025 にシルバースポンサーとして参加します

こんにちは、サクっと資金調達 開発チーム ソフトウェアエンジニアの hata です。 カンムは、2025年9月に開催される Go Conference 2025 にシルバースポンサーとして参加します。 Go Conference には例年関わってきましたが、今年も引き続き、スポンサーとい…

jackc/pgxのErrBadConnリトライ・target_session_attrs

プラットフォームチームの菅原です。 GolangのPostgreSQLドライバ jackc/pgxについて最近まで知らなかった機能があったので紹介します。 driver.ErrBadConnでのリトライ データベースの再起動などで切断されたコネクションをコネクションプールから引き当て…

Go 1.24 で map が30%以上高速化!Swiss Tableとは?

Go1.24 がついに公開されましたね。その中でとても興味深い改善内容がありました。 1/14 Go's new map implementation in 1.24 is powered by Swiss Tables, a cutting-edge hash table design that significantly boosts performance. Let's break down why…

Goのコネクションプーリングまわりのメトリクス収集

プラットフォームチームの菅原です。 Goでデータベースを使う場合には、以下のメソッドでコネクションプーリングまわりの設定を調整することが多いと思います。 SetConnMaxIdleTime() SetConnMaxLifetime() SetMaxIdleConns() SetMaxOpenConns() MaxOpenConn…

データベースの固定パスワードをなくす

プラットフォームチームの菅原です。 カンムのサービスで使われている各種アプリケーション(Goアプリ・管理アプリ・Redash等)では、データベースに接続する場合に一般的なパスワード認証を使っていることが多いです。 しかし、パスワード認証はパスワード…

SAML Group Mappingを使ったEntra ID+Datadogのロール自動割り当て

プラットフォームチームの菅原です。 カンムではサービスのモニタリングにDatadogを利用しており、その管理はプラットフォームチームが担っています。 DatadogへのログインはMicrosoft Entra ID(旧AzureAD)を使ったシングルサインオンで行うため、Datadog…

Poolにおける残高管理の設計

こんにちは、エンジニアのpongzuです。 今日は、カンムが提供するプロダクト「Pool」の残高管理設計について書きます。 本記事では、まずPoolがどのような仕組みで動いているのか、投資やウォレットといったサービス仕様を簡単にご説明します。その後、それ…

エンジニアによるFintech法律勉強会を開きました

はじめに ソフトウェアエンジニアの hata です。先日、カンムが提供するプロダクトの一つ、 Pool を取り巻くFintech法律勉強会を開きました。 pool-card.jp 金融は最も規制が厳格で複雑な分野です。金融サービスは、複数の法律から最適な組み合わせを選ぶこ…

Tauri と Pixoo-64 でオンラインミーティングのカメラの映り込みリスクを軽減する

こんにちは、リモートワークしてますか?私は週7家にいます。エンジニアの岡田です。 この記事はカンム Advent Calendar 2024の24日目です。1 23日目は teshiken さんの「成果を出しつづけるための行動として意識していること」でした。 adventar.org さて、…

バンドルカード開発チームの現在地

カンム 2024年アドベントカレンダーの22日目です。 adventar.org 昨日はAwesomeさんの「銀行員が転職した話」でした。 Awesomeさんは今年カンムへ転職してきてくれたのですが、新規事業である「サクっと資金調達」の立ち上げに関わっていただいています。カ…

BCD を取り回すライブラリを Rust で書いた

エンジニアの佐野です。文字列および数値を BCD と相互変換するライブラリを Rust で書きました。 github.com crates.io にも公開しました https://crates.io/crates/bcd-convert BCD BCD は Binary-coded decimal の略で日本語では二進化十進表現などとも呼…

技術者倫理のキホンという本を読みました

はじめまして。プラットフォームチームの高山です。 この記事は カンム Advent Calendar 2024 の18日目の記事です。 adventar.org 最近読んだ本がなかなか興味深かったので、ちょっとご紹介できればと思います。 技術者・研究者のための 技術者倫理のキホン…

Redash を少し便利に使う Chrome Extensions を書いた

エンジニアの佐野です。菅原が Redash について言及したのでそれに乗っかって自分も簡単な記事を書きます。 tech.kanmu.co.jp まず Redash の基本的な使い方としては次の通りです。 https://your-redash-domain/queries/new にアクセスする。 データソース *…

ジョブキューのパフォーマンス問題の経験から学んだ PostgreSQL の内部理解

ソフトウェアエンジニアの新田です。 これは カンム Advent Calendar 2024 の8日目の記事です。昨日はフロントエンドチームのEMの佐藤さんの記事 チームが成長するたびに変わっていった朝会の話 - カンムテックブログ でした。 私は現在プラットフォームチー…

チームが成長するたびに変わっていった朝会の話

こんにちは、カンムのフロントエンドチームでエンジニアリングマネージャーをしている佐藤です。 これは カンム Advent Calendar 2024 の7日目の記事です。昨日は always_allokay によるお世話になっているライブラリをちょっと見てみるシリーズ、shopspring…

使っているライブラリを見てみよう(shopspring/decimal編)

こんにちは. Poolでエンジニアをしている @always_allokay です。 こちらはカンム Advent Calendar 2024 の6日目の記事です。 昨日はprinさんによるボボステの記事でした。 タイトルの通り、お世話になっているライブラリをちょっと見てみるシリーズです。(…

最近のRedash

SREの菅原です。 この記事はカンム Advent Calendar 2024の4日目の記事です。 最近のRedashの開発状況について、知っている範囲ですこし書いてみたいと思います。 redash.io Redashといえば様々なデータソースをSQLを使って可視化できるBIツールで、カンムで…

モダンな状態管理の探求:Redux からZustand へ ― 実装から原理まで

はじめに こんにちは、エンジニアの王です。 フロントエンドの開発者として、私はいくつかのプロジェクトでRedux Toolkitを使用してきました。Redux Toolkitは確かに強力な状態管理ツールですが、プロジェクトが進むにつれて、その構造的な複雑さを次第に強…

社内ものづくりイベント「Builders Day」を初開催した話

こんにちは、nakaji_dayoと申します。カンムでエンジニアリングマネージャーをしています。 2024年9月に「Builders Day」という社内ものづくりイベントを初開催しました。本稿ではイベント企画の背景や開催時の様子の紹介をします。 Builders Dayとは はじめ…

SMS配信の冗長化と配信プロバイダの自動切り替え

エンジニアの佐野です。カンムでは SMS を多用しています。例えば以下のようなポイントで使っています。 ユーザ新規登録時の認証コード送信 ログイン時の認証コード送信 3Dセキュア 認証時 後払い機能利用時 ユーザにメッセージを送る時 ...etc ここでもし S…

Atlantisのマルチクラウドへの対応について

SREの菅原です。 カンムではAWSやGCP、Datadogなど様々をIaaS・SaaSをterraformで管理しているのですが、以前は「GitHub Actionsでplan」「管理者や開発者が手元でapply」というフローになっており、terraform applyの実行が管理者や一部の権限を持った開発…

Go の静的解析で DB へのコミット漏れを検出する

エンジニアの佐野です。カンムはバックエンドに PostgreSQL を置きつつサーバを Go で書いています。DB のトランザクションの取り回しは概ね次の様なイディオムになっているのですが、先日 Commit() が漏れている箇所を見つけまして...。結果としてそれにつ…

Terraform Providerを使ったcron式のチェック

SREの菅原です。 カンムのサービスのバッチ処理は基本的にEventBridge Scheduler+ECSで動いており、バッチのスケジュールはterraformで以下のように定義されています。 module "kanmu_batch" { # バッチまわりはモジュール化 source = "../modules/batch" fo…

terrraformを使ったGoのLambdaの管理

SREの菅原です。 カンムのサービスはWebサービス・バッチ処理なども含めて基本的にはECS上で動かしているのですが、簡単なバッチ処理はLambda+EventBridge Schedulerの組み合わせで動かすこともあります。 LambdaはECSに比べてDockerイメージのビルドやECRの…

ウォーターフォールを見直して自チームに最適化した開発フローを構築する

エンジニアの佐野です。バンドルカードではポチっとチャージという後払いの機能を利用する際に年齢確認が必須となりました。通信キャリアや銀行との連携等によって年齢確認ができるようになっています*1。今回はこの機能の開発を題材に普段開発でどのような…

「React Native Meetup #17」を開催しました

こんにちは、カンムのエンジニアリングマネージャー佐藤です。 先日、React Native Japanと一緒に開催した「React Native Meetup #17」のイベントレポートをお届けします!前回に引き続き、今回もたくさんの方にご参加いただき、賑やかな会になりました。 皆…

バンドルカードが Google Pay™ に対応しました

バンドルカードのバックエンドエンジニアをしているshibaです。生粋のiPhoneユーザです。 昨年の10月頃にバンドルカードは Google Pay に対応しました。少し遅くなってしまいましたが、 Google Pay 対応について簡単に紹介したいと思います。なお、 Google P…