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
1
210
それでも私は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
960
今日から始める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.4k
ゆるふわ分散トレースはじめました / 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
爆速でプロダクトをリリースしようと思ったらマイクロフロントエンドを選んでいた
kakehashi
PRO
4
1.1k
【GPT-5本出版記念】npaka による AIの今とこれから と AI時代の生存戦略
npaka
2
730
中間管理職をなくしたら何が起きたか 〜AI時代の組織変革と3つの失敗〜
staka121
PRO
2
300
RevOps実践で学んだ俺が最強のデータ基盤になることの重要性 / revops-practice-learned
pei0804
1
940
日経が挑戦するデータ民主化 ~ セルフサービス基盤がもたらす利点と苦悩~/nikkei-tech-talk-37
nikkei_engineer_recruiting
0
180
7 Levels of a Web Performance Journey
sergeychernyshev
0
110
履歴 on Rails: Bitemporal Data Modelで実現する履歴管理/history-on-rails-with-bitemporal-data-model
hypermkt
0
910
新卒QAエンジニアの成長戦略
qatonchan
0
240
Optuna MCPサーバ開発 - AI Engineering Decoded #10
pfn
PRO
4
240
AWSのProductのLifecycleについて
stknohg
PRO
0
170
Deep Research と NotebookLM を使い倒す!レガシーリプレイスの技術選定と学習コスト削減術
tet0h
0
1.7k
SSG の限界を破る、再ビルド不要なサイト
reyalka
2
540
Featured
See All Featured
Embracing the Ebb and Flow
colly
87
4.8k
The Pragmatic Product Professional
lauravandoore
36
6.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
RailsConf 2023
tenderlove
30
1.2k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Code Reviewing Like a Champion
maltzj
525
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
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オブジェクトにポインタ構造体を詰める ⚠
⽤法⽤量を守って正しくお使いください(親に渡すのは最終⼿段!) まとめ