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
エラーログのマスキングの仕組みづくりに役立ったASTの話
Search
Kenichi Shihota
February 24, 2026
Programming
410
0
Share
エラーログのマスキングの仕組みづくりに役立ったASTの話
ASTを活用し、エラーマスキング解除の漏れを警告するLinterを実装した事例を紹介しています。
Kenichi Shihota
February 24, 2026
Other Decks in Programming
See All in Programming
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
0
150
Liberating Ruby's Parser from Lexer Hacks
ydah
2
1.5k
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
210
Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform
renaudmathieu
0
220
tRPCの概要と少しだけパフォーマンス
misoton665
2
220
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
1k
How Swift's Type System Guides AI Agents
koher
0
280
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
110
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
970
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
190
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
260
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
3k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Evolving SEO for Evolving Search Engines
ryanjones
0
180
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
100
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
260
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
680
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
770
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
170
Thoughts on Productivity
jonyablonski
76
5.1k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.6k
The Language of Interfaces
destraynor
162
26k
Transcript
エラーログのマスキングの仕組みづくりに 役⽴ったASTの話
⾃⼰紹介 Kumoichi14 経歴: 新卒1年⽬ 職種: バックエンドエンジニア 趣味: スマブラ(⼤乱闘)
プレゼンテーション構成 ‧マスキングを導⼊したことにより出てきた課題 ‧課題解決にASTがどう役⽴ったか ‧マスキングとマスキング解除の挙動の紹介 はじまり
1. コード上での呼び出し 2. ログへの出⼒結果 ※変数 title の値が⾃動的に検知‧加⼯されます。 errorsx.Errorf(“invalid title: %s”,
title) invalid title: ***** マスキングの挙動例 string, struct など
1. コード上での呼び出し 2. ログへの出⼒結果 errorsx.Errorf(“invalid title: %s”, mask.WithoutMasking(title)) invalid title:
GolangTokyo マスキングの対象外とする挙動例
なぜマスキングされる型に対して、マスキング対象外と する関数を毎回つけるのか
この「付与忘れ」を仕組みで防ぎたかった マスキング対象外とする関数(withoutMasking) をつけ忘れる可能性があった 課題
ASTを活用してLinterを作れば、特定の関数の付与のし 忘れなどを検知できると知った
コードを「情報のツリー」として捉える ソースコードを単なる⽂字列ではなく、コンピューターが理解 できる階層構造(⽊構造)に変換したものです。 • 役割の明確化: パッケージ名、関数名、引数、リテラル値などを、 意味を持つ最小単位(ノード)として個別に識別。 AST(抽象構⽂⽊)とは
CallExpr 関数呼び出し全体 FUN(SelectorExpr) 呼び出す対象 X(Ident) 受信者 / 左側 SEL(Ident) 選択子
/ 右側 Arg([]AST.Expr) 引数リスト Arg[0](BasicLit) リテラル値 Arg[1](Ident) 変数 errorsx.Errorf(“invalid title: %s”, title) errorsx.Errorf errorsx Errorf “invalid title: %s“ title ["invalid title: %s", title] errorsx.Errorf(“invalid title: %s”, title)
コードの差分を取得 ① パッケージ名がerrorsxを含むものがあるかを確かめる ② 関数名がErrofであることを確かめる ③ 変数(title)がWithoutMasking付与対象内の型であることを確かめる ここまで確認が取れたら、警告を出す mask.WithoutMasking()つけ忘れ検知の流れ
CallExpr 関数呼び出し全体 FUN(SelectorExpr) 呼び出す対象 SEL(IDENT) 選択子 Arg([]AST.EXPR) 引数リスト Arg[0](BASICLIT) リテラル値
Arg[1](IDENT) 変数 errorsx.Errorf(“invalid title: %s”, title) errorsx.Errorf Errorf “invalid title: %s“ title ["invalid title: %s", title] X(Ident) 受信者 / 左側 SEL(Ident) 選択子 / 右側 errorsx Errorf “errorsx”であることを確認
CallExpr 関数呼び出し全体 FUN(SelectorExpr) 呼び出す対象 Arg([]AST.EXPR) 引数リスト Arg[0](BASICLIT) リテラル値 Arg[1](IDENT) 変数
errorsx.Errorf(“invalid title: %s”, title) errorsx.Errorf Errorf “invalid title: %s“ title ["invalid title: %s", title] “Errorf”であることを確認 X(Ident) 受信者 / 左側 SEL(Ident) 選択子 / 右側 errorsx Errorf
CallExpr 関数呼び出し全体 FUN(SelectorExpr) 呼び出す対象 Arg([]AST.EXPR) 引数リスト Arg[0](BASICLIT) リテラル値 Arg[1](IDENT) 変数
errorsx.Errorf(“invalid title: %s”, title) errorsx.Errorf “invalid title: %s“ title ["invalid title: %s", title] titleがマスキング対象内の型であるこ とを確認(analysis.Pass.TypesInfoが型 情報を持っている) titleの型はstringであるので マスキング対象内の型 X(Ident) 受信者 / 左側 SEL(Ident) 選択子 / 右側 errorsx Errorf
Linterでの関数付与忘れの検知 errorsx.Errorf(“invalid title: %s”, title) ASTを利用した検知の仕組み エラーログに出していい値なことを確認したうえで、 mask.WithoutMaskingを付与してください
学び
ご静聴ありがとうございました