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
320
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
330
Bref でサービスを運用している話
sgash708
0
350
tool ディレクティブを導入してみた感想
sgash708
1
300
DeepWiki で Go をもっと好きになろう
sgash708
0
1.1k
はじめての Go * WASM * OCR
sgash708
1
450
もう僕は OpenAPI を書きたくない
sgash708
6
2.8k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
260
testcontainers のススメ
sgash708
1
570
「僕ら」のテストに対する向き合い方
sgash708
5
560
Other Decks in Technology
See All in Technology
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
210
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
2.6k
The kernel report
ennael
PRO
1
190
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
660
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
220
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
310
セルフサービスのオブザーバビリティ基盤をOpenTelemetryで作る / Building a Self-Service Observability Platform with OpenTelemetry
ymotongpoo
3
500
Account Factory for Terraformによる 標準化されたアカウント発行の自動化
pensuke628
0
120
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
410
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
150
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Into the Great Unknown - MozCon
thekraken
41
2.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
520
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
A Tale of Four Properties
chriscoyier
163
24k
HDC tutorial
michielstock
2
930
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