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
scratch imageでのtime.Location()
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Terry
December 11, 2024
Technology
0
31
scratch imageでのtime.Location()
2024/12/11開催のSendai.goの登壇資料です
Terry
December 11, 2024
Tweet
Share
More Decks by Terry
See All by Terry
信頼されるPOを目指して
hiroyaterui
0
34
Goで実践するBFP
hiroyaterui
1
240
goroutineで親のctxのkey/valueを引き継ぐ実装
hiroyaterui
0
210
Go 1.20で入った Wrapping multiple errorsをみてみる
hiroyaterui
0
130
intSize = 32 << (^uint(0) >> 63)とは
hiroyaterui
1
780
リモート開発でのコミュニケーションどうしてますか?
hiroyaterui
0
130
POSレジとGo
hiroyaterui
0
330
プリンシプルオブプログラミング ~3章(Unix除く)と7章~
hiroyaterui
0
240
データ連携2ヶ月
hiroyaterui
0
47
Other Decks in Technology
See All in Technology
親子 or ペアで Mashup for the Future! しゃべって楽しむ 初手AI駆動でものづくり体験
hiroramos4
PRO
0
100
[AEON TECH HUB #24] お客様の長期的興味の理解に向けて
alpicola
0
140
When an innocent-looking ListOffsets Call Took Down Our Kafka Cluster
lycorptech_jp
PRO
0
120
PMBOK第8版は第7版から何が変わったのか(PMBOK第8版概要解説) / 20260304 Takeshi Watarai
shift_evolve
PRO
0
200
楽しく学ぼう!ネットワーク入門
shotashiratori
3
2.4k
Claude Code Skills 勉強会 (DevelersIO向けに調整済み) / claude code skills for devio
masahirokawahara
1
14k
マルチロールEMが実践する「組織のレジリエンス」を高めるための組織構造と人材配置戦略
coconala_engineer
3
710
JAWS FESTA 2025でリリースしたほぼリアルタイム文字起こし/翻訳機能の構成について
naoki8408
1
270
Datadog の RBAC のすべて
nulabinc
PRO
3
440
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
510
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
340
ナレッジワーク IT情報系キャリア研究セッション資料(情報処理学会 第88回全国大会 )
kworkdev
PRO
0
160
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
18k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
290
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
980
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
82
Prompt Engineering for Job Search
mfonobong
0
180
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building AI with AI
inesmontani
PRO
1
780
Un-Boring Meetings
codingconduct
0
220
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
99
Transcript
scratch imageでのtime.Location() 2024/12/11 Sendai.go
©Showcase Gig 自己紹介 • 照井寛也 • 株式会社Showcase Gig ◦ エンジニアリングオフィス
• Sendai.go オーガナイザー • X : @10_ru_1
©Showcase Gig scratchを使ったmulti stage build FROM golang:1.23.4 AS build-env
ENV WORKDIR_PATH /go/src/github.com/showcase-gig/go-awesome-project WORKDIR ${WORKDIR_PATH} COPY go.mod . COPY go.sum . ADD . ${WORKDIR_PATH} RUN CGO_ENABLED=0 go build -buildvcs=false -o /bin/go-awesome-project ./cmd/go-awesome-project FROM scratch COPY --from=build-env /bin/go-awesome-project /bin/go-awesome-project EXPOSE 80 ENTRYPOINT [ "/bin/go-awesome-project" ]
©Showcase Gig • 最小のimageファイル ◦ scratchはゼロベースのimage • Goのバイナリだけで動作 ◦ CGO_ENABLED=0
• セキュリティ向上 ◦ binaryファイルだけが動作 multi stage buildの メリット
©Showcase Gig scratch上で実行してみる 👀 func main() { l, err :=
time.LoadLocation("Asia/Tokyo") if err != nil { log.Fatal(err) return } birthday := time.Date(1996, 10, 19, 0, 0, 0, 0, l) fmt.Println(birthday) }
©Showcase Gig 💥 panic: unknown time zone Asia/Tokyo
©Showcase Gig 🥺
©Showcase Gig • local環境では動いていた。。 ◦ localではalpineベースで動かしてい た ◦ airやdlvなどを入れるため •
でもdeployすると動かない ◦ scratch imageでdeploy用のdocker 用意してた しかもlocalでは 動いちゃって 気づかないことも
©Showcase Gig Go Standard Library https://pkg.go.dev/time#LoadLocation
©Showcase Gig Go Standard Library https://pkg.go.dev/time#LoadLocation
©Showcase Gig 1. ZONEINFOの環境変数を見にく a. なし 2. platfromZoneSourcesを見にいく a. 🤔
zoneinfo.go https://cs.opensource.google/go/go/+/refs/tags/go1. 23.4:src/time/zoneinfo.go;l=666-699
©Showcase Gig zoneinfo_unix.go https://cs.opensource.google/go/go/+/refs/tags/go1. 23.4:src/time/zoneinfo.go;l=666-699 https://cs.opensource.google/go/go/+/refs/tags/go1.23.4:src/ti me/zoneinfo_unix.go;l=21-26
©Showcase Gig scratchは基本0ベースなのでzoneinfoがない
©Showcase Gig 💥 panic: unknown time zone Asia/Tokyo
©Showcase Gig //go:buildで区別している • zoneinfo_unix.go ◦ //go:build unix && !ios
&& !android • zoneinfo_goroot.go ◦ //go:build !ios && !android • zoneinfo_ios.go ◦ //go:build ios …… ちなみにzoneinfo_***.goは他にもある
©Showcase Gig (話を戻して)scratchを使ったmulti stage build FROM golang:1.23.4 AS build-env
ENV WORKDIR_PATH /go/src/github.com/showcase-gig/go-awesome-project WORKDIR ${WORKDIR_PATH} COPY go.mod . COPY go.sum . ADD . ${WORKDIR_PATH} RUN CGO_ENABLED=0 go build -buildvcs=false -o /bin/go-awesome-project ./cmd/go-awesome-project FROM scratch COPY --from=build-env /bin/go-awesome-project /bin/go-awesome-project EXPOSE 80 ENTRYPOINT [ "/bin/go-awesome-project" ]
©Showcase Gig zoneinfoをcopyしてあげる FROM golang:1.23.4 AS build-env ENV WORKDIR_PATH
/go/src/github.com/showcase-gig/go-awesome-project WORKDIR ${WORKDIR_PATH} COPY go.mod . COPY go.sum . ADD . ${WORKDIR_PATH} RUN CGO_ENABLED=0 go build -buildvcs=false -o /bin/go-awesome-project ./cmd/go-awesome-project FROM scratch COPY --from=build-env /bin/go-awesome-project /bin/go-awesome-project COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo EXPOSE 80 ENTRYPOINT [ "/bin/go-awesome-project" ]
©Showcase Gig もしくはalpineを使う FROM golang:1.23 AS build-env ENV WORKDIR_PATH
/go/src/github.com/showcase-gig/go-awesome-project WORKDIR ${WORKDIR_PATH} COPY go.mod . COPY go.sum . ADD . ${WORKDIR_PATH} RUN CGO_ENABLED=0 go build -buildvcs=false -o /bin/go-awesome-project ./cmd/go-awesome-project FROM golang:1.23.4-alpine COPY --from=build-env /bin/go-awesome-project /bin/go-awesome-project EXPOSE 80 ENTRYPOINT [ "/bin/go-awesome-project" ]
©Showcase Gig 開発組織や環境に応じてどちらを使うか選択する
©Showcase Gig Thank you 👋