【個人開発】日本各地の三つ星ホテル級のきれいなトイレが探せる！ 検索サービス『三つ星トイレ』を作りました

## はじめに
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/46222074-27b0-7e16-8def-5675ed649ae8.png)
はじめまして、[しゅとー](https://twitter.com/shutooorm02)と申します。
2022年10月に、日本各地のきれいなトイレが検索できるトイレ検索サービス『[三つ星トイレ](https://www.mitsuboshi-powder-rooms.com/)』をリリースしました！

当初は、出先でもきれいなトイレを使いたい女性の方をターゲットとして想定していましたが、ありがたいことに男性の方にもご好評をいただいています。（うれしい誤算）

【サービスURL】

https://www.mitsuboshi-powder-rooms.com/

【Github URL】

https://github.com/shutorm02/mitsuboshi_powder_rooms

本記事では、『三つ星トイレ』のサービス概要やこだわりポイント、開発時につまったことなどについてお話します。

## 開発のきっかけ
地元でよく使う駅ビルの、普段なかなか行かないトイレにたまたま入ったことがきっかけで、このサービスを思いつきました。

そこは、床もパウダールームの鏡もくもりのないほどにピカピカ、となりにはトイレとは別に、カーテンのある授乳室やおむつ台などが完備されていました。
レストランがまるっとひとつ入ってしまうくらいの空間を、すべてトイレに割いてしまう駅ビルのおもてなし力に圧倒されたのを覚えています。

「公共のトイレ」と聞くとあまりきれいな印象はありませんが、よくよく考えてみると、一見なんの変哲もないサービスエリアのトイレでさえ、鏡がきちんと磨かれていたり、お花が活けてあったりと、掃除をしてくれた方の心づかいを感じることが多々あります。

もはや「**きれいなトイレを日本の観光名所に！**」というスローガンを掲げてもいいくらいです。

当初は「こんなのがあったら面白いなー」というアイディアのひとつにすぎませんでしたが、その後、RUNTEQの菊本校長とポートフォリオアイディアのプロお二人に「いいね！」と言っていただけたこともあり、『三つ星トイレ』の開発に踏み切りました。

## 主な機能
『三つ星トイレ』は、日本各地のきれいなトイレが検索できる、トイレ検索サービスです。

本当にきれいなトイレのみが登録されたサービスとしたかったため、トイレの場所や設備情報（以降「スポット情報」）はスクレイピングなどで得た既存の情報ではなく、すべてユーザーさんからご登録いただいたものです。

主な機能として、**スポット情報の閲覧**、**登録**、**評価**があります。

### スポット情報の閲覧
画面下部の「**検索**」ボタンから、現在登録されているスポット情報を閲覧できます。
表示方法は、「**マップ表示**」と「**リスト表示**」の２種類です。

|マップ表示|リスト表示|
|---|---|
|<img alt="search_map.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/ba2e434f-2c0e-bf20-a62e-a7b941909d5d.gif">|<img alt="search_index.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/8f2ed5fe-b97e-5bf4-85a4-03dee38d9f14.gif">|
|「**駅名・施設名から検索**」や「**現在地へ移動する**」ボタンから、最寄り駅や現在地からお近くのきれいなトイレを検索することができます。| 現在登録されているすべてのスポット情報の閲覧できます。

### スポット情報の登録　※登録ユーザーのみ
ユーザー登録をすると、画面下部の「**投稿**」ボタンから、出先やお近くで見つけたきれいなトイレを投稿することができます。

<img width="100%" alt="create_spot.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/8e286d66-a723-1ffa-b0ca-e0caa5808898.gif">

### スポット情報の評価　※登録ユーザーのみ
スポット名の下部にある**星マーク**や**スポット情報の詳細**から、自分やほかのユーザーさんが投稿したスポット情報の評価をすることができます。
（評価コメントは選ぶ星の数によって変わります）

<img width="100%" alt="create_feedback.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/caf4071a-14cd-f812-cb16-a033e953c0cb.gif">

## こだわりポイント
### なるべくトイレを連想されないようなデザインにする
このサービスを作るにあたって一番に考えたのが、「**なるべくトイレを連想されないようなデザインにしよう**」でした。
百貨店や駅ビルなど、きれいなトイレが併設された施設はたくさんあるものの、どうしても「公共のトイレ」と聞くと「キレイじゃない」というワードを連想しがちです。

その認識を払拭するべく、『三つ星トイレ』では、「トイレ」というワードやトイレを連想させやすい白の配色をできるだけ減らし、パステルカラーをメインとしたデザインにしています。
![63479a51d4dea35d308cb37855a8dcab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/4707a78b-5144-4b32-2f8b-089690e87e7e.png)

色についてはド素人だったので、配色はこちらを参考にしました。

https://photoshopvip.net/102159

### 評価コメントは選択式にする
また、題材がトイレということもあり、**フリーテキストだとネガティブなコメントが集まりやすい**という懸念もありました。
そのため、評価コメントをすべて選択式にし、以下のように、選んだ星の数によって選べるコメントを変更できるようにしています。
![change_star.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/43a0bd6d-2c1e-393d-6ce3-a12c15689d35.gif)

## 詰まったポイント
『三つ星トイレ』を開発するうえで、躓くところはたくさんありました。
そのなかでも、もっとも頭を悩ませ、サービスの開発を挫折しかけた、つまづき二巨頭がこちら。

- 環境構築で欲張りすぎる
- Tailwind CSS のスタイルが反映されない問題

### 環境構築で欲張りすぎる
サービスの開発以前から、「**ポートフォリオは最初から壮大なものを作りすぎない**」、「**小さく始めて最低限のものを作り、それ以外の機能は後から付け足そう**」など、ポートフォリオを作成する上での諸注意をたくさん聞いていました。
また、私自身もそれについて、ちゃんと理解しているつもりでした。でも、いざ開発段階になると好奇心とわくわくが先立ち、こんなことになるのです。

「**バックエンドは`Rails7系`、フロントには`Vue３`、そんでもってバンドルツールには`Vite`を使ってみよう**」

こんなふうに欲張った結果、開発の最初の2週間を見事に溶かし、`Rails6系`、プレーンな`JavaScript`、おなじみの`Webpacker`で再スタートを着る羽目になりました。

ちなみに、当時迷走していたときのメモがこちら ↓
```
ここにきて、Vite + Rails 7 + Vue3 での構築を諦めたくなる…。

理由としては以下の通り。

- そもそも Vite がまだ試用中で、Production にむかないぞ！だった。(*2022年8月時点)
- そもそも情報少ない。探すときにむっちゃ時間かかる。
- 個人情報扱うのに、アプリ内部が不安定でいいのか…？
- っていうか、環境構築より、アプリの中身で勝負すべきでは？

こんな感じで、なんか難しい言い回しで英語使ってイキっている人みたいな感覚を覚える。
ほんとに勝負すべきはそんなところなのか？
（いや、そんなところも大事ではあるのだけれども）
```

もちろん、上記のような技術を学ぶ時間があって、それを活用できればよいのですが、働きながら学習をされていたり、ポートフォリオの作成に期限を設けていたり、特に就活を目的としてポートフォリオを制作されている方は、ご自身の環境をよくよく考慮した上での技術選定をおすすめしたいです…。
（特にフロント側は`Vue`や`React`など、誘惑ポイントがいっぱいですが、プレーンな`JS`でもじゅうぶんに戦えます…！）
### Tailwind CSS のスタイルが反映されない問題
スポット情報の登録機能を作成したころ、ローカル上では反映されるのに、Herokuにデプロイ後、**Tailwind のスタイルが一部反映されない問題**にぶち当たりました。

（以下の画像のように、設備詳細のタグが表示されない…）

<img width="46%" alt="21a76780510c735dbf8a342ae7bf89d0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/689963f3-11e0-1f3c-789e-293eed66c11f.png">

結論から書くと、 **`Tailwind CSS` のクラス名を動的に変更している**ことが原因でした。

https://zenn.dev/utamono832/articles/9cb66f9e68a345

当初、以下のようにデコレーターに設備詳細のタグのメソッドを作り、`target_person_id`の値によって`bg-〇〇`の内容を変更させるようにしていましたが、`Tailwind CSS`は動的な処理に向かず、タグの背景色が設定されないという不具合が起こったようです。

```Ruby
def tag_color(equipment_detail)
  case equipment_detail.target_person_id
  when 1, 2
    'powder-pink'
  when 3
    'baby-blue'
  when 4
    'fitting-pink'
  else
    'mitsuboshi-gray'
  end
end
```
```Ruby
<% spot.equipment_details.each do |equipment_detail| %>
  <span class="equipment-tag bg-<%= tag_color(equipment_detail) %>">
    <%= equipment_detail.content %>
  </span>
<% end %>
```

いろいろな方にアドバイスをいただき、結局クラス名を動的に変更せず、View側へ処理を直書きすることで事なきを得ましたが、サービスの根幹に関わるところだったので、個人的に一番つらかったところです…。

## 使用技術ほか
#### 【おもな使用技術】
**バックエンド**
 ・Ruby 3.1.2
 ・Rails 6.1.6

**フロントエンド**
 ・JavaScript（JQuery）
 ・Tailwind CSS

**インフラ**
 ・Heroku
 ・Amazon S3

**使用API**
 ・Google Maps API
 ・Geocoding API
 ・Twitter API

#### 【ER図】
![c5ef4a7c5a544ab7ecb69a88e422182a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988428/3dc35539-121b-137b-1193-3f2cb17226f3.png)
※ 2022年12月現在 ... Reaction テーブルのみ、未作成

## 今後の予定
今後は、もっと使いやすいサービスにしていくために、以下のような機能を順次追加予定です。
- Reactを導入し、ページのちらつきをなくす
- スポット情報の投稿時、投稿と評価が同時にできるようにする
- 評価コメントに対する評価を追加
- スポット情報の検索フォームを追加、設備や評価数によって検索できるようにする
- スマホでも「現在地へ移動する」ボタンが使えるようにする

## おわりに
きれいなトイレには、おもてなしの国、日本のすばらしさがたくさん詰まっています。
そして、そのきれいなトイレがいつもきれいでいられるのは、毎日掃除をしてくれている方々やトイレをきれいに使おうとする人たちの心づかいのたまものだと思います。

そんなすてきなトイレ文化をますます広げるべく、『三つ星トイレ』とともに日々精進してまいります！

https://www.mitsuboshi-powder-rooms.com/

最後まで読んでいただき、ありがとうございました！