🛤️

railsでmysql2をtrilogyに変更するのをやめた件

2024/08/07に公開

概要

railsのverisonを7.1にupdateしたので、mysql2のgemをtrilogyに変更しようと思ったのですが、結局取りやめました。

railsを利用していてmysql2をtrilogyに変更しようと考えている人は多いと思います。

この記事では私がmysql2をtrilogyに変更する過程と辞めた理由を記述しておこうと思います。

何かの役に立てば幸いです。

変更しようと考えた理由

  • bundle installやupdate時に、mysql2のnative extensio周りでよくエラーが発生する
  • trilogyの方がinstallが楽で、速度も速いという情報を見たので

変更しなかった理由

  • mysql8のcaching_sha2_passwordが未サポートで、現在も放置されているので、今後の運用に不安を覚えた。
  • mysqlはcaching_sha2_passwordを今後は推奨しない方向なので、trilogyとの方向性の違いが気になった

環境

  • ruby 3.0.7
  • rails 7.0.8
  • mysql 8.0.X

変更手順

とても簡単です。

gem変更

-gem 'mysql2', '0.5.6'
+gem "trilogy"

Gemfile.lock変更

mysql2 (0.5.6)の部分を削除

adapter修正

database.ymlのadapterを変更

-  adapter: mysql2
+  adapter: trilogy

bundler削除

vendor/bundle配下のmysql2フォルダを削除

bundle install

インストール

bundle install --path vendor/bundle

rails info

adapterが反映されていることを確認

bundle exec rails about

Database adapterを確認

Database adapter          trilogy

テスト

上記まで確認できたらテストコードを実行します。

mysqlの認証プラグインがmysql_native_passwordであれば、All Greenになると思います。

mysqlが8以上でcaching_sha2_passwordを使っている場合は、全てエラーになるはずです。

mysql_native_passwordにすれば全て動きますが、mysqlはmysql_native_passwordを徐々に無効にしていくつもりです。

https://dev.mysql.com/doc/refman/8.4/en/native-pluggable-authentication.html

一方のtrilogyはcaching_sha2_passwordの完全対応には消極的です。

最近v2.8.0で対応済みとrelease noteにはありましたが、私の環境では動作確認できませんでした。

https://github.com/trilogy-libraries/trilogy/releases/tag/v2.8.0

なので、trilogyの利用はまだ時期尚早と判断し、利用しないことにしました。

gitHubやshopifyがmysqlでcaching_sha2_passwordを採用すればtrilogyも正式に変更されるはずなので、その時を待つのが良いでしょう。

まとめ

trilogyを使うのは、mysql8のcaching_sha2_passwordがサポートされていないので、今使うのはちょっと微妙です。

caching_sha2_passwordが完全にサポートされ、mysql8に限らず、mysql9でも動作が安定するようになってから使うくらいで丁度いいでしょう。

Discussion