個人開発してるアプリでDBと接続する処理を書いてる部分があんまりまとまってなかったので、環境変数からDB接続情報を取得するように修正しました。
コミットは以下になります。
実装したかった内容は
の二つをなるべく無駄のないコードの書き方で切り替えれるようにしたい、という感じでした。
そういう状況では環境変数で接続する先を切り替えるのが無難かと思い、以下のようなコードにしました。
// CreateDBConnection 環境変数で指定したDBと接続する func CreateDBConnection() *gorm.DB { // ENVIRONMENTがlocalの場合はローカルのMySQLコンテナと接続する if os.Getenv("ENVIRONMENT") == "local" { db, err := gorm.Open("mysql", "root:root@tcp(localhost:3306)/test_database?parseTime=true") if err != nil { fmt.Println("error occured at db connection") return nil } db.LogMode(true) return db } // ENVIRONTMENTがproductionの場合は本番環境のDBと接続する if os.Getenv("ENVIRONMENT") == "production" { DBMS := os.Getenv("DBMS") USER := os.Getenv("USER") PASSWORD := os.Getenv("PASSWORD") HOST := os.Getenv("HOST") DBNAME := os.Getenv("DBNAME") CONNECT := USER + ":" + PASSWORD + "@" + HOST + "/" + DBNAME + "?parseTime=true" db, err := gorm.Open(DBMS, CONNECT) if err != nil { fmt.Println("error occured at db connection") return nil } return db } fmt.Println("環境変数を設定してください") return nil }
環境変数の設定は以下のようにSetenv関数を使っています。
// SetEnvVariables 環境変数を設定 func SetEnvVariables() { os.Setenv("DBMS", "xxxx") os.Setenv("USER", "xxxxxx") os.Setenv("PASSWORD", "xxxxxxxxxx") os.Setenv("PROTOCOL", "xxxxxxxxxxx") os.Setenv("DBNAME", "xxxxxxxxxxx") }
.envファイル使ったりECSのタスクで定義で環境変数を設定する方法もあると思いますが、ローカルでSetenv関数を使う方が自分の中で整理しやすかったのでこの方法に落ち着きました。
環境変数の設定方法は後々修正していくかも知れません。
全体的にもっと良いコードの書き方はあるかも知れませんが、少なくとも自分が実現したかった内容にできたのでひとまずOKとします。
今の時点で気づけてない問題が後から出てきたらその都度対応していきます。
むしろそういう問題に出会えたら今よりも一気に学びや発見があるはずなので、完璧かどうかわからなくても今できる最善のコードをデプロイしていくことは意味があると思ってます。
問題が発生する前からなんとなく自信なくてコード書くのをためらってたらあまり成長に繋がらないと考えてるので、どんどんコード書いてなるべく多くの成功と失敗を個人開発で経験できるようにして、現場に活かしていきたいと思います。