gem化しよう
プログラミング美徳の不幸はプログラミング以上に政治や宗教の薄っぺらい話をだらだらすることでおなじみですが、今日はプログラミングの話です。
最近ひさびさにgem作って、公開しました。
このgemを使うとrailsのモデルでカラムを持っていない場合でもスキーマレスにデータを登録することができます。
class BlogPost < ActiveRecord::Base include Virtualize set_virtual_attributes :memo, :meta_title, :meta_description, :og_title, :og_description, on: :data end
こうしておけばdataというTEXT型のカラム一つ持っておけば
@post = BlogPost.first @post.meta_title = "SEO上のタイトル" @post.og_title = "facebook用のタイトル" @post.save
みたいに細かいことが気軽にできるようになります。非常にシンプルなのでgemに依存することもなく便利です。
ただし、serializeされた値はMySQL側から見えなくなるというデメリットがあり、具体的にはSQLで検索したりソートすることが(不可能ではないのだけど)現実的に厳しくなります。
したがってこの機能は上記のようなどうでもいい値にだけ用いて、重要なものは普通にカラム作りましょう。
あるいはソート用のデータとしてはsolrやelastic search側に値を持ってしまうというのも手なのかもしれませんが、やはり本当にスキーマレスなものを追求するならmongodbなどを使うべきです。
ただし、現実的にmongoやsolr, redisなどを併用せずにRDBMS単体で細かいことをやるには便利です。
それともうひとつ重要なことですが、こういうrails wayじゃないことはほっとくと負債化しやすいので気をつけることです。対策として、gemとして公開して疎結合にすること、アプリケーションから実装を気にしないようにすることが重要だと思います。