0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:ローカル環境とECSデプロイのつまずきから、godotenv.Load() について本気で調べてまとめた

Last updated at Posted at 2025-02-19

はじめに

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_ENVprod の場合には .env を読み込まないようにしています。

まとめ

  • godotenv.Load().env ファイルを Go の環境変数としてロードするために使用する。
  • .env ファイルが存在しない場合、エラーが発生する。
  • .env のパスを正しく指定することで解決できる。
  • GO_ENV=prod の場合は .env をロードしないようにするのがベストプラクティス。

これらのポイントを押さえることで、Go アプリケーションでの環境変数管理を適切に行うことができます。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?