Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マスタデータ問題、マイクロサービスでどう解くか
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kato Keisuke
December 04, 2025
Programming
0
280
マスタデータ問題、マイクロサービスでどう解くか
2025-11-30 freee技術の日2025
https://freee-tech-day.freee.co.jp/2025/
Kato Keisuke
December 04, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
190
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
200
CSC307 Lecture 02
javiergs
PRO
1
770
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
990
AI時代の認知負荷との向き合い方
optfit
0
150
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
MUSUBIXとは
nahisaho
0
130
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
380
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
130
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
24k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
300
Claude Code のすすめ
schroneko
67
210k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
88
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Building an army of robots
kneath
306
46k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
930
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
63
Odyssey Design
rkendrick25
PRO
1
490
What does AI have to do with Human Rights?
axbom
PRO
0
2k
Transcript
None
マスタデータ問題 マイクロサービスでどう解くか 加藤啓輔 2025年11⽉30⽇
「freee会計」という巨⼤なモノリスから、取 引先マスタをいかにして切り出したか。 モジュラモノリスを経た段階的な分離戦略、 Write機能のみを先⾏して切り出すCQRSの採 ⽤、そして複雑な分散トランザクションを回避 しつつ、データ整合性を担保するための削除の 作法まで。技術的な難所と、共通化に伴う組織 的な「合意形成の壁」をどう乗り越えてきた か。数々の困難な意思決定の中で得られた、ビ ジネスを⽌めないための「泥臭い」実践知を凝
縮してお届けします。 マスタデータ問題 マイクロサービスで どう解くか
加藤啓輔 freee⼈事労務の開発の4年を経 て、現在ではマスタデータ基盤を 4年開発。プロダクトリードエン ジニアとマネージャーを務めてい ます。 統合モジュール開発部 共通マスタチーム マネージャー
ツリー構造や 履歴管理 企業や⽀店、部署、 ⼈など登録される 単位が様々 細かい履歴管理 SKUでの管理 私たちのチームが扱ってきた「マスタデータ」 性質の異なる多種多様なマスタが存在 商品マスタ
従業員マスタ 取引先マスタ 組織図マスタ
ツリー構造や 履歴管理 企業や⽀店、部署、 ⼈など登録される 単位が様々 細かい履歴管理 SKUでの管理 今回は「取引先マスタ」について話します 商品マスタ 従業員マスタ
取引先マスタ 組織図マスタ 取引先マスタがマイクロサービスに⾄るまでのトレードオフ
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
汎化 VS 特化 • 汎化: 「あらゆるマスタを扱えるデータベース」を⽬指す。⾃由度が⾼く、 様々なパターンに適応可能。 • 特化: freeeプロダクトのユースケースに最適化。疎結合に保ち、仕様変更の
影響を局所化する。
汎化 VS 特化 • 現実には各マスタやマスタが持つ項⽬の性質が⼤きく異なるという課題に直⾯ • 汎化させることで既存のデータや仕組みの後⽅互換性へのコストの増⼤
汎化 VS 特化 • 現実には各マスタやマスタが持つ項⽬の性質が⼤きく異なるという課題に直⾯ • 汎化させることで既存のデータや仕組みの後⽅互換性へのコストの増⼤ プロダクトの進化を加速させるため 特化させるアプローチを選択
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
取引先マスタはfreee会計という巨⼤モノリスの⼀部だった • freee会計以外の利⽤でもfreee会計のサインアップが必要 • freee会計の初期データ作成が必須となる • マスタ編集時は、freee会計画⾯への遷移が強制される • 他のプロダクトからのマスタ参照が技術的に困難 モノリスが抱える課題
モノリスからモジュラモノリスへ
モノリスからモジュラモノリスへ
モノリスからモジュラモノリスへ • 巨⼤なモノリスから⼀気にサービスを切り出すのはリスクが⾼い • 取引先マスタ関連のロジックを1つのモジュールに集約し、境界を明確化
モジュラモノリスからマイクロサービスへ
モジュラモノリスからマイクロサービスへ
モジュラモノリスからマイクロサービスへ • 開発速度の向上 デプロイタイミング、コンフリクト、コードの複雑さ、... • 責務の明確化 • 巨⼤なモノリスへの依存脱却
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
freee会計からの取引先データアクセス CQRSの採⽤
freee会計からの取引先データアクセス CQRSの採⽤ DB分離コスト 700箇所の 参照置き換えコスト
• プロダクトデータとの結合(Join)や並び替え(Sort)が必要な要件 マイクロサービス間のJoinやSort
• プロダクトデータとの結合(Join)や並び替え(Sort)が必要な要件 参照⽤のレプリケーションテーブルを Read Modelとして配布 マイクロサービス間のJoinやSort
• 書き込み処理は厳密に制御された単⽅向フローを確⽴ • freee会計から物理的にも切り離し、共通基盤としての地位を確⽴ • 既存の700箇所の参照はあえて残し、書き込みの健全化を最優先する Writeの物理分離と、Readの戦略的先送り
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
物理削除のジレンマと「アーカイブ」という解 • 取引先データは電⼦帳簿保存法もあり厳格な整合性を求められる • 物理削除はトランザクション制御が難しく、データ不整合の原因となる • ⼀⽅で分散トランザクションは複雑かつ障害の要因になり得る
物理削除のジレンマと「アーカイブ」という解 • 取引先データは電⼦帳簿保存法もあり厳格な整合性を求められる • 物理削除はトランザクション制御が難しく、データ不整合の原因となる • ⼀⽅で分散トランザクションは複雑かつ障害の要因になり得る 「アーカイブ」というステータスを設けて、 ユーザー⾃⾝がデータを復活できる体験を選択
物理削除のジレンマと「アーカイブ」という解 • 取引先データは電⼦帳簿保存法もあり厳格な整合性を求められる • 物理削除はトランザクション制御が難しく、データ不整合の原因となる • ⼀⽅で分散トランザクションは複雑かつ障害の要因になり得る 「アーカイブ」というステータスを設けて、 ユーザー⾃⾝がデータを復活できる体験を選択 分散システムの整合性を守り、ユーザーの安⼼も守る
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
基盤チームとプロダクトチームのコミュニケーション 例: これまでのマスタへの項⽬追加基準 • 将来の共通利⽤の予測: 他プロダクトで共通利⽤されるか? • ⼊⼒画⾯の選定: マスタ側/プロダクト側、どちらで⼊⼒すべきか? •
データの更新頻度: 更新頻度は⾼いか、低いか? • 共通機能への許容度: インポートやワークフローなど共通機能を利⽤するか?
基盤チームとプロダクトチームのコミュニケーション 例: これまでのマスタへの項⽬追加基準 • 将来の共通利⽤の予測: 他プロダクトで共通利⽤されるか? 項⽬の将来的な共通利⽤の有無は、現時点では予測困難 • ⼊⼒画⾯の選定: マスタ側/プロダクト側、どちらで⼊⼒すべきか?
UIや共通化要否は、ユースケース確⽴まで判断困難 • データの更新頻度: 更新頻度は⾼いか、低いか? 「更新頻度はどうなるか?」は初期段階ではイメージがつかず、保守的な判断になりがち • 共通機能への許容度: インポートやワークフローなど共通機能を利⽤するか? エッジケースなどへの対応がしづらい
基盤チームとプロダクトチームのコミュニケーション 例: これまでのマスタへの項⽬追加基準 • 将来の共通利⽤の予測: 他プロダクトで共通利⽤されるか? 項⽬の将来的な共通利⽤の有無は、現時点では予測困難 • ⼊⼒画⾯の選定: マスタ側/プロダクト側、どちらで⼊⼒すべきか?
UIや共通化要否は、ユースケース確⽴まで判断困難 • データの更新頻度: 更新頻度は⾼いか、低いか? 「更新頻度はどうなるか?」は初期段階ではイメージがつかず、保守的な判断になりがち • 共通機能への許容度: インポートやワークフローなど共通機能を利⽤するか? エッジケースなどへの対応がしづらい 予測困難性や選択の複雑性を 内包していた
意思決定の壁: コミュニケーションコストと硬直化 • ⾼頻度なコミュニケーション負荷 • 膨⼤な調整コスト • 仕様の硬直化 • 保守的な判断の連鎖
新しい項⽬追加基準 • 項⽬の共通利⽤有無を問わない • 項⽬ごとにメンテナンスのオーナーシップを明確化する • 既存項⽬利⽤の簡易化 • 共通基盤の積極的な利⽤ 将来予測や事前合意の負荷を削減し、迅速な意思決定を⽬指す
「⾨番」ではなく、安全な器(うつわ)の「設計者」へ • 定義する: プロセスとルールを整備する • 任せる: ユースケースは各チームに委譲する • ⽀える: 利⽤しやすい共通機能を⽤意する
• 予測する: 不確実な未来の利⽤シーンを問う • ⽌める: 合意が取れるまで開発をブロックする • 守る: マスタの純度を守るために制限する
01 どんなマスタを作るべきか 02 モノリスからの分離戦略 03 CQRSの実践 04 マイクロサービスにおける『削除』の作法 05
ガバナンスの壁と調整コスト 06 意思決定の学び ⽬次
迷いを減らし、顧客への価値提供に集中するために • 汎化しすぎない: 特化の選択で、エッジケースへの対応⼒を残す • 理想を⽬指しすぎない: 戦略的な先送りで遅延リスクを抑え、着実に提供する • 制限しすぎない: 権限の委譲で、意思決定スピードを上げる
プロダクトの進化を⽌めないための余白調整
None