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
Goでの設定情報管理に苦労した話
Search
ysakura_
May 30, 2021
Programming
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goでの設定情報管理に苦労した話
Kyoto.go remote #20 Discord LT会 で発表した内容です。
ysakura_
May 30, 2021
More Decks by ysakura_
See All by ysakura_
OpenAPI を用いた GoのAPIサーバー の開発自動化
ysakura_
0
98
マネーフォワードにおけるGoとマイクロサービスの活用事例
ysakura_
0
620
Other Decks in Programming
See All in Programming
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.6k
Domain-Driven Transformation
hschwentner
2
2.3k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
golang-bob.pdf
iwatsukayura
0
130
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
ChromeでローカルLLM
ryu1013
0
140
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
0
110
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
260
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
280
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
990
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
850
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
560
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The SEO identity crisis: Don't let AI make you average
varn
0
590
Speed Design
sergeychernyshev
33
2.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Odyssey Design
rkendrick25
PRO
2
880
How to train your dragon (web standard)
notwaldorf
96
6.9k
We Are The Robots
honzajavorek
0
400
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Transcript
Goでの設定情報管理に苦労した話
• Twitter: ysakura_ • 櫻 勇人(さくら ゆうと) • 株式会社マネーフォワード ◦
サーバーサイドエンジニア ◦ Go製のマイクロサービスの開発運用を担当 • Go歴は3年ほど 自己紹介
Goでの設定情報管理
Goでの設定情報管理どうしてますか? 設定情報の例) DBのホスト名
自分は苦労したので その過程を共有 ※ 今回は環境変数の利用を前提
dbHost := os.Getenv("DB_HOST") logLevel := os.Getenv("LOG_LEVEL") 環境変数を直接読み込む • 読み込み方法 ◦
os.Getenvを利用して読み込む • 良かった点 ◦ サクッと書ける • 苦労した点 ◦ 設定項目が増えてくるとコードの可読性が下がる ▪ os.Getenv がひたすらに並ぶ • 次にやったこと ◦ 階層構造がある管理方法にしたい ▪ 環境変数を構造体にマッピングする
• 読み込み方法 ◦ 環境変数を構造体にマッピングする • ライブラリの例 ◦ caarlos0/env • 良かった点
◦ 可読性が上がった • 苦労した点 ◦ 環境変数の全体像が分かりづらい ▪ 構造体がネストしているケース ▪ 設定項目と対応する環境変数の一覧を一目で見たい • 運用をする上で、設定すべき情報を把握しやすくしたい • 次にやったこと ◦ 1ファイルに、環境変数と設定項目のマッピングが書かれていて欲しい ▪ Templateで環境変数を読み込み、設定ファイルを生成する 環境変数を構造体にマッピングする type Config struct { DBConfig LogConfig } type DBConfig struct { Host string `env:"DB_HOST"` } type LogConfig struct { Level string `env:"LOG_LEVEL"` }
db: host: "{{ env "DB_HOST" }}" log: level: "{{ env
"LOG_LEVEL" }}" • 読み込み方法 ◦ yamlのtemplateで環境変数を読み込む ▪ text/templateを利用 ◦ 生成したyamlを構造体にマッピング • 利用したライブラリ ◦ Masterminds/sprig ▪ Template関数のライブラリ • {{ env “HOGE” }} で環境変数を読み込めるので採用 ◦ go-yaml/yaml • 良かった点 ◦ 設定項目の全容が一目で分かる様になった ◦ 設定項目と環境変数の対応が一目で分かる様になった Templateで環境変数を読み込み、設定ファイルを生成する
• 一番初め ◦ os.Getenvを使ったが 項目数が増えるにつれて可読性が下がった • 2つめ ◦ 構造体にマッピングする様にしたが 環境変数の全体像が分かりづらくなった
• 直近 ◦ 環境変数を読むTemplateを使って 設定ファイルを生成する様にした まとめ
Thank you!