LoginSignup
83
26

More than 1 year has passed since last update.

【個人開発】モノやサービスを供養できるアプリを作ってみた。【オマイリー】

Last updated at Posted at 2021-10-15

はじめに

top-image.png

・買ったばかりのスマホを落として画面バキバキになってしまった
・サポート終了になるInternetExplorer
・元カレのくれたプレゼント

「どうしよう…」

そのあと湧き上がる

「やり場のない気持ちをぶつけたい」

みなさんにもそんな時があると思います。

お世話になったモノやサービスに敬意を込めて供養してあげる。

とても慈悲深いアプリが出来ました。

サービス概要

投稿されたタイトルをクリックすると、専用のお墓に見立てた位牌が鎮座しています。
moko.gif

「御参り」ボタンを押すと黙祷タイムです。
moko1.gif

きちんと御参りができればTwitterシェア出来ます。

シェアすることで他の方から気持ちを可視化したと気付いてもらうことができます。

ヘッダーからタイトル検索もできます。
スクリーンショット 2021-10-13 1.39.30.png

こだわったポイント

1.見た目

「供養」と聞くと思い浮かぶのは大抵の場合ですと神社・仏閣・お墓でしょう。

そんな厳かなイメージを崩さないためにカラーは黒を基調としています。桜も舞います。

2.形態素解析

特定の人の名前が入ると色々と問題になる可能性があるので【人名】はタイトル部分で対象外としました。

mecabというgemと、mecab-ipadic-NEologdというmecabのシステム辞書を用いています。

また、辞書に登録されていない珍しい名前の方を除外するため別途でcsvファイル作成し読み込んでいます。

参考: https://qiita.com/sho-jp/items/50243956373f21b1e138

omailly_test3.gif

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

お盆に間に合わなかった為、きちんと供養しておきます。

83
26
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
26