Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
freee申告の税額計算を支える技術 / freee tech day 2023
Search
mosa
April 19, 2023
Programming
24k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
freee申告の税額計算を支える技術 / freee tech day 2023
mosa
April 19, 2023
Other Decks in Programming
See All in Programming
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
3
380
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
170
信頼性の目標を誰も求めてない
shubox
0
500
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
Press start. Python's next generation.
willingc
PRO
3
320
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
310
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
690
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
How to Ace a Technical Interview
jacobian
281
24k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Making the Leap to Tech Lead
cromwellryan
135
10k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Building AI with AI
inesmontani
PRO
1
1.2k
Site-Speed That Sticks
csswizardry
13
1.5k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Transcript
freee申告の 税額計算を⽀える技術 mosa 2023年4⽉16⽇
ここに円に切り抜いた画像を入れてく ださい mosa Software Engineerとして数社を経て2022年 にfreee⼊社。現在はfreee申告の開発を担 当。 Webアプリケーションエンジニア
freee申告
税額計算とは • [16]と[17]を⼊⼒すると[18]は⾃動で計算されて表⽰される
税額計算とは • 他の帳票にも値は連携され更新先や更新元が複数あることも
項⽬間の依存は⼤量にある... •
どのように税額計算をしているか • RelationalTreeという税額計算をするためのモジュールを作成 • RelationalTreeは名前の通り項⽬間の関係を⽊構造として動的に組み ⽴てながら計算を⾏う
RelationalTreeの動作例 A C D B 下記のような1項⽬を表す
項⽬Aをユーザーが⼿動で⼊⼒ A C D B 未到達 更新対象 差分あり 差分なし
⾊の意味 キュー
A(root node) をキューに詰める A C D B 未到達 更新対象
差分あり 差分なし ⾊の意味 キュー A
キューからAを取り出して計算 A C D B 未到達 更新対象 差分あり 差分なし
⾊の意味 キュー A • 今回はユーザーが A を⼊⼒したとしているのでAはユーザーの⼊⼒値となり、 差分ありになる
Aが差分ありなのでAに依存する項⽬ (B, C) を取得してキューに詰める A C D B 未到達
更新対象 差分あり 差分なし ⾊の意味 キュー A B C
A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味
キュー A B C キューの先頭から B を取り出して計算 • 今回は計算の結果、差分があったとする • Bに依存している項⽬は無いので差分ありでもキューに詰める項⽬は無い
A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味
キュー A B C キューの先頭から C を取り出して計算 • 今回は計算の結果、差分はなかったとする • Cに依存している項⽬はあるが差分は無いためキューに詰めない
A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味
キュー A B C キューが空になったので計算処理を終了してDBに書き込む • 今までの計算によって得られた A, B の差分はメモリ上に保持してある
RelationalTree動作まとめ 1. 根 (root_node) となる項⽬の計算を⾏う 2. 計算前後で差分があるか確認し、差分がなければ終了する 3. その項⽬に依存している項⽬を取得してキューに詰める
4. キューにある先頭の項⽬について計算を⾏う (FIFO) 5. 2.に戻る
RelationalTree作成の背景 • 帳票が増えていく中で「1回のリクエストで税額計算に数⼗秒かか る」というパフォーマンス的な問題が発⽣ • ⼀項⽬ずつ⼿続き的に計算→保存を繰り返すことで DB の read/write
処理が膨⼤な量になってしまい結果として数⼗秒かかってしまった
RelationalTree作成後 • 問題を解決するためにRelationalTree は下記のアプローチをした ◦ メモリ上に計算過程の結果を保持し最後にまとめてwriteする ▪ → write回数の減少
◦ 差分が無い項⽬については依存する項⽬の再計算を⾏わない ▪ → 計算回数の減少 RelationalTreeの導⼊によって数⼗秒かかっていたリクエストが、遅く ても数秒以内に返ってくるようになった!
すごい!!!!
RelationalTreeの課題 • パフォーマンス最適化の余地 ◦ 動的に⽊構造を作成しているため read 処理が多い ◦ 部分⽊の計算が繰り返し⾛ることがある
◦ 同期的な計算が強制されてしまう • 計算結果の品質担保 ◦ 複数ユーザーが同時に触った時の挙動が担保されていない • 依存関係の表現⽅法 ◦ 依存関係が有向⾮巡回グラフであることを強制できていない
RelationalTreeの 改善は続く!
None