mysql-clientだけでRails環境構築@Mac

2022.09.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近では、開発に使うMySQLやPostgresなどのデータベースもDocker上に用意するのが普通だと思います。
他方、Rails+MySQLの開発環境をMacで構築しようとすると大抵トラブるのですが、そこでの解決方法として、MySQL本体を直接インストールする事を提示している例が多いです。
私も過去にはあまり考えずやっちゃってましたが、新しいMacBookに移行するのを機に心を入れ替えました。使わないものはビタ一つ入れたくない。

という訳でここではMac&Docker使用を前提として、クライアントのインストールだけで済ます手順を紹介します。

(そもそも)gem mysql2って何?

Railsの開発ではすっかりお馴染みのgem mysql2。環境構築の際に必ずトラブるやつですね。あとOSのUpgradeした時とか。
公式サイトによると

This gem links against MySQL's libmysqlclient library or Connector/C library

とあります。ならばクライアントさえあれば動くはず。
という事で以下が手順になります。

1. mysql-client のインストール

クライアントはhomebrewでインストールできます。

# install
% brew install mysql-client

# installed location
% brew --prefix mysql-client
/opt/homebrew/opt/mysql-client

2. bundle configの設定

お馴染みbuild configで、mysql2のnative extensionsをbuildする際のOptionを指定してやります。正しく指定しないと、リンク相手が見つからないでコケます。
なおbuild configコマンドは設定内容を置き換えしますので、既存設定がある場合は注意。

# set config
% bundle config --local build.mysql2 "--with-mysql-config=/opt/homebrew/opt/mysql-client/bin/mysql_config"

# confirm
% bundle config
Settings are listed in order of priority. The top value will be used.
:
:

ここでは、他にも--with-mysqlclient-lib--with-mysqlclient-dirといったそれっぽいOptionがあるものの、結局↑のような--with-mysql-configでの指定でのみ、ビルドに成功しました。
ここはVerが変わったりするとひょっとしたら違う結果になるかもしれません。上手くいかない場合はお試しください。

3. bundle install

成功すればOKです。

% bundle install
:
Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Fetching oj 3.13.16
:

上手くいかない時は、2に戻って設定内容等を確認してください。 他にもopenssl絡みでビルド失敗するケースなどは有名ですので、合わせて対処してください。

以上です。