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
環境変数ライブラリ選手権
Search
Sugar Sato
May 21, 2025
Technology
330
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
環境変数ライブラリ選手権
Sugar Sato
May 21, 2025
More Decks by Sugar Sato
See All by Sugar Sato
AIと共に生きる技術選定 2026
sgash708
0
350
Bref でサービスを運用している話
sgash708
0
360
tool ディレクティブを導入してみた感想
sgash708
1
310
DeepWiki で Go をもっと好きになろう
sgash708
0
1.1k
はじめての Go * WASM * OCR
sgash708
1
450
もう僕は OpenAPI を書きたくない
sgash708
6
2.8k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
270
testcontainers のススメ
sgash708
1
570
「僕ら」のテストに対する向き合い方
sgash708
5
560
Other Decks in Technology
See All in Technology
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
140
AI時代のGraphQL
joere
3
400
DevelopersIO 2026 Tokyo 現時点の衛星通信サービスの現状を整理してみる
maroon1st
0
300
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
4
2.4k
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
210
バフェットコード開発チームの心得(v1.1)
shoe116
0
100
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
130
僕のハーネスを紹介します
watany
6
1.6k
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
230
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
350
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
170
自宅サーバと脆弱性
masakiokuda
1
110
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
470
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Side Projects
sachag
456
43k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Building Applications with DynamoDB
mza
96
7.3k
Transcript
環境変数ライブラリ選手権 Asakusa.go #5 2025. 05. 21
2 自己紹介 Sugar Sato (@satoIsSugar) • 2023年 BuySell Technologies入社 •
出張訪問チーム (Account/Approval/Visit) ◦ アソシエイトマネージャー ◦ PjM ◦ プレイングマネージャー • Go / Angular / Serverless • 熱帯植物 ◦ ビカクシダ • 猫 ◦ Lambda (♀ 3才)
3 プロダクト群「バイセルリユースプラットフォーム Cosmos」の開発が進行中 リユースに必要なすべての機能を提供する 「リユースプラットフォーム Cosmos」の開発が進行中です。 Cosmosを活用して、バイセルグループ全体での業務効率改善やデータドリブン経営の深化を目指しています。 リユースプラットフォーム Cosmos 自社開発のリユース特化業務基幹システムでありサービス群の集合体
買取申込 買取・査定 在庫管理 販売 多様なチャネルで収益最大化 CRM -顧客対応- 買取種別に応じた最適なシステム構築 Visit -訪問買取 - Store -店舗買取 - Promas -商材マスタ - Appraisal -専門査定 - Stock -在庫管理 - EXS -販売管理 - Core -会員管理- Portal -データ利用- Pocket -データ基盤- 買取 専門チームによる真贋・査定と連携 査定 申込 効率的な顧客対応 在庫 在庫管理の最適・効率化 販売 データ 各事業プロセスにある データを一元管理 :基幹システム
突然ですが 環境変数を、どう扱ってますか?
いろんなライブラリがあるので 迷っちゃいますよね(圧)
ということで 環境変数ライブラリの比較をしてみます
01 比較をしようとした背景 02 ライブラリの比較 03 ライブラリ選択の基準 04 まとめ 目次 Index
比較をしようとした背景 01
いつも使い慣れている ライブラリ使うこと多い... joho/godotenv caarlos0/env kelseyhightower/envconfig
久しぶりにライブラリ調べたら “いい感じ” のやつ増えてるんじゃね?
11 “env language:Go” で検索 知らないものも、ちらほら
12 “env language:Go” で検索 「へぇ〜 Netflix からも出てるんだ〜」
中身を見てみると それぞれ個性が違って面白い🙌
ライブラリの比較 02
15 ライブラリの紹介 • caarlos0/env: 構造体へタグベースでマッピング • kelseyhightower/envconfig: 構造体へマッピング • sethvargo/go-envconfig:
リフレクションを使って構造体へマッピング • Netflix/go-env: 構造体へマッピング • go-ini/ini: INI ファイルを読み込む • joho/godotenv: .env ファイルを読み込む • a8m/envsubst: 環境変数の置換処理をおこない読み込む 7つのライブラリを比較する
16 Star History
17 メンテナンス状況 バージョン 最終更新日 go-ini/ini v1.67.0 2022/8/8 joho/godotenv v1.6.0 (pre-release)
2024/12/16 caarlos0/env v11.3.1 2024/12/20 kelseyhightower/envconfig v1.4.0 2019/5/25 sethvargo/go-envconfig v1.2.0 2025/04/12 a8m/envsubst v1.4.3 2025/02/27 Netflix/go-env v0.1.2 2024/10/29
joho/godotenv がダントツ人気 ただし用途によって使い分けた方がいいかも
19 特徴 大まかに2つの分類に分かれる 構造体マッピング • caarlos0/env • kelseyhightower/envconfig • sethvargo/go-envconfig
• Netflix/go-env ファイル読み込み • go-ini/ini • joho/godotenv • a8m/envsubst
20 go-ini/ini • シンプルな API 設計 • マッピング機能により構造体との変換が容易 • セクション管理でグループ化された設定が扱える
• UTF-8 だけでなく様々なエンコーディングをサポート • 継承機能によるセクション間の設定の共有 INI ファイル形式の設定ファイルを読み書きするためのライブラリ
21 コード (go-ini/ini)
22 コード (go-ini/ini)
23 joho/godotenv • Ruby gem の dotenv にインスパイアされた使いやすいAPI • 環境変数の上書きオプション
• プロジェクトルートに .env ファイルを置くだけという簡単な導入 • 特定の環境向けの .env.development などの条件付きファイルロード .env ファイルから環境変数を読み込むシンプルなライブラリ
24 コード (joho/godotenv)
25 caarlos0/env • タグを使用した宣言的な環境変数バインディング • カスタムパーサーが拡張可能 • 多様なデータ型(配列やマップ含む)のサポート • デフォルト値の設定が容易
• 必須フィールドの検証機能 環境変数から構造体へのタグベースのマッピングを行うライブラリ
26 コード (caarlos0/env)
27 kelseyhightower/envconfig • シンプルな設計と使いやすい API • プレフィックスによる環境変数のグループ化 • カスタムデコーダー機能 •
堅牢なバリデーション機能 環境変数から構造体へのマッピングを行うライブラリ
28 コード (kelseyhightower/envconfig)
29 sethvargo/go-envconfig • ゼロ依存関係 • Context によるキャンセレーション対応 • カスタムデコーダーインターフェース •
複雑なデータ構造(ネストした構造体やスライス)のサポート • エラー報告が詳細 リフレクションを使った環境変数の構造体へのマッピングライブラリ
30 コード (sethvargo/go-envconfig)
31 a8m/envsubst • bash の ${VAR} 構文をサポート • デフォルト値や条件付き代入の複雑な構文もサポート •
テンプレートファイルでの環境変数展開に最適 • カスタム関数のサポート • パイプラインでの利用に適した設計 環境変数の置換処理を行うユーティリティライブラリ
32 コード (a8m/envsubst)
33 Netflix/go-env • シンプルで軽量な設計 • タグを使った直感的なマッピング • 未使用の環境変数を検出する機能 • 変数の上書き制御
Netflix が開発した環境変数から構造体へのマッピングライブラリ
34 コード (Netflix/go-env)
色々あって迷っちゃうな🧐
ライブラリ選択の基準 03
37 ライブラリの選定基準 • 単純に値を取得する ◦ 標準の os.Getenv • .env ファイルから読み込む
◦ joho/godotenv • 型安全な構造体マッピング ◦ caarlos0/env ◦ sethvargo/ go-envconfig • 複雑な環境変数置換 ◦ a8m/envsubst • INI ファイル形式 ◦ go-ini/ini
まとめ 04
39 まとめ プロジェクトの要件に合わせた適切な選択を • 当たり前の話だけど、チームで相談してください ◦ ファイルの形式が望ましいのか ◦ 単純な値取得でいいのか •
環境変数のライブラリメンテされなくなりがち... ◦ “息が長そう”な技術選定を心がける 構造体マッピングによる型安全な実装がお勧め • やっぱり caarlos0/env が個人的に好き • 次点で sethvargo/go-envconfig や Nexflix/go-env がよさそう ◦ 複雑な設定ができる ◦ kelseyhightower/envconfig よりもメンテされている
皆さんの環境変数の取り扱いも教えてください!
Thank You
42 引用 • https://github.com/search?q=env+language%3AGo+&type=repositories&s=stars&o=desc • https://github.com/go-ini/ini • https://github.com/joho/godotenv • https://github.com/caarlos0/env
• https://github.com/kelseyhightower/envconfig • https://github.com/sethvargo/go-envconfig • https://github.com/a8m/envsubst • https://github.com/Netflix/go-env