json型をアプリケーションに導入するパターン
Ruby on Railsをメインにバックエンドエンジニアをしておりますyotuba_engです。
今回はタイトルにもあるとおり、弊社のプロダクトCarelyでPostgresのjson型を導入したことについて書きたいと思います。
Ruby on RailsのバックエンドにPostgresやMySQLを使用することは多いと思いますが、この二つのRDBでは実はjson型を使用することができます。
json型はアンチパターン?
そもそもRDBを使っているのにも関わらず、json型を使用することに抵抗がある方もいると思います。
実際に調べてみると、安易にjson型を使用するのはアンチパターンであると書かれていることもあり、自分も同意見です。
実際にjson型で保存したデータは、RDBの規則に沿った制約がしづらいこと、データを取り出して活用する際に加工が必要になることなどが、実際に運用している際に弊社のエンジニアからも不安が出てきました。
ただ、ビジネス上どうしても柔軟なデータ保存が必要になる場合があります。
個人的には、json型と論理削除が導入に際して、一番難しくベストプラクティスがわかっていない部分があり、さまざまな運用パターンを知りたいなと思っています。
この二つは安易に導入するべきでないと書かれていることが多いですが、ビジネスをサービスに起こす際にどうしても導入せざるを得ないことが多いように感じています。
(だからこそMySQLも5.7からjson型に対応したのだと思います)
実際にjson型を導入したビジネスパターン
ユーザーは設問に回答し、管理者はその回答データの平均点などを見ることができる機能
管理者側は、設問を自由に追加することができる←新機能
回答パターンとしては、テキストでの自由回答や、何段階かにチェックをつけて回答
想定されるビジネスパターン
日記アプリ。
ユーザーは自由にアイテムを追加することができる。
notionのようなアプリ。
ポイント
【自由に】という部分がポイントだと思っています。
実際の実装では、回答の保存の部分で使用したのですが、回答の段階にも制限がなく(2/4/10段階などが今のところある)この回答の保存をしようとするとjson以外での保存に無理が出る気がします。
ただ、jsonで保存したデータを活用しようとする際に従来のRDBを操作するやり方とは違う感覚に陥ります。
終わりに
json型の導入と論理削除の導入については自分自身でもまだベストプラクティスというものに辿り着けていないですが、実際にサービスで導入したパターンというのを集めていくしかないと思っていて、その一助になればと思い、今回は書きました。