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
それでも私はContextに値を詰めたい | Go Conference 2025 / go ...
Search
Yoichiro Shimizu
September 28, 2025
Technology
4
1.4k
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
2025/09/28 Go Conference 2025で発表したLT資料です。
https://gocon.jp/2025/talks/958590/
Yoichiro Shimizu
September 28, 2025
Tweet
Share
More Decks by Yoichiro Shimizu
See All by Yoichiro Shimizu
GoのWebプロダクトに途中参加するときのキャッチアップ #layerxgo / How to catch up Go web product
budougumi0617
6
980
今日から始めるGo / Starting Go from Today
budougumi0617
3
2.2k
BASE BANKチームの技術選定と歴史 / how to decide technology selection for startup
budougumi0617
1
4.7k
New Relicを使った Observabilityの実現方法と活用例 / gocon 2022 spring after talk
budougumi0617
0
3.4k
testingパッケージを使った Webアプリケーションテスト 単体テストからE2Eテストまで / gocon2022spring
budougumi0617
6
3.9k
Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選 / introduce oss for newrelic
budougumi0617
3
3.5k
ゆるふわ分散トレースはじめました / start casual distributed trace
budougumi0617
0
1.6k
PHPでつくるインタプリタ入門 / introduction interpreter by PHP
budougumi0617
0
3.4k
第138回RITS技術交流会 / Why Go? How is Go?
budougumi0617
5
4.2k
Other Decks in Technology
See All in Technology
Zabbix Conference Japan 2025 ダッシュボードコンテストLT
katayamatg
0
140
お試しで oxlint を導入してみる #vuefes_aftertalk
bengo4com
2
1.3k
Black Hat USA 2025 Recap ~ クラウドセキュリティ編 ~
kyohmizu
0
270
LINE公式アカウントの技術スタックと開発の裏側
lycorptech_jp
PRO
0
260
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
1k
なぜ新機能リリース翌日にモニタリング可能なのか? 〜リードタイム短縮とリソース問題を「自走」で改善した話〜 / data_summit_findy_Session_2
sansan_randd
1
150
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
0
230
Playwrightで始めるUI自動テスト入門
devops_vtj
0
250
窓口業務を生成AIにおまかせ!Bedrock Agent Coreで実現する自治体AIエージェント!
rayofhopejp
0
290
Data Engineering Guide 2025 #data_summit_findy by @Kazaneya_PR / 20251106
kazaneya
PRO
10
2k
20251102 WordCamp Kansai 2025
chiilog
1
810
短期間でRAGシステムを実現 お客様と歩んだ生成AI内製化への道のり
taka0709
1
240
Featured
See All Featured
Done Done
chrislema
186
16k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
660
Fireside Chat
paigeccino
41
3.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
4 Signs Your Business is Dying
shpigford
186
22k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
The Cult of Friendly URLs
andyhume
79
6.7k
Visualization
eitanlees
150
16k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
The Pragmatic Product Professional
lauravandoore
36
7k
Transcript
© LayerX Inc. それでも私はContextに値を詰めたい 2025/09/28 Go Conference 2025 @budougumi0617 /
LayerX
主にWebサービスにおける リクエストコンテキストの話をします
📝おさらい
© LayerX Inc. 4 出⼒はどうなる?
© LayerX Inc. 5 • それはそう ⼦(呼び出し先)のWithValueは親(呼び出し元)から⾒えない
Webサーバあるある
© LayerX Inc. 7 • 会社IDやユーザーIDをリクエストのログに付与しておきたい Webサーバあるある
© LayerX Inc. 8 よくあるパターン: 認証ミドルウェア‧リクエストログミドルウェア
🤔困るとき
© LayerX Inc. 10 • GoでクレジットカードやETCカードを作ってます! 突然ですがお仕事紹介
© LayerX Inc. 11 • ⾃社の認証情報が⼊っていないリクエストを処理する • クレジットカードで決済があったとき ◦ 💳
外部決済システム → 🧾決済リクエスト → ⾃社サーバ • 利⽤料のお⽀払い(⼝座振替情報) ◦ 🏦 外部⾦融機関 → 💰⼊⾦リクエスト → ⾃社サーバ(消込) そうなるとこう
© LayerX Inc. 12 ビジネスロジックの中で会社を特定しかない
© LayerX Inc. 13 • それはそう 再掲: ⼦のWithValueは親から⾒えない
© LayerX Inc. 14 これがやりたい
© LayerX Inc. 15 • デコレータパターンで伝播する • contextオブジェクトにポインタ構造体を詰める 親のcontextにデータを詰める(渡す)アイデア
© LayerX Inc. 16 • Setterを追加したハコを親から渡しておく デコレータパターンで伝播する
© LayerX Inc. 17 デコレータパターンで伝播する
© LayerX Inc. 18 デコレータパターンで伝播する
© LayerX Inc. 19 デコレータパターンで伝播する デコレータ🐭 「http.ResponseWriter (を満たす実装)です!」 コンパイラ🤖 「よし通れ!」
例: func(w http.ResponseWriter, r *http.Request)の場合
© LayerX Inc. 20 👍 Pros • そんなに悪いことしていない(はず) • フレームワーク越しでも使える
👎 Cons • IFがインターフェースじゃないと難しい • contextに直接詰められているわけではない ◦ http.ResponseWriterなどをビジネスロジックまで 引き回すことはあまりない(?) デコレータパターンで伝播する
© LayerX Inc. 21 • 親が参照しているオブジェクトのフィールドを⼦で編集する contextオブジェクトに構造体ポインタ(アドレス)を詰める
© LayerX Inc. 22 contextオブジェクトにポインタ構造体を詰める
© LayerX Inc. 23 contextオブジェクトにポインタ構造体を詰める ポインタの先にある構造体フィールドは⼦から編集できる
© LayerX Inc. 24 👍 Pros • メソッドシグネチャに影響せず、透過的に使える 👎 Cons
• 多⽤すると無法地帯になる ◦ 親からするとどのタイミングで詰め込まれたのかわからない • ⾮同期処理が絡むならMutexなどの検討が必要 contextオブジェクトにポインタ構造体を詰める
© LayerX Inc. 25 親コンテキストにどうしても情報を詰めたいとき • デコレータパターンで伝播する • contextオブジェクトにポインタ構造体を詰める ⚠
⽤法⽤量を守って正しくお使いください(親に渡すのは最終⼿段!) まとめ