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
}
最後に
環境変数の設定方法はいろいろあるので、プロジェクトの規模などに応じて適切な設定方法を選択したいですね。
コメント