Goで環境変数の取り扱いをするライブラリ(godotenv, envconfig)を紹介
2024-09-11
#目次
#はじめに
今回は、Goで環境変数の取り扱いをするライブラリ(godotenv, envconfig)を紹介します。
Goで、いくつかの環境変数を取り扱うライブラリを使ってきましたが、その中で、godotenvとenvconfigがサーバーアプリを開発する上で便利だと感じました。
#godotenvとは
A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file).
出典:https://github.com/joho/godotenv
.env
ファイルを読み込んで、環境変数を設定することができます。
#envconfigとは
Golang library for managing configuration data from environment variables
出典:https://github.com/kelseyhightower/envconfig
環境変数で設定された値を読み込んで、構造体にマッピングすることができます。
#なぜgodotenvとenvconfigを使うのか
godotenvは、主にローカル開発環境で使います。ローカル開発環境では、.env
ファイルを使って、環境変数を設定すると楽ちんです。
これは、nodejsのdotenv
と同じような使い方ができます。
一方で、envconfigは、環境変数で設定された値を構造体にマッピングすることができます。
通常、環境変数で読み込まれる値は、文字列型であるため、文字列型以外は変換して使う必要がありますが、envconfigを使うと、その手間を省くことができます。
サポートしている型は、主要なデータ型がサポートされています。
もし足りなければ、カスタムのDecoder
を実装することもできます。
他のライブラリでは、ダメなのかというと、そうではありません。それ以前はos.Getenv
,viper
を使ったことがあります。
os.Getenv
は、環境変数を取得するだけで、型変換などは自分で行う必要があります。
viper
は、かなり多機能だと思います。設定ファイルから読み込みできますし、環境変数からも読み込めます。データマッピングもできます。ただし、多機能が故に設定の仕方に慣れる必要があります。しばしば、設定が不足していると環境変数が読み込まれないことがありました。
好みの問題だと思いますが、dotenv
, envconfig
のほうが、シンプルで使いやすいと感じました。
設定ファイルが必要となるコマンドラインツールなどは、viper
が適していると思います。私が書くことが多いのは、サーバーアプリなので環境変数から値を取得できれば十分です。
#まとめ
今回は、Goで環境変数の取り扱いをするライブラリ(godotenv, envconfig)を紹介しました。
環境変数を読み込む部分は、どのプロジェクトでも共通して使う部分だと思いますので、使いやすいライブラリを選ぶと良いと思います。
今後も便利なGoのライブラリを紹介していきます。
次回は、CLIツールを作るときに便利なライブラリを紹介したいと思います。