最近ホットすぎるPostgreSQL界隈ですが、せっかくなので今風に開発環境を作ってみました。
PostgreSQLおさらい
近年のPostgreSQLの進歩は目覚しいものがあって、高いスケーラビリティはもちろん、アプリとの親和性の高さもあって注目度を増しています。
9.4系からはJSONBサポートに加えGINインデックスの性能強化等があって、RDBの特性を持ちながらドキュメントDBのような使い勝手を実現しています。MongoDBもびっくりですね。
ちなみにAmazon RDSにもつい最近9.4.1がサポートされましたね。 Amazon RDS for PostgreSQL support for major version 9.4.1
というわけでこんな今風なPostgreSQLを今風に環境構築してみようと思います。
Docker
今風なので、今回はDockerで環境を作ります。DockerのイメージはDockerHubにある最新の9.4.1のイメージを利用しましょう。
さて、Dockerをローカル環境でホストするためにboot2dockerを利用します。boot2dockerはVirtualBox上の仮想環境で動作させるので、ローカル上にDocker環境が作られるわけではなく、仮想環境へのポートフォワードによってあたかもDockerをローカル上でホストしているように見せかけます。
PostgreSQLのコンテナ起動
docker runでコンテナを起動します。
docker run -d -p 5432:5432 --name postgres-local -e POSTGRES_USER=tehepero -e POSTGRES_PASSWORD=tehepero postgres:9.4
色々とオプションがついてますが、簡単に説明すると以下の用途で使っています。docker runじゃなくてもFigを利用するのもありですね。
- -d: デーモン起動
- --name: コンテナの識別名
- -p: boot2dockerの5432からコンテナ(ポスグレ)の5432へのポートフォワード
- -e: POSTGRES_USERとPOSTGRES_PASSWORDでユーザーとパスワードの設定
VirtualBoxのポートフォワードの設定
docker runでコンテナでlistenしている5432ポートからboot2dockerの5432ポートまでのフォワードは完了していますが、ローカルマシンからboot2dockerまでのポートフォワードも必要です。VirtualBoxのポートフォワーディング設定で、5432のポートフォワード設定をします。
※この辺はVagrant使えばVagrantfileでやってくれることですね。
0xDBE
0xDBEはJetBrainsが開発しているデータベース開発用のIDEです。
現状はまだEAP版で、お布施無しで利用することができます。Homebrew Caskでのインストールができます。
$ brew cask install 0xdbe-eap
PostgreSQLに接続する設定をします。
最初driverが無くて警告が出るはずなので、downloadのリンクから落とすことができます。あとはdocker runしたときに設定したユーザーとパスワードを設定します。
Test Connectionを押して疎通確認してみましょう。
Driverが9.3ですよって言われてますがとりあえず気にしない。9.4のドライバを使うなら現状は手動で設定になりそうですね。
テーブルを作ってみる
デフォルトでpublicというschemaができているので、適当にテーブルを作ってみます。0xDBEでは以下の様なウィザードでテーブルを作成できます。
データを編集する
MySQLWorkbenchみたいに、スプレッドシード風なデータ作成・更新もできますね。
ちょっとまだ使い方がわからない面もあるけど、慣れの問題じゃないかな・・・
CIとの連携
僕がゴリ押ししているCircleCIでは、すでにPostgreSQL9.4に対応されています。CircleCIのコンテナでPostgreSQLを利用するには、circle.ymlで以下の設定を書くだけ。
machine: services: - postgresql
こうすればCI時に使い捨てのポスグレ環境が手に入ります。
あとPostgreSQLの良い所として、「DDLをトランザクション内で発行できる」という特徴があります。ユニットテストでDBを利用したテストをする際にネックになるのはDBマイグレーションですが、これによってマイグレーションはMySQL等と比較するとしやすいと言えます。アプリに優しいと言われるPostgreSQLの特徴の一つです。
まとめ
ポスグレの時代がやってきた