開発ノート@HarikoApps

HarikoApps: https://hariko.sprkls.me

2024-06-04

Railsで特定のカラム値にスコープされる連番付与のConcernを書いた話 #2

Railsで特定のカラムの値にスコープされる連番をアプリに設けたいなと思いました。このブログがまさにそうなのですが、今までは記事にグローバルなIDを使っていてそれでも不都合はそこまでないですが、ブログごとに記事のIDを採番したほうがどのブログの何番の記事というのがわかりやすくなりそうです(GithubのプルリクのIDのようなものをイメージしています)。

class Post < ActiveRecord::Base
  belongs_to :blog
end
のようなモデルを考えた時に、Postモデルにあるblog_idが同じレコードのスコープで連番(Sequential)IDを付与するということです。

まずは既存のGemを探してみました。そしてsequencedというGemを見つけました。まさにこのようなものが欲しいと考えていたようなGemでした。しかし最後のコミットが2年前ですでにメンテナンスされていなそうでした。

そこでこのGemのコードを参考にしてModel Concernを書くことにしました。出来上がったConcernはGistに上げました

実コードにして40行程度で実装できたのでアプリケーションにコピペで組み込んでもメンテナンス性を損なうようなことはあまりないのではないでしょうか。

時間が経ちRailsのエコシステムには広く使われていてもメンテナンスされていないGemも見かけるようになりました。ライブラリのメンテナンスには労力がかかりますし、さまざまな事情でメンテナンスされなくなることもありますので、今回のような場合にはGemではなくConcernのような形でコードスニペットをシェアできたら良いのかもしれません。

関連してRails本体では認証機能のジェネレータを組み込むための議論が進んでいます。解決したい問題の内容や規模に応じて今後さらにコードシェアの選択肢が広がっていくのかもしれませんね。
Updated at