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
310
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
310
Bref でサービスを運用している話
sgash708
0
330
tool ディレクティブを導入してみた感想
sgash708
1
300
DeepWiki で Go をもっと好きになろう
sgash708
0
1.1k
はじめての Go * WASM * OCR
sgash708
1
450
もう僕は OpenAPI を書きたくない
sgash708
6
2.7k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
260
testcontainers のススメ
sgash708
1
540
「僕ら」のテストに対する向き合い方
sgash708
5
550
Other Decks in Technology
See All in Technology
20260912_スクフェス三河
kgnkhkr
0
270
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
130
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.4k
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.5k
あるけみー式LTスライド作成術
alchemy1115
1
160
Tab5をRubyで動くパソコンにする
kishima
2
280
Claude Code本って、 読む必要あるの?
oikon48
2
380
When Does a Local Qwen Start to Break
morshoto
0
200
enechainの内製セルフサービスプラットフォーム
hiyosi
0
150
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
210
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
480
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Skip the Path - Find Your Career Trail
mkilby
1
220
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Done Done
chrislema
186
16k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
What's in a price? How to price your products and services
michaelherold
247
13k
Everyday Curiosity
cassininazir
0
310
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