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
350
Bref でサービスを運用している話
sgash708
0
350
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
260
testcontainers のススメ
sgash708
1
570
「僕ら」のテストに対する向き合い方
sgash708
5
560
Other Decks in Technology
See All in Technology
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
780
AWSセキュリティで活用するAI機能
cmusudakeisuke
1
190
From Developer Experience to Agentic Experience: The Next Evolution of APIs
benjagm
0
110
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
110
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
350
20年間 SNS サービス「GREE」 を支えた技術の刷新と、長期運用サービスの Kubernetes へのリアーキテクト
gree_tech
PRO
0
110
CloudWatch Logsのコスト最適化:どこまでAIに任せてどこから人間が承認すべきか
yama3133
0
160
React改造してみた
tsukina_7mochi
0
150
Turning Repos into the Product Second Brain with an LLM Wiki
linedevth
0
130
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
220
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
220
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
380
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
720
Code Reviewing Like a Champion
maltzj
529
40k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.8k
4 Signs Your Business is Dying
shpigford
187
23k
Bash Introduction
62gerente
615
220k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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