五 月
19
土曜日

PostgreSQL用モデリングツール pgModeler を利用する

pgModelerはPostgreSQL用のモデリングツールでWindows, Linux, macOSのマルチプラットフォームで動作する。
同サイト上で配布されるバイナリー版は有料になっており6ヶ月の利用で12ドルほどかかるが、ソース自体はOSS(GPLv3)で公開されているため自分でビルドすれば無料で利用することができる。
ということでmacOS上でソース(v0.9.1-beta1)からビルドしてpgModelerを利用するための手順をメモ。


pgModelerのインストールに必要になるもの

現時点での最新版であるpgModeler v0.9.1-beta1をインストールする。
公式のインストールマニュアル https://pgmodeler.io/support/installation に目を通す。

macOSの場合、事前に必要なものは以下の通り。

QT 5.9.x
現在のLTS版である 5.9.x が必要。
より新しいバージョンを利用する場合コンパイルエラーが起きる可能あり。
PostgreSQL
バージョンの指定はなし。
Windows、macOSではpgModelerのコンパイルに必要とするヘッダ、ライブラリについてもインスト−ルされる enterprisedb.comのPostgreSQLインストーラの利用が強く推奨されている。
Xcode
macOSのバージョンに応じたXcode

作業の流れ

  1. Qtのインストール
  2. PostgreSQLのインストール
  3. Xcodeのインストール
  4. pgModelerのインストール

Qtのインストール

Qtのインストールは

  • homebrewでインストール
  • qt公式サイトから指定のバージョンをダウンロードしてインストール

のいずれかの方法で行う。

homebrewでインストール

brewでサクっとインストールする事もできるが、インストールするQtのバージョンを指定できないためLTS版より若干新しいめのバージョンがインストールされてしまう。
運が悪いとpgModelerのコンパイルに失敗することもありうるが自分が試した際(Qt 5.10.1)はコンパイルに支障がなかった。

$ brew install qt

/usr/local/Cellar/qt/5.10.1/ にヘッダ、ライブラリともにインストールされる。

qt公式からインストール

brewに比べて明示的にバージョンを指定してインストールできるので多少面倒くさくても安全に行きたい場合はこちら。

https://www.qt.io/download からOpenSource版を選択しインストーラをダウンロード。
このインストーラは起動後に指定バージョンのqtをネットーワーク経由でインストールするためインストーラ本体は13MBほどしかない。

ダウンロード後インストーラを起動、インストール先ディレクトリを指定。

Qt -> Qt 5.9.5 の以下のコンポーネントにチェック

  • macOS
  • Qt xxx のコンポーネント全て

でインストール実行。

PostgreSQLのインストール

Qtのインストールは

  • homebrewでインストール
  • enterprisedb.comからダウンロードしてインストール

のいずれかの方法で行う。

homebrewでインストール

インストールマニュアルではWindows, macOSについてはenterprisedb.comからのダウンロード&インストールが強く推奨されているものの、 自分が試した際(PostgreSQL 10.4)には問題は起きなかった。

$ brew install postgresql

/usr/local/Cellar/postgresql/10.4 にヘッダ、ライブラリともにインストールされる。

Xcode

AppleStoreからインストールする。
macOSがHigh Sierra未満で最新のXcodeが入らない場合は、Apple Developerサイトにログインし各OSバージョン用のXcodeをダウンロード、インストールする。
(要Apple ID、但しApple Developer Programへの登録は不要)

https://developer.apple.com/download/more/

ビルドとインストール

githubからpgModelerをcloneする。

$ ghq get https://github.com/pgmodeler/pgmodeler.git

デフォルトブランチは develop となっており、バージョンはv0.9.1-beta1 であるためこのブランチでビルドを行う。

Build and install pgModelerを参考にビルドとインストールを行う。

deploy.shの修正

PGSQL/QT_ROOTの変更

PostgreSQL、Qtをインストールしたルートディレクトリを PGSQL_ROOTQT_ROOTに指定する。

PGSQL_ROOT=/usr/local/Cellar/postgresql/10.4
QT_ROOT=/usr/local/Cellar/qt/5.10.1

Qtバージョンチェック処理を修正

インストールしたQtのバージョンが5.10.x以上の場合はこの処置が必要。

homebrewでQtをインストールした場合Qtのバージョンが5.10.xとなったがmacdeploy.sh中のQtバージョンチェックの正規表現が 以下のようにメジャー、マイナー、マイクロの各バージョン番号を1桁しか想定していないため、バージョンチェックでエラーとなってしまう。

# QT_VER=`$QT_ROOT/bin/qmake --version | grep -m 1 -o '[0-9].[0-9].[0-9]'`
QT_VER=`$QT_ROOT/bin/qmake --version | grep -m 2 -o '[0-9]\+.[0-9]\+.[0-9]\+'`

正規表現を修正し1桁以上も許容するようにする。

pgmodeler.priの修正

PostgreSQLライブラリとインクルードディレクトリを PGSQL_LIBPGSQL_INC に指定する。

macx {
  PGSQL_LIB = /usr/local/Cellar/postgresql/10.4/lib/libpq.dylib
  PGSQL_INC = /usr/local/Cellar/postgresql/10.4/include
  XML_INC = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2
  XML_LIB = /usr/lib/libxml2.dylib
  INCLUDEPATH += $$PGSQL_INC $$XML_INC
}

XML_INCXML_LIB は修正の必要なし。

修正点の確認

今回修正した差分は以下。

diff --git a/macdeploy.sh b/macdeploy.sh
index 94b50fe8..66d0e462 100755
--- a/macdeploy.sh
+++ b/macdeploy.sh
@@ -1,8 +1,8 @@
 #!/bin/bash

 USR=`whoami`
-PGSQL_ROOT=/Library/PostgreSQL/10.1
-QT_ROOT=/Users/$USR/Qt5.9.3/5.9.3/clang_64
+PGSQL_ROOT=/usr/local/Cellar/postgresql/10.4
+QT_ROOT=/usr/local/Cellar/qt/5.10.1
 QMAKE_ARGS="-r CONFIG+=x86_64 CONFIG+=release -spec macx-clang"
 LOG=macdeploy.log

@@ -45,7 +45,7 @@ echo "Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io>"

 # Identifying System Qt version
 if [ -e "$QT_ROOT/bin/qmake" ]; then
-  QT_VER=`$QT_ROOT/bin/qmake --version | grep -m 1 -o '[0-9].[0-9].[0-9]'`
+  QT_VER=`$QT_ROOT/bin/qmake --version | grep -m 1 -o '[0-9]\+.[0-9]\+.[0-9]\+'`
   QT_VER=${QT_VER:0:5}
 fi

diff --git a/pgmodeler.pri b/pgmodeler.pri
index d74b69a9..19bf4f31 100644
--- a/pgmodeler.pri
+++ b/pgmodeler.pri
@@ -146,8 +146,8 @@ unix:!macx {
 }

 macx {
-  PGSQL_LIB = /Library/PostgreSQL/10/lib/libpq.dylib
-  PGSQL_INC = /Library/PostgreSQL/10/include
+  PGSQL_LIB = /usr/local/Cellar/postgresql/10.4/lib/libpq.dylib
+  PGSQL_INC = /usr/local/Cellar/postgresql/10.4/include
   XML_INC = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2
   XML_LIB = /usr/lib/libxml2.dylib
   INCLUDEPATH += $$PGSQL_INC $$XML_INC

ビルド

macdeploy.shでビルドを実行。

$ ./macdeploy.sh
pgModeler Mac OSX deployment script
PostgreSQL Database Modeler Project - pgmodeler.io
Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io>

Deploying version: 0.9.1-beta1
Cleaning previous compilation...
Running qmake...
Compiling code...
Installing dependencies...
Packaging installation...
Updating package default icon...
File created: dist/pgmodeler-0.9.1-beta1-macos.dmg
pgModeler successfully deployed!

エラーでビルドが失敗する場合は macdeploy.log に詳細なビルドエラーが出力されているのでそちらを確認する。
成功すると dist/pgmodeler-0.9.1-beta1-macos.dmg にインストール用のイメージが作成される。