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
Goでの設定情報管理に苦労した話
Search
ysakura_
May 30, 2021
Programming
0
410
Goでの設定情報管理に苦労した話
Kyoto.go remote #20 Discord LT会 で発表した内容です。
ysakura_
May 30, 2021
Tweet
Share
More Decks by ysakura_
See All by ysakura_
OpenAPI を用いた GoのAPIサーバー の開発自動化
ysakura_
0
81
マネーフォワードにおけるGoとマイクロサービスの活用事例
ysakura_
0
560
Other Decks in Programming
See All in Programming
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
460
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
180
ゲームの物理 剛体編
fadis
0
390
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
640
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
37k
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
230
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
760
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
160
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
2
190
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
97
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
170
Are puppies a ranking factor?
jonoalderson
0
2.6k
ラッコキーワード サービス紹介資料
rakko
0
1.9M
RailsConf 2023
tenderlove
30
1.3k
How GitHub (no longer) Works
holman
316
140k
Paper Plane
katiecoart
PRO
0
45k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
84
Bash Introduction
62gerente
615
210k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
190
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!