Kyo_s_s Homepage
Gomamayo Share 作成記
プログラミング

ゴママヨを投稿・共有するサービス「Gomamayo Share」を作成しました。

gomamayo-share

サイト: https://gomamayo-share.vercel.app/

GitHub: https://github.com/Kyo-s-s/gomamayo-share

Ruby on Rails のチュートリアルを一通り終えて、何か作ってみたいなぁと思い作成しました。

ゴママヨとは?

ゴママヨとは、言葉遊びのひとつで、ある複合語の結合部で連続する同じ音が続いているものを指します。 たとえば “アカウント登録” は、結合部で “と” が連続しているためゴママヨです。

Gomamayo Share でできること

以下の機能があります。

研究室でゴママヨが流行っていて、ゼミ中でもゴママヨに反応するようになってしまいました(最悪)。 そんな中で、良い・面白いゴママヨを共有できるサイトがあれば面白いなと思い作成しました。

技術スタック
バックエンド

Ruby on Rails で作成しました。Render にデプロイしています。 ゴママヨ判定には形態素解析ライブラリの MeCab と mecab-ipadic-NEologd を使用しています。

ログイン機能は Devise Token Auth を使用しました。 ログイン機能の実装が大変そうだなぁと思っていたのですが、 Devise Token Auth を使うことでほぼコードを書かずに実装できました。

テストには RSpec を使用しました。途中までRailsチュートリアルのテストを参考にしていたのですが、つらくて途中からRSpecに切り替えました。

Render にデプロイする際、MeCabを使っている都合上、Dockerを使用してデプロイするようにしました。 雰囲気で書いたら動いてしまったのですが、あまり良くわかっていません。難しい…。

フロントエンド

Next.js で作成しました。Vercel にデプロイしています。 UIライブラリとしてChakra UIを使用しました。

ログイン情報はSession(ユーザーが許可したらCookie)に保存し、ログイン情報が存在すればその情報が正しいかどうかをバックエンドに問い合わせ、 正しい場合はContext APIを使用しユーザー情報を保持するようにしました。 ログインしている場合のみ投稿ボタンを表示する、といった処理の実装の際にContext APIはとても便利でした。

CI/CD

GitHub Actions を使用し、テスト・Lintが通らないとマージできないように設定しました。 バックエンドのテストには MeCab が必要なのですが、GitHub Actions が走る毎に MeCab をインストールしていては時間がかかるため、 MeCabをインストールしたDockerイメージを使用し、そのDockerイメージをキャッシュするようにしました。 これにより、テストが数分で完了するようになりました。

ゴママヨ判定

投稿する文字列がゴママヨかどうかの判定は、次のようにして行っています。

  1. 文字列を形態素解析し、それぞれの読みを取得する。
  2. 連続する品詞それぞれを確認し、前の末尾と後ろの先頭が一致しているかどうか確認する。

連続する品詞それぞれについての確認は、 Rubyでは.each_cons(2)とすることによりとても簡単に記述できます。 この記法は、競技プログラミングの文脈でRustのstd::slice::windowsの記法を見て、同じ記法がRubyにもないのかなぁと思い調べたら見つけました。便利!

この判定の方法より、固有名詞自体がゴママヨである(例: “サイレンススズカ”、“東新宿”)場合はこれ自体を品詞として扱ってしまうため、 上手く判定できません。空白を入れることで別の品詞として扱うようになるため、そのような対処法を取ってくださいという感じになっています。

読みを取得するため、たとえば CHUNITHM は チュウニズム となります。このため、 “毎日CHUNITHM” はきちんとゴママヨとして判定されます。

感想

Ruby on Rails の勉強のために作り始めたはずだったのですが、フロントの実装(とくにUIデザイン)のほうが大変でした。 どうしたら見やすいデザインになるのかが分からず、試行錯誤を繰り返しました。

バックエンドの方は先にテストを書いてから実装に移ったため、そこまで詰まることなくコードを書くことができました。

おわりに

サーバー代で赤字です。助けて!

© 2025 Kyo_s_s