Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI時代に考える、Sansanの新規プロダクトのアーキテクチャ

Avatar for SansanTech SansanTech PRO
February 25, 2026

 AI時代に考える、Sansanの新規プロダクトのアーキテクチャ

■ イベント
Sansan Tech Talk @関西 〜大阪からプロダクトを牽引する!技術とカルチャーのリアル〜
https://sansan.connpass.com/event/381322/

■ 発表者
技術本部 Data Intelligence Engineering Unit
横山 拓史

■ 技術本部 採用情報
https://media.sansan-engineering.com

Avatar for SansanTech

SansanTech PRO

February 25, 2026
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. Data Intelligence Engineering Unit 横⼭ 拓史 AI時代に考える、 Sansanの新規プロダクトの アーキテクチャ Sansan

    Tech Talk @関⻄ 〜⼤阪からプロダクトを牽引する!技術とカルチャーのリアル〜
  2. 横⼭ 拓史 Sansan株式会社 Data Intelligence Engineering Unit ⼤学卒業後、SESエンジニアとして 様々な業界のプロジェクトに関わる。 Sansanに業務委託として参加したことを契機に

    Webアプリ開発に興味を持ち、 別プロダクトのアーキテクトを経て 2022年にSansanに正式にジョイン。 Bill Oneではマネージャーとして参画し、 現在はマネジメントもできるテクニカルリードとして 多⾓的にSansan Data Intelligenceプロダクトに関わっている。
  3. 何やってたの? - 開発基盤作ってました - 技術選定(Google Cloud + Go) - Argo

    CDベースのCI/CDフロー - DDDに由来するBounded ContextやAggregateによるディレクトリ構成 - ConnectとPub/Sub push Subscriptionを中⼼としたHTTPサーバーで完結するア ーキテクチャ - 基本的な共通ライブラリとテストのための基盤の提供 - 開発を⾼速化するためのボイラープレートとツール群 つまり、開発者がどうやって新機能の開発、運⽤を⾏っていくかの デザインをしていました
  4. 1. コンテキストを近くに置く - やってみてわかったこと - ドキュメントとコードベースの 整合性をとりやすい - AIによるコードレビューでADRを参考に してくれる

    - AIがコード出⼒する際もADRを参考に してくれる ドキュメント⾃体を書くときも AIが使える - 各種ADRやコードベースを参考にしながら ドキュメントを出⼒してくれる - ドキュメントそのものに対しての ADR もある ので、それも参考にしてくれる GitHub Actionsとの親和性もいい - ドキュメントが古くなっていないかの チェックを⽉1で実⾏→⾃動Issue化 ドキュメントレビューの体験向上 - AIレビューが実⾏される - GitHubによるレビュー体験の統⼀ ドキュメントの検索性はあまりよくない - 今のところAIで探している - 将来的にはAIでまとめドキュメントを作ったりするかも
  5. 2. 全てをAIに任せない - directory構造 - DDDをベースとした3層の構造化でコンテキストを整理し、 スコープを明確化した 集約がpackageとしてプレゼンテーション層〜インフラストラクチャ層の 4層を包含している 集約を増やすことでAPIをブロックのように増やせる構造にしている

    BC (Bounded Context) DU (Deployment Unit) Aggregate (集約) BC: 知識・語彙の境界 (チームの境界) DU: デプロイ単位 (1プロセス、1コンテナ) Aggregate: トランザクション境界 (ドメインモデルの単位) 例: tenant/authorization/role
  6. 2. 全てをAIに任せない - file構造 - role/ $sci gen template operation

    ¥ --bounded-context tenant --deployment-unit authorization --aggregate role --operation add コマンドを叩くと ファイルが出⼒される。 addのような オペレーション単位で 増やすこともできるし、 BC等が全くない状態から 丸ごとアプリケーションを 作ることもできる handler_v1.go APIエンドポイント add_v1_handler.go リクエスト受付 add_v1_application_service.go ユースケース add_v1_test.go テストコード internal/core/ entity.go ドメインロジック vo.go 値オブジェクト repository.go データ永続化 add_v1_adapter.go データ変換 added_event.go イベント定義 出⼒
  7. 2. 全てをAIに任せない - やってみてわかったこと - ディレクトリとしてコンテキストを 区切ることで、AIが把握する必要の あるコンテキストのスコープが明確に ボイラープレート側にAIへの TODOコメントを記述できるので

    プロンプト側で楽ができる ボイラープレート側にテストの型も 持たせているので⾃然と テストカバレッジも上がっていく ボイラープレート⾃体が 安定するまでツールのメンテナンス コストがかかる - ⼩規模なプロジェクトには向かない アプローチではある ボイラープレートの内容変更を 既存に展開するのが⼤変 - スピード重視で共通化をさぼっていたため 今後の課題
  8. 3. 短いFeedback Loopを構築する - Service Level Test - 操作の⼊⼒→出⼒を検証するテスト (ビジネスロジック全体をテスト)

    - 実際のHTTPリクエスト経由でテスト - モックではなく エミュレーターを利⽤(devcontainerで提供)することで 実際の実装 を使⽤ - Cloud Spanner - Cloud Pub/Sub - Cloud Storage - etc… API全体を丸ごとテストとしてカバーすることで、 デプロイ → 動かない → 修正 → 再デプロイ というLoopをローカル環境で完結できるようにした
  9. 3. 短いFeedback Loopを構築する - さらにシフトレフト! - AIが⾃⼰チェックしてくれるようになったとしても、 慣れてくるとlintやtestの実⾏時間が遅いと感じるようになる。 特にlintは同じ出⼒エラーを何度も繰り返す。 Claude

    Code Skills, Rules, Hooksを駆使することでそもそもの 出⼒内容を向上させる。 特にSkillsは各ADRにリンクさせることで、 出⼒内容を任意のADRのルールに従っている状態に近づけられた。 (過信はNG)
  10. 3. 短いFeedback Loopを構築する - やってみてわかったこと - lintが厳しすぎると、 AIは永遠にlint fixする -

    style的なものであればlintを緩くするのも⼿ それでも変なコードを 出⼒するときはある - 愛をもって接しましょう どれだけシフトレフトできるかが ⽣産性に直結する テスト等の仕組みがまだ提供できていない CI/CDなどは、基盤機能の提供がある場所に ⽐べて明らかに⽣産性が落ちる レビューのようなAIによるチェックを いれるのであれば別セッション上で 評価させた⽅がより精度が⾼い 例えばコード⽣成させた同じセッションで 「ADR との整合性とれてる?」って聞くより も、別セッションで評価させた⽅が精度が⾼い
  11. まとめ チェックと段階的なFeedback Loopを構築することで、 より早いフェーズでコードの品質を向上し効率化 1 コンテキストを 近くに置く ドキュメントを git管理した。 副作⽤として

    ワークフローの構築が 簡単になった 2 全てをAIに 任せない Directoryで コンテキストの スコープを区切り、 ボイラープレート ツールの整備をした 3 短いFeedback Loopを構築する Skillsによる 出⼒内容の補正、 ローカルでの静的解析 やテストによる
  12. 直近の取り組み - Spec Driven Development - 仕組みは作ったのでPoC〜展開のフェーズへ - Claude Code

    Skills, Rules, Hooksの構造化と最適化 - AIを⾃⼰点検可能にし、出⼒するコードの精度を⾼めて コードレビューをなくす ⽬標は、従来のチームのアウトプットを 個⼈が出せるようになること!