Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
scratch imageでのtime.Location()
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Terry
December 11, 2024
Technology
47
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
scratch imageでのtime.Location()
2024/12/11開催のSendai.goの登壇資料です
Terry
December 11, 2024
More Decks by Terry
See All by Terry
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
380
信頼されるPOを目指して
hiroyaterui
0
840
Goで実践するBFP
hiroyaterui
1
280
goroutineで親のctxのkey/valueを引き継ぐ実装
hiroyaterui
0
250
Go 1.20で入った Wrapping multiple errorsをみてみる
hiroyaterui
0
160
intSize = 32 << (^uint(0) >> 63)とは
hiroyaterui
1
850
リモート開発でのコミュニケーションどうしてますか?
hiroyaterui
0
150
POSレジとGo
hiroyaterui
0
360
プリンシプルオブプログラミング ~3章(Unix除く)と7章~
hiroyaterui
0
260
Other Decks in Technology
See All in Technology
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
210
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
140
Codex概要
ymiya55
0
170
DORA_Metrics.pdf
wagnerfusca
1
140
AI臭い文章とは何なのか
nasuvitz
38
76k
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
2k
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
120
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
280
プラットフォームを「作る」、 チームに「入り込む」
sansantech
PRO
0
430
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
270
GitHub Agentic Workflows を触ってみる
htkym
2
910
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
150
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
960
Designing Experiences People Love
moore
143
24k
Unsuck your backbone
ammeep
672
58k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
Deep Space Network (abreviated)
tonyrice
0
350
Music & Morning Musume
bryan
48
7.4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
How to build a perfect <img>
jonoalderson
1
6.1k
Optimising Largest Contentful Paint
csswizardry
37
4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
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 👋