どうもお久しぶりです。相変わらずへんてこなことをやっている伊藤です。

今日は、mac os BigSurとMAMPとPostgreSQLでローカル開発環境を作ったお話です。
アーキテクチャはM1(apple silicon)です。

あんまりMAMP+PostgreSQLの情報は日本語サイトではないので、久しぶりにブログ書きます。

M1における MAMP ProとPostgreSQLについて

MAMP ProもPotgreSQLもM1 macにおいて動作します。が、2021年3月時点では、アーキテクチャはintelとして動きますので、ARMネイティブではないのでご注意を。

PostgreSQLについて

MacでのPostgreSQLは、ググるとhomebrewつかいましょうねとなっているところが多いです。
が、ちょっと面倒なんで僕はEnterpriseDBを使っています。
ただ、EDBをインストールすると常時デーモンとして起動してしまうので、バッテリー食いですから必要なときのみ起動したいので、インストール後に

sudo launchctl unload /Library/LaunchDaemons/com.edb.launchd.postgresql-x.x.plist
sudo rm /Library/LaunchDaemons/com.edb.launchd.postgresql-x.x.plist 

で、デーモン自動起動を停止します。(x.xのところはインストールバージョンによってかわります)

手動起動および停止は

sudo -u postgres /Library/PostgreSQL/9.4/bin/pg_ctl -D /Library/PostgreSQL/x.x/data start
sudo -u postgres /Library/PostgreSQL/9.4/bin/pg_ctl -D /Library/PostgreSQL/x.x/data stop

で行います。(x.xのところはインストールバージョンによってかわります)

PHPからの接続について

BigSurでのMAMP PHPからPostgreSQLの接続では

  • BigSur OSデフォルトのPHPにはPostgreSQLのドライバが入っていないので、CLI実行で問題が出る
  • 最新版PostgreSQLでは認証にsha256が利用されており、暗号化の問題で接続できない

という2点が問題になります。対応する必要があります。CLI実行時は特にフレームワークのマイグレーションなどで問題が出ますね。

CLI実行時はMAMPのPHPを利用する

CLI実行時は、MAMPのPHPを利用するようにすることで対応可能です。MAMPのPHPはpostgresql用ドライバが問題なくはいっており、動きます。

/Applications/MAMP/bin/php/php7.3.24/bin/php -c "/Applications/MAMP/bin/php/php7.3.24/conf/php.ini" yii migrate/up

例としてはこんなかんじです。(PHPが7.3.24の場合)。念の為php.iniを指定して実行しています。なお上記のコマンドは、僕が使っているYii2フレームワークのマイグレーション実行コマンドです。(Laravelより高速開発可能ですよー。という宣伝)

接続認証方式をMD5にする

EDBのPostgreSQLでは、接続認証がsha256方式となっている。
PDO-PostgreSQLドライバーでは古いMD5認証であるため認証が通らない。
「authentication requires libpq version 10 or above」というエラーが出る。
ので、PostgreSQL側の設定を変える必要がある。

https://mebee.info/2021/01/26/post-28446/
▲ここを参考に書き換える。(参考サイトの方ありがとうございます)

EDBでは、postgresql.confおよびpg_hba.conf
/Library/PostgreSQL/x.x/data
内にあります。(x.xはバージョンに合わせてください)

が、しかし、このフォルダは、postgresユーザーのみアクセス可能になっているため、GUIでは書き換えに行けない。
ターミナルで、sudoを指定した上で、vimやらnanoやらで書き換えてください。

書き換えたらPostgreSQLを再起動したらOK!

PostgreSQLいいよ!

PostgreSQLは久しぶり。webだとMySQLがどうしても多くなっちゃうけど、PostgreSQLの優位性は高い。今回は工場の基幹システムをPHPでつくるというなかなかにピーキーな案件ですが、PostgreSQLの堅牢さと柔軟さがあれば、web屋でもこんな案件取るチャンスあるよ!

現場からは以上です。アディオス!!