はじめに
・買ったばかりのスマホを落として画面バキバキになってしまった
・サポート終了になるInternetExplorer
・元カレのくれたプレゼント
「どうしよう…」
そのあと湧き上がる
「やり場のない気持ちをぶつけたい」
みなさんにもそんな時があると思います。
お世話になったモノやサービスに敬意を込めて供養してあげる。
とても慈悲深いアプリが出来ました。
サービス概要
投稿されたタイトルをクリックすると、専用のお墓に見立てた位牌が鎮座しています。
きちんと御参りができればTwitterシェア出来ます。
シェアすることで他の方から気持ちを可視化したと気付いてもらうことができます。
こだわったポイント
1.見た目
「供養」と聞くと思い浮かぶのは大抵の場合ですと神社・仏閣・お墓でしょう。
そんな厳かなイメージを崩さないためにカラーは黒を基調としています。桜も舞います。
2.形態素解析
特定の人の名前が入ると色々と問題になる可能性があるので【人名】はタイトル部分で対象外としました。
mecabというgemと、mecab-ipadic-NEologdというmecabのシステム辞書を用いています。
また、辞書に登録されていない珍しい名前の方を除外するため別途でcsvファイル作成し読み込んでいます。
参考: https://qiita.com/sho-jp/items/50243956373f21b1e138
3.動的OGP出力
供養されたのが何なのかを分かるようにするために固定ではなく動的に反映される様にしました。
Cloudinaryを使っています。
参考: https://qiita.com/yuppymam/items/21a65d32fed9d7ecceba
苦労したところ
-
モーダル内のテキストを一定時間でフェードインさせる部分と文言のランダム化はJSですが、初めて見るメソッドだったり慣れない書き方だったので苦労しました。
-
人名を入力すると弾かれる部分はカスタムバリデーションを作成しました。
class CheckPersonNameValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
names = tokenize(value)
return if names.blank?
record.errors[attribute] << " #{names.join} 様が傷つきます。"
end
private
def tokenize(value)
nm = Natto::MeCab.new("-d #{Rails.root.join('dic/mecab-ipadic-neologd')} -u #{Rails.root.join('dic/userdic/user_dic_omailly.dic')}")
names = []
nm.parse(value) do |n|
names << n.surface if n.feature.split(',')[2] == '人名'
end
names
end
end
- ローカルでは問題なかったのですが、pushした時にmecabが見つからないエラーに悩まされました。
aptファイルがないよ!と怒られたり、インストール手順が悪いのかと思い$ heroku run bush
でシェルに入りherokuのOSを確認してpathを通してみたり、herokuのbuildpackなるものを使ってみたりしましたがうまくいかず…。
先輩エンジニアに「Dockerだといけるかも」とアドバイスをいただけたので、rootにDockerfileとheroku.ymlを設置することで解決しました。
今後実装したいこと
- 焼香か線香のlikeボタン
- 投稿のジャンル分け
主な技術
- Ruby 2.7.3
- Rails 6.1.4
- JavaScript
- jQuery
主なGem
- cloudinary
- mecab
- natto
- pagy
- meta-tags
- rubocop
おわりに
最後まで目を通していただきありがとうございました。
色々な方からアドバイスをいただけたり、一緒に考えてもらいながら作り終えることが出来ました。
本当に感謝しています。
これからも技術を追求してより良いアプリを作れるように頑張っていきます。
ありがとうございました。
twitter: https://twitter.com/Find_michi
お盆に間に合わなかった為、きちんと供養しておきます。