法人支出管理サービス「バクラク」のインフラアーキテクチャ図
アーキテクチャの工夫ポイント
バクラク事業部では「経費精算」「請求書受取」「ビジネスカード」など法人支出管理に関わる複数のプロダクトを提供しています。
お客様があるプロダクトを一つだけ利用するだけでなく、複数のプロダクトを利用していただくことで共通のデータを統合したシームレスでより良い体験を提供することを目指しています。これを実現するにはプロダクト間の多様な連携が不可欠です。
そこで、プロダクトを跨いで集約されたGraphQLスキーマを導入し、GraphQLサーバ (graphql-gateway) を中心とするアーキテクチャに移行しています。各プロダクトのウェブアプリはgraphql-gatewayに問い合わせることで必要な情報にアクセスします。graphql-gatewayの裏側では、Protobufで定義した責務を実装するGoのConnect (https://connectrpc.com/) サービスが多数動作しており、各プロダクトの特定ドメインのデータを取得したり、またはプロダクトによらず共通で利用できるデータをサーブしたりします。graphql-gatewayとConnectのサービスは、ビジネスドメインに集中するべくコード生成を活用したmonorepoで開発しています。
現在のアーキテクチャの課題と今後の改善予定
ドメインの内部インタフェースのConnect化とgraphql-gatewayによるプロダクトを跨いだ集約の実現はこのアーキテクチャの目標の1つですが、まだ道半ばであり絶賛進行中です。一方で従来のプロダクトごとのBackend APIを新しいmonorepoのアーキテクチャとどのように・どれくらいの期間やスコープで統合していくかなどは引き続き向き合っていく必要があります。
また、monorepoで開発するConnectのサービスは、可能な限り疎結合になるように小さい単位で論理的に分割されています。この論理的なサービスは物理的なECS FargateのServiceと一対一でマッピングするという設計を当初行いました。それから時が経ちサービス数は順調に増加し、執筆時点では50+のサービスが存在します。チーム数の増加は緩やかなこともあり、物理的なECS Serviceに論理的なサービスを集約させることでインフラやデプロイの取り回しを改善する計画を立てています。
◆執筆:バクラク事業部 Platform Engineering部 DevOpsチーム テックリード @itkq
【サービス公式サイト】
https://bakuraku.jp/
会社情報
株式会社LayerX
「すべての経済活動を、デジタル化する。」をミッションに掲げるSaaS+FinTechスタートアップです。 法人支出管理サービス「バクラク」を中心に、デジタルネイティブなアセットマネジメント会社を目指す合弁会社「三井物産デジタル・アセットマネジメント」、大規模言語モデル(LLM)関連技術を活用し企業や行政における業務効率化・データ活用を支援する「AI・LLM事業」などを開発・運営しています。