Go Blue Logo

[Go 言語]環境変数を使えるようにする方法( godotenv )

Go 言語Echo という Web アプリケーションフレームワークで開発中に環境変数をプロジェクト内で使用する方法を調べてみました。

開発環境

  • Go言語 : 1.18.1
  • Echo : 4.7.2

方法1 : export コマンドを使用する

通常、環境変数を設定するというとこの「 export コマンド」を利用するのが一般的だと思います。

$ export GO_ENV=dev

プロジェクト内では下記のように環境変数の値を取得します。

package main

import (
    "fmt"
    "os"
)

func main() {
    env := os.Getenv("GO_ENV")
    fmt.Println(env) // dev
}

方法2 : 起動時のスクリプトに環境変数を設定する

export コマンドを使用した方法だと、環境変数の数が増えると環境変数がいろんな値で定義されてしまい、管理が煩雑になったりどんな環境変数を定義したか確認するのが大変だという場合は、起動スクリプトに対象のプロジェクトで使用する環境変数を追加するようにすることで、簡単に環境変数を定義することができるようになります。

$ GO_ENV=dev go run ./server.go

export コマンドの時と同様の方法で環境変数の値を取得することができます。
この方法ならスクリプト実行時に環境変数が設定されるので、環境変数の値の設定ミスなどにも気付きやすいと思います。
ただ、複数環境変数があるとやっぱり管理が大変だと思います。

方法3 : godotenvを使用する

godotenv は環境変数を設定したファイルを読み込み、そこで設定した環境変数を os パッケージから取得できるようにしてくれます。

インストール

go get コマンドで godotenv パッケージをインストールします。

$ go get github.com/joho/godotenv

環境設定ファイル作成

プロジェクトのルートディレクトリ直下に環境変数格納ディレクトリを作成します。そのディレクトリ内にそれぞれの環境で読み込みたい設定ファイルを作成し、各ファイルに環境変数を設定します。

project
├── env
│    ├── dev.env
│    ├── prod.env
│    └── stg.env
└── server.go

それぞれのファイルの中身は下記のように設定します。

DB_HOST="host name"
DB_USER="root"
DB_PASS="pass"
DB_PORT="3306"
DB_NAME="db_name"

それぞれの環境に応じて環境変数の値は書き換えます。

起動スクリプト

起動時に GO_ENV に指定する環境の値を設定し、起動スクリプトを実行することで、対象の環境の環境変数を os パッケージから使用することができるようになります。

$  GO_ENV=dev go run ./server.go

実装方法

実際に使用するには下記のように実装します。

package main

import (
    "fmt"
    "github.com/joho/godotenv"
    "log"
    "os"
)

func main() {
    err := godotenv.Load(fmt.Sprintf("env/%s.env", os.Getenv("GO_ENV")))
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    host := os.Getenv("DB_HOST")
    dBName := os.Getenv("DB_NAME")

    fmt.Println(host) // host name
    fmt.Println(dBName) // db_name
}

最後に

環境変数の設定方法はいろいろあるので、プロジェクトの規模などに応じて適切な設定方法を選択したいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です