今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

juspay/hyperswitch

複数の決済プロセッサに対応したオープンソース決済インフラストラクチャです。

Stripe 1本で動かしていた決済処理に、Adyen・Worldpay・Checkout.comなどを足したいと思った瞬間から、hyperswitchの出番です。カードBIN・地域・決済手段ごとに再試行ルートを設定すれば、失敗していた決済が別のゲートウェイで通る様子を実際のダッシュボードで確認できます。VGSやTokenExの保管庫をそのまま使えるため、既存のカードデータを移さずに済み、PCI対応の手間を増やさずに複数PSP運用を今日から試せます。

01 / 概要
何をするものか一文で言うと
ひとことで複数の決済プロセッサに対応したオープンソース決済インフラストラクチャです。

Hyperswitchは、Stripe・Adyen・Braintreeなど120以上の決済プロバイダーに単一のAPIで接続できる、Rust製のオープンソース決済オーケストレーション基盤です。決済ルーティング、カードやトークンの保管庫、加盟店向けの収益回復・照合機能をモジュールとして提供します。コードはCargoワークスペース構成で、`router`と`scheduler`という2つの実行バイナリに分かれています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

コア処理は、crates配下に数十個あるCargoクレートへ分割されています。Cargo.tomlのmembersは「crates/*」です。これによりワークスペース全体が1つのRustプロジェクトとしてビルドされます。Dockerfileは2段階構成です。`rust:trixie`イメージ内でcargo buildを実行したあと、実行用の`debian:trixie`イメージに`router`または`scheduler`バイナリだけをコピーします。`scheduler`バイナリはSCHEDULER_FLOWという引数でconsumer役とproducer役に分かれ、非同期ジョブ処理用のプロセストラッカーとして動きます。決済処理の中核であるrouterは、actix-web基盤のAPIサーバーです。api_modelsやdiesel_modelsなど共通クレート経由でPostgreSQLにアクセスします。ルーティング判断は、決済処理とは別立てのdecision-engine API群が担います。ゲートウェイごとの成功率やコストに基づき、最適なPSPを選ぶ仕組みです。分析機能はanalyticsクレートが担当します。AnalyticsProvider抽象を介したClickHouseやPostgreSQLへのクエリ結果が、メトリクスとして集計される仕組みです。`.clippy.toml`には、時刻取得やUUID生成の直接呼び出しを禁止するdisallowed-methods設定があります。common_utils経由の処理に統一し、リプレイ可能な実行ログを保証する設計です。v1とv2というCargo featureでAPIバージョンを切り替えられる点もクレート定義から確認できます。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    git clone後にscripts/setup.shを実行すると、DockerまたはPodmanの有無が検出されます。続けてStandard・Full・Minimalのいずれかを選ぶプロンプトが表示されます。

  2. STEP 02

    選択後はdocker composeで複数のコンテナが起動します。routerクレートはlto有効かつcodegen-units=1のreleaseプロファイルを使うため、初回ビルドには相当な時間がかかります。

  3. STEP 03

    起動完了後にControl CenterのURLがターミナルへ表示されます。ブラウザからログインし、決済プロバイダーの接続情報を登録できます。

  4. STEP 04

    /paymentsエンドポイントへAPIリクエストを送ると、登録済みのPSPに向けたテスト決済がrouter経由で実行されます。

  5. STEP 05

    Fullプロファイルを選ぶと、schedulerバイナリや監視系のコンテナも起動します。analyticsクレートが提供する集計画面も確認できる状態になります。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手元に残るのは、router APIサーバーとschedulerジョブ処理、PostgreSQLなどを含むDocker構成一式です。加えてブラウザで操作できるControl Centerダッシュボードも使えるようになります。登録したテスト用PSPへ決済リクエストを送ると、成功または失敗のレスポンスが返ってくる状態になります。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

releaseプロファイルはlto有効かつcodegen-units=1のため、初回ビルドはマシン性能によって数十分単位の時間を要します。

02

Stripe・Adyenなど実際のPSP連携を試すには、各社の有効なAPIキーが別途必要です。素のquickstartだけでは、決済体験の全体像までは確認しきれません。

03

analyticsクレートが使うClickHouseやopensearchは、featureフラグ付きの任意依存です。そのためStandardプロファイルの範囲では、分析ダッシュボードの一部が動かない可能性があります。

04

crates配下は数十個のクレートに分かれた大規模なワークスペースのため、コード全体を把握するには相応の時間が必要です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

自社で決済PSPへの接続やルーティングを内製したいエンジニアリングチームに向いています。Cargo.tomlの厳格なclippy設定やDockerfileの多段ビルド、CIワークフロー群の充実から、実運用を意識した設計であることはソース自体から確認できます。ただしPCI準拠などの監査要件は、設計意図の確認だけでなく自組織での検証が別途必要です。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する