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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yoichiro Shimizu
September 28, 2025
Technology
4
2k
それでも私は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
1k
今日から始めるGo / Starting Go from Today
budougumi0617
3
2.2k
BASE BANKチームの技術選定と歴史 / how to decide technology selection for startup
budougumi0617
1
4.8k
New Relicを使った Observabilityの実現方法と活用例 / gocon 2022 spring after talk
budougumi0617
0
3.5k
testingパッケージを使った Webアプリケーションテスト 単体テストからE2Eテストまで / gocon2022spring
budougumi0617
6
4k
Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選 / introduce oss for newrelic
budougumi0617
3
3.6k
ゆるふわ分散トレースはじめました / start casual distributed trace
budougumi0617
0
1.7k
PHPでつくるインタプリタ入門 / introduction interpreter by PHP
budougumi0617
0
3.5k
第138回RITS技術交流会 / Why Go? How is Go?
budougumi0617
5
4.3k
Other Decks in Technology
See All in Technology
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.6k
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
510
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
1.3k
Evolution of Claude Code & How to use features
oikon48
1
590
[JAWSDAYS2026][D8]その起票、愛が足りてますか?AWSサポートを味方につける、技術的「ラブレター」の書き方
hirosys_
3
120
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
510
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
560
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
590
JAWS FESTA 2025でリリースしたほぼリアルタイム文字起こし/翻訳機能の構成について
naoki8408
1
360
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
200
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
200
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
82
Documentation Writing (for coders)
carmenintech
77
5.3k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
190
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
120
Rails Girls Zürich Keynote
gr2m
96
14k
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オブジェクトにポインタ構造体を詰める ⚠
⽤法⽤量を守って正しくお使いください(親に渡すのは最終⼿段!) まとめ