誹謗中傷が機能しないSNSを個人開発してみました!「技術・工夫編」| Rails7 x TailwindCSS x Render.com
現在新バージョンを公開中(詳細はポートフォリオから)
概要
こちらの記事 の続きです。中身の実装として、どうして、どうやって実装したのかを紹介したいと思います。主にgemや機能の設計の話になります。
ユーザー登録に関して
ユーザー登録に関して言うと、Railsだとおそらくdeviseというgemがいちばん有名どころではないでしょうか?僕も一度プロトタイプを作ってデプロイした際にそれを利用しましたが、いまいち使い勝手が良くないなと感じました。
理由は、
-
開発の段階でそもそもRails7に公式で対応していなかった。
→現在は公式で対応していますが、開発の段階では対応していなくて調べたりするのにも資料も少なく手間がかかると感じたから。 -
いまいちユーザーフレンドリーだと感じない登録画面だったから
→Remember Meなど入力を省略するような機能はdeviseにもありますが、昨今のアプリのユーザー登録ってfacebookでログインとか、Googleでログインとか、そういった「ユーザー登録も、ログインも1つのボタンで完結して、押したらすぐに始められる」という利点があると思います。それを実装したほうが、アプリの使い勝手としてはいいなと思い、deviseの利用は辞めました。(ユーザー情報を持ちたくないというのもありますが)
以上の理由で、僕のアプリでは「deviseを用いずに、Googleログインのみを実装する」という方向に決めました。→Googleログインに加えて、独自のカラムも追加しているので、その方法は別の記事にします。
「ランダムに手紙を送る」の実装
「ランダムに送る」というのを聞いて皆さんは何を考えますか?僕はランダムに送る、という機能を考えたときに「ユーザーが、自分では誰に送ったかわからない且つ予測しても意味がない状態」にできたらそれは達成されたと言える、と考えました。
そこでまず、送る相手のユーザーを選ぶコードを書く際に以下のことを考えました。
- すべてのユーザーの中から自分のidは除く
- その中でランダムに取り出す(sampleメソッド)みたいな実装にしない
- ユーザーが手紙を受け取ることのミスマッチを起こさない(Aは手紙を多くもらい、Bは少ないみたいな)
こうしたときに、僕は回転寿司の仕組みを思い出しました。回転寿司って、手元のタブレットで頼むと「新規のお客さんの注文は優先的に厨房に送られてすぐに来る」ようになってるんです。これを僕のアプリに当てはめると、「新しく登録してくれたユーザーほど、早く遊びたいはずだから優先的に手紙を受け取れるようにしよう」と考えました。
結果として、僕はUserに「手紙の受け取り時間」のカラムを追加し、これによってその時間の早いユーザーから手紙を送る、という仕様に決めて実装しました。
手紙の受け取り時間の早いユーザーに送る、とすることで仮に仕組みがわかったとて特定には至らず、それが誰かもわからないようにできるようになりました。
最後に
ここまでお付き合いくださりありがとうございます。前回の記事でも紹介したアプリのリンクと、自作しましたポートフォリオ、自作ブログのリンクも貼っておくので、興味を持っていただけたら嬉しいです。→これらも記事にします。。。溜まってる!!!
絶賛転職活動中ですので、どうぞよろしくお願いいたします。
作ったもの
コトノハというアプリを作りました!
Harukimedes's Portfolioというポートフォリオを作りました!
My Updating (b)logsというブログを作りました!
Discussion