ローカル開発のための PostgreSQL セットアップガイド

        

このガイドでは、macOS上でDockerを使用してPostgreSQLをセットアップし、ローカル開発環境を 構築する方法を説明します。psql コマンドラインツールのインストールからデータベースの作成、 pressly/goose を用いたスキーママイグレーションの手順まで、実用的なステップを紹介しています。

モチベーション

昨今はデータベースをクラウド上に構築することが多いですが、アプリケーション開発の段階では、 なにかとローカルで動作確認を行いたいことはまだまだ多いですよね。そこで、ローカル開発用に PostgreSQL を用意してあれこれ疎通する方法をまとめておきたいと思います。

想定環境

以下のような構成について記載していきます。

手順

PostgreSQLコンテナの起動:

Docker HubからPostgreSQLのイメージを使用して、コンテナを起動します。 (ここでは、postgres という名前のデータベースと mysecret というパスワードを使用していますが、適宜変更 してください)

docker run --name pg_playground -e POSTGRES_PASSWORD=mysecret -e POSTGRES_DB=postgres -p 5432:5432 -d postgres

このコマンドは、pg_playground という名前の PostgreSQLコンテナ をデタッチドモードで起動し、ホストの 5432ポート を コンテナの5432ポート にマッピングしています。

psql コマンドラインツールのインストール:

システムに psql がインストールされていない場合は、PostgreSQLパッケージをインストールする必要があります。 以下の通り、Homebrewを使ってインストールできます。

brew install postgresql

ユーザ作成:

psql コマンドラインツールを使用して PostgreSQL データベースに接続する際に、シェルのカレントユーザー名を使用して接続したいと思いますので、ユーザーを作成します。ユーザの作成には、createuser コマンドを使用します。

createuser -U postgres -h localhost -p 5432 -sdP "$USER"

作成するユーザーのパスワードを入力するように求められます。任意のパスワードを入力してください。 なお、指定しているオプションは以下の通りです。

作業用データベースの作成:

POSTGRES_DB の指定により、postgres という名前のデータベースがすでに作成されていますが、作業ごとにデータベースを作成して、作業を行うことをおすすめします。 データベースの作成には、createdb コマンドを使用します。

createdb -h localhost -p 5432 mydb

PostgreSQLコンテナに接続:

psql コマンドラインツールを使用して、Dockerコンテナで実行されている PostgreSQLデータベース に接続します。 パスワードの入力を求められますので、先ほど作成したユーザーのパスワードを入力してください。

psql -h localhost -p 5432 -d mydb -W

ここまでで、PosgreSQL コンテナ内部のデータベースに接続する準備が整ったので、あとはSQLをあれこれ操作して作業することができます。

(Optional) スキーマ マイグレーション:

個人的には、手元に goose のマイグレーションスクリプトがある状態で動作の検証を行うことが多いです。

pressly/goose のインストールについては、https://github.com/pressly/goose#install にて説明されていますが、 例えば Homebrew でインストールできます。

brew install goose

goose のインストールが完了したら、以下のようにマイグレーションを適用することができます。 mysecret の箇所は、ユーザ作成時に指定したパスワードに差し替えてください。

export GOOSE_DBSTRING="postgres://$USER:mysecret@localhost:5432/mydb?sslmode=disable"
export GOOSE_DRIVER="postgres"
goose status
goose up

goose では、デフォルトではカレントディレクトリに配置されているマイグレーションスクリプトを 処理します。この挙動は -dir string オプションで変更可能です。(例: goose -dir "$HOME/dbmigration" status

よくあるマイグレーションツールと同様に、updown でスクリプトを適用/削除したり、 status で現在の状態を確認したりすることができます。その他、詳細については pressly/goose を 確認してみてください。

(Optional) コンテナの停止と削除:

作業が終わって、コンテナを停止および削除する場合は、以下のコマンドを実行します。

docker stop pg_playground
docker rm pg_playground

おわり

comments powered by Disqus