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
環境変数ライブラリ選手権
Search
Sugar Sato
May 21, 2025
Technology
280
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
160
Bref でサービスを運用している話
sgash708
0
280
tool ディレクティブを導入してみた感想
sgash708
1
280
DeepWiki で Go をもっと好きになろう
sgash708
0
1k
はじめての Go * WASM * OCR
sgash708
1
410
もう僕は OpenAPI を書きたくない
sgash708
6
2.6k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
240
testcontainers のススメ
sgash708
1
520
「僕ら」のテストに対する向き合い方
sgash708
5
540
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1k
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
250
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
110
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.3k
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
AIはどのように 組織のアジリティを変えるのか?
junki
3
790
失敗を資産に変えるClaude Code
shinyasaita
0
650
新しいVibe Codingと”自走”について
watany
6
320
Android の公式 Skill / Android skills
yanzm
0
140
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
120
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
990
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
300
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Building Applications with DynamoDB
mza
96
7.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.7k
Fireside Chat
paigeccino
42
3.9k
What's in a price? How to price your products and services
michaelherold
247
13k
The Pragmatic Product Professional
lauravandoore
37
7.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Context Engineering - Making Every Token Count
addyosmani
9
960
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
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