何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[作業ログ] PlanetSclaeを雑に試してみた

最近よく目にするので PlanetScale というデータベースのサービスを試してみた。

planetscale.com

qiita.com

DBを構築する

最近作った簡単なアプリの db/migrationsと golang-migrateを使用してテーブルを作成、レコードを作成する。

github.com

docに書かれているように作業をしてCLIをインストールした後、以下のコマンドでデータベースを作成した。

pscale database create gin-service

docs.planetscale.com

golang-migrateを試用して マイグレーションを流した。

migrate -database=[DSN]  -path "./db/migrations" --verbose up

サイトにログインしてみると以下のように確認できる。

f:id:s-takaya1027:20220408194022p:plain

DSNはサーバーの詳細画面のConnectを押すと確認できる。

f:id:s-takaya1027:20220408194739p:plain

コンソールからクエリを叩いたり呼ばれたクエリの statisticsを見ることができる。

f:id:s-takaya1027:20220408195327p:plain f:id:s-takaya1027:20220408195039p:plain

GoからDBに接続する。

DSNという環境変数に値を持たせて接続できた。 godotenvを使うと .envファイルから読み取ってくれて便利

github.com

func configTestCliant() string {
    if value, ok := os.LookupEnv("TEST_CLIENT"); ok && value == "CI" {
        return "ginuser:password@tcp(127.0.0.1:3306)/gin-service?parseTime=true"
    }
    if value, ok := os.LookupEnv("DSN"); ok {
        return value
    }
    return "ginuser:password@tcp(gin_service_db:3306)/gin-service?parseTime=true"
}

func ConnectDB() *sql.DB {
    var dnsNmae string = configTestCliant()
    db, err := sql.Open("mysql", dnsNmae)
    if err != nil {
        panic(err.Error())
    }

    return db
}
package main

import (
    "log"

    "github.com/TakayaSugiyama/web-service-gin/routes"
    "github.com/joho/godotenv"
)

func main() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    router := routes.InitRoutes()
    port := routes.SetPortandGinMode()
    router.Run(":" + port)
}