railsでmysql2をtrilogyに変更するのをやめた件
概要
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を徐々に無効にしていくつもりです。
一方のtrilogyはcaching_sha2_passwordの完全対応には消極的です。
最近v2.8.0で対応済みとrelease noteにはありましたが、私の環境では動作確認できませんでした。
なので、trilogyの利用はまだ時期尚早と判断し、利用しないことにしました。
gitHubやshopifyがmysqlでcaching_sha2_passwordを採用すればtrilogyも正式に変更されるはずなので、その時を待つのが良いでしょう。
まとめ
trilogyを使うのは、mysql8のcaching_sha2_passwordがサポートされていないので、今使うのはちょっと微妙です。
caching_sha2_passwordが完全にサポートされ、mysql8に限らず、mysql9でも動作が安定するようになってから使うくらいで丁度いいでしょう。
Discussion