macOS で Bundler で pg gem をインストールしようとする際に Can't find the 'libpq-fe.h' header というエラーが出る場合の対処方法の一つ

前提

  • Intel Mac
  • pg のバージョンは 1.4.6
  • Ruby のバージョンは 3.2.2
  • PostgreSQL のバージョンは 15

結論

bundler の config にて、build.pg に対して --with-opt-dir="/usr/local/opt/libpq" を設定する。

具体的な設定方法

設定方法は 2つ あります。

1. bundle config コマンドで設定する場合

以下のコマンドを実行します。

$ bundle config --local build.pg --with-opt-dir="/usr/local/opt/libpq"

すると、カレントディレクトリの .bundle 配下に設定が永続的に記録され、以降の bundle install でインストールが成功します。

2. 環境変数で指定する場合

「1.」の内容を環境変数で指定します。「1.」を実行した場合に生成されるファイルの中身を見ると、どう設定すればいいかがわかります。

BUNDLE_BUILD__PG=--with-opt-dir=/usr/local/opt/libpq の形で設定します*1

この方法が活きるのは GitHub Actions の ruby/setup-ruby を用いるときです。

公式ドキュメントにあるようにbundle config で設定したい内容がある場合には原則として BUNDLE_HOGEHOGE の環境変数で設定することが求められています*2

*1:export してもいいし direnv でもいいし、環境変数の設定方法で設定すれば問題ないです

*2:作っては壊しの CI 環境なのでそうするべきなのでしょう

Powered by はてなブログ