Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Rails6.0でactiverecord-mysql2spatial-adapterを使う

More than 1 year has passed since last update.

しずおかオンラインでWeb開発しているkazuomatzです。

弊社では、開発するモノとして位置情報を扱うサービスが比較的多いです。

Rails開発において、MySQLで位置情報を扱うGemであるactiverecord-mysql2spatial-adapterにお世話になってきましたが、このGem、開発がほぼ止まっているようで、最後の更新が2017年の7月で、サポートされているRailsのバージョンは4.1です。

ただ、いろいろな開発者の方が元のリポジトリーをforkしてRailsのバージョンに追随しており、こちらのリポジトリで、Rails4.2Rails5.1に対応したGemが公開されています。

過去手がけてきた位置情報を扱うRailsのアプリケーションのGemfileを並べてみると、こんな感じ。

Rails 4.2の場合

Gemfile
gem 'activerecord-mysql2spatial-adapter', github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: 'rails-42'

Rails 5.0の場合

Gemfile
gem 'activerecord-mysql2spatial-adapter' , github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: '3f03ce772959e80797e5913682b3b4aff8847fd8'

Rails5.0の場合はいたってシュールですね・・・。

Rails 5.1の場合

Gemfile
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の場合

Gemfile
gem 'activerecord-mysql2spatial-adapter', github: 'kazuomatz/activerecord-mysql2spatial-adapter', branch: 'rails-6'

これで動くハズです。
ただ、これを本家にmergeして欲しいのだけど、PRも放置されているようで、何ともなりません。
こういう場合は、どうしたらいいんでしょうかね。

一昔前は、Railsに乗ってるだけで幸せな日々が送れていたはずなのに、開発が止まってしまうGemがいろいろと出てきて、辛い時代になったきたなぁと思うのは自分だけでしょうか・・?

kazuomatz
静岡でRailsでWebサービスを作ったり、NuxtJsやSwiftやKotlinでアプリを作ったりしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away