静岡市でWeb開発しているkazuomatzです。
弊社では、開発するモノとして位置情報を扱うサービスが比較的多いです。
Rails開発において、MySQLで位置情報を扱うGemであるactiverecord-mysql2spatial-adapterにお世話になってきましたが、このGem、開発がほぼ止まっているようで、最後の更新が2017年の7月で、サポートされているRailsのバージョンは4.1です。
ただ、いろいろな開発者の方が元のリポジトリーをforkしてRailsのバージョンに追随しており、こちらのリポジトリで、Rails4.2 と Rails5.1に対応したGemが公開されています。
過去手がけてきた位置情報を扱うRailsのアプリケーションのGemfileを並べてみると、こんな感じ。
2023年9月更新
MySQL8.0を使用する場合は、これだと動かないので、こちらを参考にして下さい。
Rails 4.2の場合
gem 'activerecord-mysql2spatial-adapter', github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: 'rails-42'
Rails 5.0の場合
gem 'activerecord-mysql2spatial-adapter' , github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: '3f03ce772959e80797e5913682b3b4aff8847fd8'
Rails5.0の場合はいたってシュールですね・・・。
Rails 5.1の場合
gem 'activerecord-mysql2spatial-adapter', github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: 'rails-5'
これらすべてのバージョンが本家にmergeされてません。
たまたま、自分はRails 5.2での位置情報を扱うWeb開発を行う機会がなかったのですが、恐らくRails5.2に対応したバージョンはなかったかと思います。
で、時代はRails 6です。Rails4系のものは、6系に移行したいところです。
そもそも、Rails + MySQLで位置情報を扱う需要が少ないんでしょうか、緯度経度をDecimalか何かで保存すればそれでOKなのでしょうか、Rails 6 + MySQLで位置情報を扱えるGemって必要ないんでしょうか、それともPostgreSQLなの・・・? いろいろ探しても見つかりません。
というわけで、上記のrails-5のGemをforkして改造すれば動くのではないかと思いたち、Rails 6で動作するactiverecord-mysql2spatial-adapterを作ってみることにしました。
やったことといえば、ひたすらコードをトレースしながら、ActiceRecord 5と6の差を埋める作業をコツコツとやりました。引数の違いを吸収したり、宣言されていなかったものがなくなっている部分を埋めたりそんな感じ。
マイグレーションとデータの読み書きができるようになったので、多分使えるでしょう。
Rails 6.0の場合
gem 'activerecord-mysql2spatial-adapter', github: 'kazuomatz/activerecord-mysql2spatial-adapter', branch: 'rails-6'
これで動くハズです。
ただ、これを本家にmergeして欲しいのだけど、PRも放置されているようで、何ともなりません。
こういう場合は、どうしたらいいんでしょうかね。
一昔前は、Railsに乗ってるだけで幸せな日々が送れていたはずなのに、開発が止まってしまうGemがいろいろと出てきて、辛い時代になったきたなぁと思うのは自分だけでしょうか・・?