Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マスタデータ問題、マイクロサービスでどう解くか
Search
Kato Keisuke
December 04, 2025
Programming
0
100
マスタデータ問題、マイクロサービスでどう解くか
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
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
220
React Native New Architecture 移行実践報告
taminif
1
150
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
340
tparseでgo testの出力を見やすくする
utgwkk
2
220
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
140
Integrating WordPress and Symfony
alexandresalome
0
150
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
320
AIコーディングエージェント(Gemini)
kondai24
0
220
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
TestingOsaka6_Ozono
o3
0
150
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Site-Speed That Sticks
csswizardry
13
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Done Done
chrislema
186
16k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Unsuck your backbone
ammeep
671
58k
Building an army of robots
kneath
306
46k
Rails Girls Zürich Keynote
gr2m
95
14k
Practical Orchestrator
shlominoach
190
11k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.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