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
Terry
December 11, 2024
Technology
49
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
420
信頼されるPOを目指して
hiroyaterui
0
890
Goで実践するBFP
hiroyaterui
1
280
goroutineで親のctxのkey/valueを引き継ぐ実装
hiroyaterui
0
250
Go 1.20で入った Wrapping multiple errorsをみてみる
hiroyaterui
0
170
intSize = 32 << (^uint(0) >> 63)とは
hiroyaterui
1
860
リモート開発でのコミュニケーションどうしてますか?
hiroyaterui
0
150
POSレジとGo
hiroyaterui
0
360
プリンシプルオブプログラミング ~3章(Unix除く)と7章~
hiroyaterui
0
260
Other Decks in Technology
See All in Technology
AI駆動開発における開発環境のセキュリティの考え方
yamahiro
0
290
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
120
Classmethod Company Deck
satoshi7
1
810
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
160
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
230
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
130
【データ横丁主催】AI エージェント時代のTranslytical Data Platform
shisyu_gaku
0
220
その Valkey 使いこなしていますか?
onk
PRO
5
1.8k
How to Design Configuration for Rails Applications
willnet
1
1.1k
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
150
~最速でビジネスインパクトを創出する~ Sansanのデータ基盤と活用事例
sansantech
PRO
0
110
freeeにおけるSoftware Factory
freee
PRO
0
270
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
The browser strikes back
jonoalderson
0
1.8k
We Are The Robots
honzajavorek
0
400
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
530
Side Projects
sachag
456
43k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Optimising Largest Contentful Paint
csswizardry
37
4k
Crafting Experiences
bethany
1
390
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 👋