Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Sansan Data Hubのリアーキテクチャの裏側 Vol.2 : AI活用による開発生産性の向上

こんにちは、技術本部 Sansan Engineering Unit Data Hub グループの横山です。 私たちは現在、Sansan Data Hubのリアーキテクチャに取り組んでいます。

本連載では、そのリアーキテクチャについて紹介していきます。第2回となる今回は、私たちが構築したアーキテクチャにおけるAI活用について紹介します。

標準化されたアーキテクチャとAI活用

前回の記事では、Sansan Data Hubのリアーキテクチャにおけるドメイン分離について紹介しました。

私たちがリアーキテクチャで最初に取り組んだのは標準化でした。集約ごとにバラバラだった実装パターンを統一することで、人間による開発の生産性向上を目指していました。具体的には、共通基盤の開発コスト削減、コードの可読性向上、新メンバーのオンボーディング効率化などです。

この標準化は主に人間の開発者を想定して設計しましたが、結果的にAIにとっても理解しやすく、コード生成に適した構造になっていました。ある程度は予想していましたが、実際に使うとその効果は期待以上でした。

人間向けに設計した標準化がAIにも効果的だった理由は3つありました。

  1. 統一された構造パターン: すべての集約が同じ構造(ハンドラー、アプリケーションサービス、リポジトリ)を持つため、AIがパターンを学習しやすい
  2. 明確な責務分離: 各レイヤーの役割が明確なため、AIが「どこに何を書くべきか」を理解しやすい
  3. テスタビリティの担保: サービスレベルテストが標準化されているため、AI生成コードの品質を確実に検証できる

この標準化された基盤を活用して、AIを開発プロセスに組み込むことにしました。実際の活用方法について、開発フローを3つのステージに分けて説明します。

1. 設計ステージ:構造設計とモデリングの支援

設計段階では、各集約の構造をFigJamで可視化しています。社内の有志が開発したFigJam MCP(Model Context Protocol)により、ClaudeがFigJamの設計図を読み取れるようになり、設計レビューや実装への変換を支援できるようになりました。

現在の運用では、人間がFigJamで設計図を作成し、ClaudeがMCP経由でその内容を読み取ります。Claudeによる設計レビューやDevinによるテンプレート生成ツールを使ったコード生成を行っています。将来的にMCPが書き込みに対応すれば、AIによるFigJam図の自動生成も可能になると考えています。

設計フェーズでは、以下の要素を検討しています。

  • ドメインモデリング: ビジネス概念の整理と集約境界の定義
  • インターフェース設計: 集約間の通信方式と依存関係の明確化
  • データフロー設計: イベント駆動による疎結合なアーキテクチャの構築
  • API境界の定義: 外部システムとの接続点の標準化

FigJam MCPの最大の効果は、設計図をAIが直接読み取れるようになったことです。これにより、設計レビューの段階で依存関係の問題や集約境界の不整合を早期に発見できるようになりました。また、設計図から直接コード生成へつなげられるため、設計意図が実装に正確に反映され、手戻りも大幅に削減されています。

2. 実装ステージ:集約単位での高速開発

実装段階では、設計ステージで作成したFigJamの設計図を基に、集約単位でのモジュール化を活かした開発を行っています。

標準化された構造によりAIが学習しやすくなったため、実装の効率が大幅に向上しました。開発は以下の流れで進めています。

  1. 設計からのテンプレート展開: FigJamの設計図を基に、コード生成ツールが集約の標準構造(ハンドラー、アプリケーションサービス、リポジトリ、テスト)を自動で生成。設計で定義したAPIやイベントの仕様がコードの骨格として活用されます
  2. AI実装支援: 設計図の情報と生成されたTODOコメントをガイドに、AIがドメインロジックを実装。設計段階で整理した処理フローやビジネスルールに基づいて実装を進めていきます
  3. 人による価値創出: 定型処理はAIが担当するため、開発者はビジネス要件の解釈やドメインルールの実装といった、人間の判断が必要な価値の高い作業に専念

この分業により、開発者はビジネスロジックに集中できるようになりました。新メンバーも既存パターンとAI支援により、短期間で開発に参加できるようになったことは大きな成果です。

3. 品質保証ステージ:サービスレベルテストによるAI検証

品質保証については、従来からサービスレベルテストを採用していました。これはエンドポイント単位で入出力を検証するテスト手法で、内部実装に依存せず、HTTPリクエストに対して期待するレスポンスが返ることを確認します。

このテスト方式が、AI活用において非常に有効でした。AIが生成したコードは内部実装が予測しづらいものの、外部仕様を満たしていれば品質を保証できます。また、入出力パターンが明確なため、AI自身もテストコードを生成しやすく、実装とテストの両方をAIが担当できるようになりました。

「AIがどのような実装をしたか」ではなく「期待通りに動作するか」を検証できるため、安心してAIを活用できる環境が整いました。

新アーキテクチャでは、すべてのサービスをHTTPサーバーとして実装しています。これは共通部品の開発コストを削減するためのパターン統一でしたが、品質保証においても大きなメリットをもたらしました。非同期処理もCloud Pub/SubのPush Subscriptionを活用してHTTPエンドポイントとして統一したことで、すべての機能を「HTTPリクエストを送って期待するレスポンスが返ってくるか」という一貫した方法でテストできるようになりました。

Data Hubは多様な外部システムと連携する必要があるため、本番環境に近い状況でテストできるよう、以下の仕組みを構築しています。

  • クラウドサービスエミュレーター: Cloud SpannerやPub/Subなどにつなぐことで、実際のクラウドサービスと同等の動作を再現
  • 外部システムとの連携テスト: 現時点では外部API呼び出しをラップしたライブラリを開発し、その中でテスト用の機能も提供しています。将来的には、決められたレスポンスを返すスタブサーバーの実装も検討しています

テストでは以下の観点から検証しています。

  1. APIレスポンスの検証: APIが正しいステータスコードとレスポンスボディを返すか
  2. データの永続化: Cloud SpannerやCloud Storageに期待するデータが正しく保存されるか
  3. 非同期処理: Cloud TasksやPub/Subに適切なメッセージが送信されるか
  4. 外部連携: 外部システムへの接続が正常に動作するか
  5. エラー処理: 異常系でも適切にエラーハンドリングされ、データ整合性が保たれるか

これらのテストによって、AIが生成したコードでも外部から見て期待通りに動作することを確認できます。

AI活用の成果

AIを開発プロセスに組み込んだ結果、以下のような成果が得られました。

  • 開発生産性の向上: ボイラープレートコードをAIが生成することで、開発者はビジネスロジックに集中できるようになりました。新規集約の追加時も、初期実装の大部分をAIが生成するため、開発期間が大幅に短縮されています

  • 品質の安定化: エミュレーターベースのサービステストにより、AIが生成したコードでも本番環境での不具合発生率が大幅に減少しました。特に外部システムとの連携部分は従来見逃しがちだった箇所ですが、APIラップライブラリのテスト機能により開発段階で問題を発見できるようになりました

  • 学習効果の向上: AIが開発プロセスに統合されたことで、新メンバーのオンボーディング期間が大幅に短縮されました。FigJamの設計図とAIの支援により、アーキテクチャの理解とコーディング規約の習得を同時に進められるようになっています

  • レビュー効率化: 定型的なコードはAIが生成し、サービスレベルテストで品質が保証されるため、レビュアーはビジネスロジックや設計の妥当性に焦点を当てられるようになりました。これにより、レビューの質が向上し、より本質的な議論に時間を割けるようになっています

課題と今後の展望

AI活用を進める中で、いくつかの課題も見えてきました。特に、最終的なアウトプットが明確になっていない探索的な開発フェーズでは、AIの効果が限定的でした。テンプレート化されていない新しいパターンのコードを書く際や、コーディングしながら同時に設計を詰めていくような場面では、人間の創造性と試行錯誤が欠かせません。また、AI生成コードの最終的な仕上げや細かな調整では、パフォーマンスチューニングやエラーハンドリングなど、経験に基づく判断が重要な役割を果たしています。

このような経験から、私たちは「AIが得意とする定型処理」と「人間の創造性が必要な探索的開発」を明確に切り分けることの重要性を学びました。標準化されたパターンがある部分はAIに任せ、新しい価値を生み出す部分は人間が担うという役割分担により、それぞれの強みを最大限に活用できています。

今後は、設計の自動化、リファクタリング支援、テストケースの自動生成など、開発ライフサイクル全体にAIをさらに統合していく予定です。これにより、開発者はより高次の意思決定や価値創出に専念できる環境を目指しています。

まとめ

今回は、Sansan Data Hubのリアーキテクチャにおいて、AIを活用した開発フローをどのように構築したかを紹介しました。

設計段階でのFigJamとMCP、実装段階でのコード生成ツールとAI、そしてサービスレベルテストによる品質保証。これらを組み合わせることで、AIと人間がそれぞれの強みを活かした開発体制を実現しました。

AIを魔法のツールとして扱うのではなく、適切な制約と検証の仕組みの中で活用することが重要です。サービスレベルテストによる品質保証があるからこそ、AIが生成したコードでも安心して本番環境にデプロイできます。

標準化されたアーキテクチャにより、特定のAIツールに依存しない基盤を構築できたことも大きな成果です。AI技術が進化しても、この基盤の上で新しい技術を取り入れていくことができると考えています。

AI技術の進化は速く、今回紹介した仕組みも日々改良を重ねています。完璧ではありませんが、実用レベルでAIを活用した開発が実現できています。この記事がAI活用を検討されている方の参考になれば幸いです。

Sansan技術本部ではカジュアル面談を実施しています

Sansan技術本部では中途の方向けにカジュアル面談を実施しています。Sansan技術本部での働き方、仕事の魅力について、現役エンジニアの視点からお話しします。「実際に働く人の話を直接聞きたい」「どんな人が働いているのかを事前に知っておきたい」とお考えの方は、ぜひエントリーをご検討ください。

© Sansan, Inc.