カンム テックブログ

https://tech.kanmu.co.jp/

カンム テックブログ

フィード

記事のアイキャッチ画像
jackc/pgxのErrBadConnリトライ・target_session_attrs
カンム テックブログ
プラットフォームチームの菅原です。 GolangのPostgreSQLドライバ jackc/pgxについて最近まで知らなかった機能があったので紹介します。 driver.ErrBadConnでのリトライ データベースの再起動などで切断されたコネクションをコネクションプールから引き当ててエラーになる問題について、SetConnMaxLifetime()を設定して、定期的にコネクションをリフレッシュするしかないと思っていたのですが、こちらの記事でdriver.ErrBadConnのときにリトライしてくれることを知りました。 たしかにドキュメントには ErrBadConn should be ret…
1ヶ月前
記事のアイキャッチ画像
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 this matters and how @CockroachDB's implementation played a key role. 🧐🚀— Peter Mattis (@peterm…
2ヶ月前
記事のアイキャッチ画像
Goのコネクションプーリングまわりのメトリクス収集
カンム テックブログ
プラットフォームチームの菅原です。 Goでデータベースを使う場合には、以下のメソッドでコネクションプーリングまわりの設定を調整することが多いと思います。 SetConnMaxIdleTime() SetConnMaxLifetime() SetMaxIdleConns() SetMaxOpenConns() MaxOpenConnsを設定してアプリケーションからの接続がデータベースのリミットを超えないようにしたり、MaxIdleConnsを設定してアイドルコネクションを保持し接続が都度発生しないようにしたりしますが、サービスにデプロイされた後はその設定が正しいか調べるためメトリクスが必要になり…
2ヶ月前
記事のアイキャッチ画像
データベースの固定パスワードをなくす
カンム テックブログ
プラットフォームチームの菅原です。 カンムのサービスで使われている各種アプリケーション(Goアプリ・管理アプリ・Redash等)では、データベースに接続する場合に一般的なパスワード認証を使っていることが多いです。 しかし、パスワード認証はパスワード漏洩のリスクやパスワード管理の手間があり、また要件によっては定期的なパスワードの変更も必要になってきます。 単純な方法で安全にパスワードをローテーションしようとすると、新しいDBユーザーを作成し、アプリケーションの接続ユーザーを変更し、さらに必要であれば元のDBユーザーのパスワードを変更して、接続ユーザーを元に戻す…などのオペレーションが必要になりま…
3ヶ月前
記事のアイキャッチ画像
SAML Group Mappingを使ったEntra ID+Datadogのロール自動割り当て
カンム テックブログ
プラットフォームチームの菅原です。 カンムではサービスのモニタリングにDatadogを利用しており、その管理はプラットフォームチームが担っています。 DatadogへのログインはMicrosoft Entra ID(旧AzureAD)を使ったシングルサインオンで行うため、DatadogのアカウントはEntra IDで一元管理されているのですが、Datadogのロールの割り当ては自動化されておらず、引き続き依頼を受けてプラットフォームチームが割り当てを行う状態でした。 カンムで使っているDatadogのロールはEntra IDのグループから一意に割り当てられるため、機械的にマッピングすることがで…
3ヶ月前
記事のアイキャッチ画像
Poolにおける残高管理の設計
カンム テックブログ
こんにちは、エンジニアのpongzuです。 今日は、カンムが提供するプロダクト「Pool」の残高管理設計について書きます。 本記事では、まずPoolがどのような仕組みで動いているのか、投資やウォレットといったサービス仕様を簡単にご説明します。その後、それらをどのようにDB管理するかについて、設計の考え方を順を追って解説していきます。 仕様 Poolは簡単にいうと投資とVisaカードを組み合わせたプロダクトです。 アプリ上で口座開設を行い、ウォレットと呼ばれる機能に入金後、資産運用やカード決済に利用できます。 また、同時にウォレット残高と投資資産がカード利用可能額となり、Visaの加盟店でカード…
4ヶ月前
記事のアイキャッチ画像
エンジニアによるFintech法律勉強会を開きました
カンム テックブログ
はじめに ソフトウェアエンジニアの hata です。先日、カンムが提供するプロダクトの一つ、 Pool を取り巻くFintech法律勉強会を開きました。 pool-card.jp 金融は最も規制が厳格で複雑な分野です。金融サービスは、複数の法律から最適な組み合わせを選ぶことが競争優位になりえます(ルールに内在する「余白」を正しく理解し、自らのビジネスに最大限有効・有利に活用するという発想)。 Poolは、他にあまり見ない、投資・決済が一つになったサービスを提供しており、その法的構成も非常にユニークです。 ただし、その法的構成のユニークさから、Poolがどのような法律を組み合わせたプロダクトであ…
4ヶ月前
記事のアイキャッチ画像
Tauri と Pixoo-64 でオンラインミーティングのカメラの映り込みリスクを軽減する
カンム テックブログ
こんにちは、リモートワークしてますか?私は週7家にいます。エンジニアの岡田です。 この記事はカンム Advent Calendar 2024の24日目です。1 23日目は teshiken さんの「成果を出しつづけるための行動として意識していること」でした。 adventar.org さて、カンムはフルリモートを導入していまして2、自分はもうかれこれ4年ほどずっと家で仕事をしています。 ミーティングではカメラを ON にすることもままあるのですが、家族も家で仕事をしているので、お互いカメラへの映り込みに注意して生活しています。 ただ、お互いにミーティングの予定は何らかの形で共有しているものの、…
4ヶ月前
記事のアイキャッチ画像
バンドルカード開発チームの現在地
カンム テックブログ
カンム 2024年アドベントカレンダーの22日目です。 adventar.org 昨日はAwesomeさんの「銀行員が転職した話」でした。 Awesomeさんは今年カンムへ転職してきてくれたのですが、新規事業である「サクっと資金調達」の立ち上げに関わっていただいています。カンムは今までtoCサービスを中心に事業展開してきましたがこれからはtoBに関しても課題解決をしていきます。 note.com 今回の私の記事ではバンドルカードのプロダクト開発が1年前からどのように変化してきたかを書きます。 私について 私については入社した年に書いた紹介記事があるのでこちらをご覧いただければ幸いです。 mic…
4ヶ月前
記事のアイキャッチ画像
BCD を取り回すライブラリを Rust で書いた
カンム テックブログ
エンジニアの佐野です。文字列および数値を BCD と相互変換するライブラリを Rust で書きました。 github.com crates.io にも公開しました https://crates.io/crates/bcd-convert BCD BCD は Binary-coded decimal の略で日本語では二進化十進表現などとも呼ばれます。 カンムの業務で言うとクレカ決済のデータを扱っているとたびたび出現します*1。例えばカード決済のデータをやりとりする ISO8583 というプロトコルではカード番号は 0x40, 0x19, 0x24, 0x99, 0x99, 0x99, 0x99,…
4ヶ月前
記事のアイキャッチ画像
技術者倫理のキホンという本を読みました
カンム テックブログ
はじめまして。プラットフォームチームの高山です。 この記事は カンム Advent Calendar 2024 の18日目の記事です。 adventar.org 最近読んだ本がなかなか興味深かったので、ちょっとご紹介できればと思います。 技術者・研究者のための 技術者倫理のキホン作者:田中和明秀和システムAmazon 「技術者・研究者のための 技術者倫理のキホン」と言う本です。 この世の中、様々な方の研究があり、それに付随する形で技術の発達・進展があります。そして、それを実装していく際に「倫理」みたいなものは大変大事だなぁと思っています。 エンジニアとしても「それはちょっと…」みたいな企画・仕…
4ヶ月前
記事のアイキャッチ画像
Redash を少し便利に使う Chrome Extensions を書いた
カンム テックブログ
エンジニアの佐野です。菅原が Redash について言及したのでそれに乗っかって自分も簡単な記事を書きます。 tech.kanmu.co.jp まず Redash の基本的な使い方としては次の通りです。 https://your-redash-domain/queries/new にアクセスする。 データソース *1 を選択してクエリを書く。 クエリを実行する。 ここで2のデータソースを選択する際なのですが、カンムは Redash を多用しているため大量のデータソースが存在し、都度用途に応じて選択する必要があります。次の画像が存在するデータソース一覧です。 例えば画像中でマスクしていない Bi…
5ヶ月前
記事のアイキャッチ画像
ジョブキューのパフォーマンス問題の経験から学んだ PostgreSQL の内部理解
カンム テックブログ
ソフトウェアエンジニアの新田です。 これは カンム Advent Calendar 2024 の8日目の記事です。昨日はフロントエンドチームのEMの佐藤さんの記事 チームが成長するたびに変わっていった朝会の話 - カンムテックブログ でした。 私は現在プラットフォームチームに所属しており、おなじようにチームで朝会をしているので非常に参考になりました。積極的にパクっていこうと思います。 さて、カンムではプロダクトのデータベースに Amazon Aurora PostgreSQL を採用しています。 ここで少し特徴的なのは、このデータベースは、アプリケーションのデータ管理だけでなく、ジョブキューの…
5ヶ月前
記事のアイキャッチ画像
チームが成長するたびに変わっていった朝会の話
カンム テックブログ
こんにちは、カンムのフロントエンドチームでエンジニアリングマネージャーをしている佐藤です。 これは カンム Advent Calendar 2024 の7日目の記事です。昨日は always_allokay によるお世話になっているライブラリをちょっと見てみるシリーズ、shopspring/decimalの記事でした! この記事ではチームで行っている朝会の様子や改善してきたことを紹介します。 背景 バンドルカードチームでは、今年の頭から各職能チーム(Unit)のメンバーが異なる目的を持ったチーム(いわゆるフィーチャーチーム)に属し、それぞれが独自のプロジェクトやタスクに取り組む形でプロダクト開…
5ヶ月前
記事のアイキャッチ画像
使っているライブラリを見てみよう(shopspring/decimal編)
カンム テックブログ
こんにちは. Poolでエンジニアをしている @always_allokay です。 こちらはカンム Advent Calendar 2024 の6日目の記事です。 昨日はprinさんによるボボステの記事でした。 タイトルの通り、お世話になっているライブラリをちょっと見てみるシリーズです。(今はじめました) 今回は、shopspring/decimal について見ていきます。 shopspring/decimalとはなにか まずはライブラリのREADMEをみます。 Arbitrary-precision fixed-point decimal numbers in go. Note: Deci…
5ヶ月前
記事のアイキャッチ画像
最近のRedash
カンム テックブログ
SREの菅原です。 この記事はカンム Advent Calendar 2024の4日目の記事です。 最近のRedashの開発状況について、知っている範囲ですこし書いてみたいと思います。 redash.io Redashといえば様々なデータソースをSQLを使って可視化できるBIツールで、カンムでも業務のデータ分析に使われています。 ただ、一昔前にRedashがはやっていた頃に比べると、最近ではトレンドからは外れたような印象があります。 実際、SaaS Redashが終了した2021年から2023年の4月あたりのGitHubのアクティビティを見ると、活動が停滞しています。 Contributors…
5ヶ月前
記事のアイキャッチ画像
モダンな状態管理の探求:Redux からZustand へ ― 実装から原理まで
カンム テックブログ
はじめに こんにちは、エンジニアの王です。 フロントエンドの開発者として、私はいくつかのプロジェクトでRedux Toolkitを使用してきました。Redux Toolkitは確かに強力な状態管理ツールですが、プロジェクトが進むにつれて、その構造的な複雑さを次第に強く感じるようになりました。 そこで、より軽量で使いやすい状態管理ライブラリを探し始めました。新しいソリューションの条件として、Redux Toolkitの堅牢性は維持しつつ、より簡潔なAPIと学習コストの低さを重視しました。その過程で出会ったのが、Zustandです。 Reduxの実装の複雑さ シンプルなカウンターを管理するためにR…
5ヶ月前
記事のアイキャッチ画像
社内ものづくりイベント「Builders Day」を初開催した話
カンム テックブログ
こんにちは、nakaji_dayoと申します。カンムでエンジニアリングマネージャーをしています。 2024年9月に「Builders Day」という社内ものづくりイベントを初開催しました。本稿ではイベント企画の背景や開催時の様子の紹介をします。 Builders Dayとは はじめにイベントの概要ですが、「Builders Day」は普段の業務や職種に関係なく色々なメンバーがチームを組み、アイディアを出し合い、ものづくりを楽しむイベントです。 作るものは業務に関係なく完全に自由で、制作には1営業日を使います。また、発表会を社員総会に合わせる形でオフライン開催することにしました。 note.co…
5ヶ月前
記事のアイキャッチ画像
SMS配信の冗長化と配信プロバイダの自動切り替え
カンム テックブログ
エンジニアの佐野です。カンムでは SMS を多用しています。例えば以下のようなポイントで使っています。 ユーザ新規登録時の認証コード送信 ログイン時の認証コード送信 3Dセキュア 認証時 後払い機能利用時 ユーザにメッセージを送る時 ...etc ここでもし SMS 送信ができないような事案が発生するとユーザの体験が悪くなり KPI にかなりのダメージが出ます。今回は SMS 送信が滞らないように戦った歴史と設計について書きます。 SMS 配信サービスの利用と初期の頃の設計 SMS 配信時に問題が発生するポイント PaaSoo 導入と手動切り替え時代 Nexmo *1 接続時のエラーハンドリン…
6ヶ月前
記事のアイキャッチ画像
Atlantisのマルチクラウドへの対応について
カンム テックブログ
SREの菅原です。 カンムではAWSやGCP、Datadogなど様々をIaaS・SaaSをterraformで管理しているのですが、以前は「GitHub Actionsでplan」「管理者や開発者が手元でapply」というフローになっており、terraform applyの実行が管理者や一部の権限を持った開発者に集中してしまい、インフラの変更作業の速度が落ちてしまっている状態でした。 しかし、Atlantisという「Pull Request上でterraform plan・applyを実行する」ツールを導入したことで、うまくapply権限を各開発者に委譲することができるようになったので、Atl…
6ヶ月前
記事のアイキャッチ画像
Go の静的解析で DB へのコミット漏れを検出する
カンム テックブログ
エンジニアの佐野です。カンムはバックエンドに PostgreSQL を置きつつサーバを Go で書いています。DB のトランザクションの取り回しは概ね次の様なイディオムになっているのですが、先日 Commit() が漏れている箇所を見つけまして...。結果としてそれについては大きな問題はなく秋の夜長に遅めの肝試しをする程度で済んだのですが、これは事故に繋がるためトランザクションの Commit 漏れ(defer Rollback() 漏れも)を検出する Linter を書きました。 tx, err := db.BeginTx(ctx, nil) if err != nil { return e…
7ヶ月前
記事のアイキャッチ画像
Terraform Providerを使ったcron式のチェック
カンム テックブログ
SREの菅原です。 カンムのサービスのバッチ処理は基本的にEventBridge Scheduler+ECSで動いており、バッチのスケジュールはterraformで以下のように定義されています。 module "kanmu_batch" { # バッチまわりはモジュール化 source = "../modules/batch" for_each = { hogehoge-batch = { schedule_expression = "cron(0 0 * * ? *)" command = ["/batch/bin/hoge", "hikisu"] is_enabled = true } f…
7ヶ月前
記事のアイキャッチ画像
terrraformを使ったGoのLambdaの管理
カンム テックブログ
SREの菅原です。 カンムのサービスはWebサービス・バッチ処理なども含めて基本的にはECS上で動かしているのですが、簡単なバッチ処理はLambda+EventBridge Schedulerの組み合わせで動かすこともあります。 LambdaはECSに比べてDockerイメージのビルドやECRの準備が不要で作成の手間が少ないのですが、terraformでデプロイまで含めて管理しようとすると少し問題がありました。 terraformでのLambdaのデプロイの問題点 例えば以下のような構成のNode.jsのLambdaをデプロイする場合 / ├── lambda.tf └── lambda ├─…
7ヶ月前
記事のアイキャッチ画像
ウォーターフォールを見直して自チームに最適化した開発フローを構築する
カンム テックブログ
エンジニアの佐野です。バンドルカードではポチっとチャージという後払いの機能を利用する際に年齢確認が必須となりました。通信キャリアや銀行との連携等によって年齢確認ができるようになっています*1。今回はこの機能の開発を題材に普段開発でどのようなことを考えて開発し、本機能の開発ではどのようなフローを構築して進めていったかを書きます。 少し概要を書くと、本件についてはウォーターフォールモデル "のような" 開発フローで行いました。事業上の理由でビッグバンリリースが必要でした。要件をしっかり決めてステップバイステップで開発を行いすべての機能を同時にリリースする...案件の性質を考えるとウォーターフォール…
8ヶ月前
記事のアイキャッチ画像
「React Native Meetup #17」を開催しました
カンム テックブログ
こんにちは、カンムのエンジニアリングマネージャー佐藤です。 先日、React Native Japanと一緒に開催した「React Native Meetup #17」のイベントレポートをお届けします!前回に引き続き、今回もたくさんの方にご参加いただき、賑やかな会になりました。 皆さんのご参加、本当にありがとうございました。それぞれの発表者が共有してくれた経験や知見のおかげで、懇親会までとても充実した時間を過ごすことができました。 発表内容のご紹介 @mtry さんの「EAS Custom Buildを使ってビルドの開始/完了をSlackに通知する方法」 @mtry さんは、EAS Custo…
8ヶ月前
記事のアイキャッチ画像
バンドルカードが Google Pay™ に対応しました
カンム テックブログ
バンドルカードのバックエンドエンジニアをしているshibaです。生粋のiPhoneユーザです。 昨年の10月頃にバンドルカードは Google Pay に対応しました。少し遅くなってしまいましたが、 Google Pay 対応について簡単に紹介したいと思います。なお、 Google Pay というアプリ名は2023年3月頃からGoogle ウォレット に変更され、 Google Pay はGoogle ウォレット 内の1機能という扱いになっています。 Google Pay について まず、 Google Pay や、 Google Pay を使った決済の仕組みについて簡単に紹介します。 まずバ…
9ヶ月前
記事のアイキャッチ画像
「React Native Meetup #16」を開催しました
カンム テックブログ
こんにちは、カンムのエンジニアリングマネージャーの佐藤です。カンムでは5月30日(木)に、React Native Japanコミュニティと協賛してReact Native Meetup #16を開催しました。本記事では、その様子をレポートしました。 当日の様子 イベントは、弊社オフィスの会議室で行われました。当日は30人ほど集まり、とても活気のある勉強会となりました。発表の後には懇親会も設けられ、皆様の意見交換や情報共有が盛んに行われました。 発表内容の紹介 今回は、弊社の社員含め5名のスピーカーからLTが発表されました。 1. 「React Navigation v7で導入されるStati…
10ヶ月前
記事のアイキャッチ画像
【Go Conference 2024】プロポーザルに通ったカンムのエンジニアが準備したこと、通った後にやったことʕ◔ϖ◔ʔ
カンム テックブログ
ソフトウェアエンジニアの@sho-hataです。 2024年6月8日(土)開催のGo Conference 2024に、ソフトウェアエンジニアの私と@bisho-joの2人が登壇します。また、カンムはブロンズスポンサーとして協賛します。 gocon.jp カンムが提供している バンドルカード や Pool のバックエンドは主に Go で開発しており、スポンサーとして継続的に協賛させていただいております。 tech.kanmu.co.jp tech.kanmu.co.jp このイベントを通して Go コミュニティの発展に寄与できればと思っています。 セッションに登壇します ʕ◔ϖ◔ʔ バンドルカ…
1年前
記事のアイキャッチ画像
Poolのソフトウェアエンジニアを募集しています
カンム テックブログ
ソフトウェアエンジニアのhataです。 Poolはソフトウェアエンジニアの募集を公開しました。 ソフトウェアエンジニア(フロントエンド)- Pool / 株式会社カンム 今回の記事では、Poolというサービスを開発する面白さや、直近抱えている課題について紹介します。 Poolについて pool-card.jp Poolは投資と決済が一体となった、国内でもあまり類を見ないサービスで、値動きを気にせず資産運用ができる特徴と、投資した金額をVisaカードの利用可能額として使える特徴を持っています。これによりカードを使いつつ資産形成していけるという、他にはない投資体験ができることを目指しています。 2…
1年前
記事のアイキャッチ画像
カンムの機械学習インフラの今 2023 年版
カンム テックブログ
こんにちは。ソフトウェアエンジニアの新田です。こちらは カンム Advent Calendar 2023、8日目の記事です。 昨日はデザイナー torimizuno さんによる バンドルカードの Google Pay デザイン でした。今年のバンドルカードの目玉リリースの1つであるスマホタッチ決済(Google Pay)のデザインについて説明されていて、凄く面白いです。 今回は、カンムの機械学習のインフラ周りについて話します。実はカンムのテックブログでは2年半前に同じテーマの記事があります。この内容からいくつかアップデートがあるので、今回はその差分を重点的に拾っていこうと思います。 tech.…
1年前