はじめに
Go 言語で環境変数を管理する際、.env
ファイルを使うことがあります。その .env
を読み込むための便利なライブラリが github.com/joho/godotenv
です。
しかし、適切に設定しないと「.env
ファイルが読み込めません」というエラーが発生することがあります。
本記事では、godotenv.Load()
の基本的な使い方と、実際に発生したエラーの原因と解決方法について解説します。
godotenv.Load() の基本的な使い方
インストール
まず、godotenv
を Go モジュールに追加します。
go get github.com/joho/godotenv
.env
ファイルの作成
.env
ファイルに環境変数を定義します。
MYSQL_USER=myuser
MYSQL_PW=mypassword
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DB=mydatabase
Go コードで godotenv.Load()
を使用
Go アプリケーションのコード内で .env
ファイルを読み込みます。
package main
import (
"fmt"
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// .env ファイルを読み込む
err := godotenv.Load()
if err != nil {
log.Fatal(".env ファイルを読み込めませんでした", err)
}
// 環境変数を取得
mysqlUser := os.Getenv("MYSQL_USER")
mysqlPw := os.Getenv("MYSQL_PW")
fmt.Println("MYSQL_USER:", mysqlUser)
fmt.Println("MYSQL_PW:", mysqlPw)
}
起きていたエラー
Go のアプリケーションを実行した際、以下のエラーが発生しました。
2025/02/19 02:11:07 .envファイルが読み込めません: open .env: no such file or directory
このエラーの原因は、アプリケーションが .env
ファイルを読み込もうとしているが、ファイルが存在しない、または適切にロードされていないためです。
エラーの原因と解決策
1. .env
ファイルが存在しない
.env
ファイルがプロジェクトのルートディレクトリにない場合、エラーが発生します。
解決策
.env
ファイルを作成し、プロジェクトのルートディレクトリに配置してください。
echo "MYSQL_USER=myuser" > .env
echo "MYSQL_PW=mypassword" >> .env
2. .env
ファイルのパスを指定していない
デフォルトでは godotenv.Load()
はカレントディレクトリの .env
を読み込みますが、異なるディレクトリにある場合は正しいパスを指定する必要があります。
解決策
.env
のパスを明示的に指定してロードする。
err := godotenv.Load("/path/to/.env")
if err != nil {
log.Fatal(".env ファイルを読み込めませんでした", err)
}
3. GO_ENV=prod
の場合でも .env
をロードしている
本番環境(GO_ENV=prod
)では .env
を使用しないのが一般的です。しかし、開発環境と本番環境の区別がないまま .env
をロードしようとすると、ファイルが存在せずエラーになります。
解決策
本番環境では .env
を読み込まないように修正します。
if os.Getenv("GO_ENV") != "prod" {
err := godotenv.Load()
if err != nil {
log.Fatal(".env ファイルを読み込めませんでした", err)
}
}
このコードでは、GO_ENV
が prod
の場合には .env
を読み込まないようにしています。
まとめ
-
godotenv.Load()
は.env
ファイルを Go の環境変数としてロードするために使用する。 -
.env
ファイルが存在しない場合、エラーが発生する。 -
.env
のパスを正しく指定することで解決できる。 -
GO_ENV=prod
の場合は.env
をロードしないようにするのがベストプラクティス。
これらのポイントを押さえることで、Go アプリケーションでの環境変数管理を適切に行うことができます。