UPSIDER Tech Blog

1つのコードで複数ブランド対応!支払い.comが仕掛けた動的テーマ切り替え術

はじめに

こんにちは。株式会社UPSIDER 支払い.com Techチームの Akanuma です。 2025年7月1日の下記プレスリリースで発表したとおり、 支払い.com はパートナー企業を通じたサービス提供を開始しました。

prtimes.jp

本記事では、パートナー企業が自社ブランドで支払い.comの機能を提供するために実装した技術的な工夫について、開発者の視点から解説します。特に、動的なブランドテーマ切り替えとセキュアなWebコンポーネント埋め込み機能の設計思想に焦点を当てます。

パートナー企業を通じたサービス提供とは

支払い.com のパートナー企業を通じたサービス提供は、パートナー企業が自社ブランドで請求書カード払いサービスを提供できるソリューションです。

このソリューションでは、ユーザーとの契約締結・クレジットカード情報の審査・カスタマーサポートなどの運用を UPSIDER が担当するため、パートナー企業は金融サービス提供のための専門的な仕組みを構築する必要がありません。これにより、パートナー企業はリスクを抑えてサービスを提供できます。

また、レベニューシェアモデルによる報酬体系も用意しており、パートナー企業にとって新たな収益基盤としてもご活用いただけます。

技術的な課題と解決アプローチ

パートナー企業を通じたサービス提供を実現するにあたり、従来の単一テーマシステムでは以下の課題がありました:

  • 静的設定: ビルドタイムで色が固定されるため、動的なブランド切り替えが困難
  • スケーラビリティ: 提携先が増える度にコード変更が必要
  • パフォーマンス: 複数テーマファイルによるバンドルサイズの増加
  • 埋め込み対応: 他社サイトでの埋め込み実装が複雑

これらの課題を解決するため、以下の技術的なアプローチを採用しました。

技術実装の特徴

1. CSS変数を活用した動的テーマシステム

パートナーブランドに合わせたUIカラーの動的切り替えを実現するため、CSS変数を活用したテーマシステムを構築しました。この技術は、支払い.comチームのフロントエンドエンジニアの太田さんが下記のブログ で紹介した手法を基盤としています。

tech.up-sider.com

また、同じくフロントエンドエンジニアの Okahashi さんが下記のブログ で紹介したデザインシステムの整備により、一貫性のあるブランドテーマの切り替えが可能となりました。

tech.up-sider.com

フォールバック機能付きテーマ設定

// セキュアなテーマ設定の考え方
const SECURE_THEME_COLORS = {
  primary: {
    // フォールバック値は安全な既定値
    base: `var(--theme-primary, #3b82f6)`,
    light: `var(--theme-primary-light, #60a5fa)`,
    dark: `var(--theme-primary-dark, #2563eb)`,
  }
} as const

// Tailwind設定での安全な統合
export default {
  theme: {
    extend: {
      colors: SECURE_THEME_COLORS
    }
  },
}

2. ランディングページ埋め込み用コンポーネント提供

パートナー企業は自社ブランドでのランディングページ作成を担当し、UPSIDER からは支払い.comの会員登録フォームを安全に埋め込むためのコンポーネントと専用スクリプトを提供しています。

iframe で埋め込まれたコードとその親となるコンポーネントの間では message イベントで連携しており、想定しているイベントを処理するための埋め込み用のスクリプトを提供しています。

※下記はイメージです

window.addEventListener(
  'message',
  (event) => {
    if (event.data) {
      if (event.data.type === 'success') {
        // 登録成功時:登録完了ページへ遷移する
        location.href = 'https://app.shi-harai.com/signup/sent_email'
      }

      if (event.data.type === 'failed') {
        // 登録失敗時:エラー表示を行う
        alert('登録に失敗しました。')
      }
    }
  },
  false
)

実際にはscriptタグで埋め込み可能な形で提供しており、このスクリプトも支払い.comチームが管理しています。

この仕組みにより、パートナー企業は複雑な実装を行うことなく、セキュリティを保ちながら効率的にランディングページを作成できます。

3. セキュアなパートナー識別とテーマ管理

パートナー別のカラーコードやサービスロゴの切り替えは、ユーザー登録時の参照元情報を基に実現しています。バックエンドで登録経路を安全に保存し、その情報に応じて適切なテーマ情報をフロントエンドに提供することで、セキュアなブランド切り替えを実現しています。

セキュリティ設計

パートナーサービスでは、以下のセキュリティ機能を実装しています:

  • 型安全なパートナーID管理: パートナー識別子の検証と不正入力のブロック
  • テーマ情報の安全管理: パートナー別テーマ設定の安全な取得と適用

技術的な工夫のポイント

今回のパートナーサービス実装では、以下の技術的工夫を行いました:

  1. 最小限のコード変更設計: 新しいパートナー追加時のコード変更を最小限に抑制
  2. CSS変数活用: フロントエンドでの効率的なテーマ管理
  3. iframe埋め込み: パートナー企業での簡単な導入
  4. 動的テーマ切り替え: ランタイムでのスタイル適用

今後の展望

現在はパートナーブランドとして変更できるUIの範囲は限られていますが、今後はより柔軟かつ効率的なパートナーブランドの訴求を可能にする機能拡充を進めていきます。これにより、「請求書のカード払い」という新たな選択肢をより多くの企業へ届けることを目指しています。

技術的には、セキュリティを最優先に以下のような拡張を検討しています:

  • テーマ管理の改善: コード変更なしでのパートナー追加を可能にする設定駆動システム
  • 高度なテーマカスタマイズ: より詳細な見た目の調整機能
  • 認証システムの強化: より安全な認証メカニズムの導入

おわりに

CSS変数を活用した動的テーマシステムと使いやすいiframe埋め込み機能により、パートナー企業を通じたサービス提供の基盤を構築できました。現在は新しいパートナー追加時にコード変更が必要ですが、今後は設定駆動システムへの移行を進め、より効率的なパートナー連携を実現していきます。

この実現に一緒に挑戦してくれるエンジニアの方も募集しておりますので、ご興味をお持ちいただけた方はぜひご連絡ください!

We Are Hiring !!

UPSIDERでは現在積極採用をしています。 ぜひお気軽にご応募ください。

herp.careers

カジュアル面談はこちら!

herp.careers

UPSIDER Engineering Deckはこちら📣

speakerdeck.com