【個人開発】サウナ後のご飯「サ飯」の情報共有ができるアプリを開発しました。

# はじめに
はじめまして！[タク](https://x.com/sttk_91) と申します。
未経験からWebエンジニアへの転職を目指して、働きながらプログラミングスクールで学習を続けております。

この度、「[**サ飯の時間**](https://sameshi-time.com)」というアプリをリリースしました！
サウナ後のご飯「サウナ飯」、通称「サ飯」を記録・共有することで、

**▶︎ サウナ愛好家の方へ**
　「サ飯」を通して新しいコミュニティ
　サウナ ⇨ サ飯のモデルコース

**▶︎ サウナ初心者の方へ**
　サウナへの新しい入り口

 を提供することを目指したCGMサービスです。


# サービス


![sameshi_ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878469/28948717-44d8-2093-0bc0-48c00c42168a.png)
**開発期間：３ヶ月**

サービスURL

https://sameshi-time.com

Github

https://github.com/sato-taku/sameshi

## エンジニア転職チャンネルで取り上げていただきました！
<iframe width="560" height="315" src="https://www.youtube.com/embed/vqmQnRP88Pk?si=i5HOQuTyXHGm43m2&amp;start=622" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 開発背景
私にとってのサウナとは、**10年以上続く唯一の趣味**です。
大学在学中に当時通っていた美容師さんとの会話の中でサウナと出会い、自身の境遇の変化に比例して、変化のあった関心が多い中、変わらず大好きで行かずにはいられないサウナ。

**初めてのアプリ開発は、やはりそんな大好きなサウナに関連したものを作りたいと考えました。**

昨今のブームにより、サウナー（サウナ愛好家）が増え、
そのおかげもあり、サウナ施設の母数も増え、
各サウナ施設がどんどん力を入れて設備改革していて、
サウナに特化したアプリやWebサービスも増えているなか

当時まだ世になかった**サウナ飯に着目したアプリ**を開発しようと考えました。

# メイン機能
※はログイン限定機能

### 周辺サウナ検索
[![Image from Gyazo](https://i.gyazo.com/2b09c6d91622100ca02bf56d756a09d4.gif)](https://gyazo.com/2b09c6d91622100ca02bf56d756a09d4)
DBに保存されている現在地周辺のサウナ施設がマップ上に表示されます。
サウナ施設詳細ページにリンクすると、サウナ施設に紐づいた投稿が一覧表示されます。

:::note info
**現在の対応エリア**（順次拡大中）
新潟県、福島県、富山県、長野県、石川県、東京都、埼玉県、千葉県、神奈川県、山梨県、静岡県、愛知県、大阪府、京都府、福岡県、宮崎県、鹿児島県
:::

### 投稿一覧
[![Image from Gyazo](https://i.gyazo.com/6f0177d1e8e97670adbed09626e8247c.gif)](https://gyazo.com/6f0177d1e8e97670adbed09626e8247c)
多様な組み合わせで検索が可能です。

### 投稿詳細
[![Image from Gyazo](https://i.gyazo.com/fcda8bb536f6d4f2802e3f24246ba5bd.gif)](https://gyazo.com/fcda8bb536f6d4f2802e3f24246ba5bd)
直感的に操作が可能で、ユーザーと気軽にコミュニケーションが図れる設計。
投稿詳細ページからXシェアが可能です。

### ※ いいね＆コメント
[![Image from Gyazo](https://i.gyazo.com/49b235fda62ade9b1895b8ca1b77ba0a.gif)](https://gyazo.com/49b235fda62ade9b1895b8ca1b77ba0a)
非同期通信でブラウザにリアルタイムで反映されます。
表示はログイン後の画面です。

### ※ 新規投稿
[![Image from Gyazo](https://i.gyazo.com/9d1c256d9cf51d20b2545424a5c8e9e1.gif)](https://gyazo.com/9d1c256d9cf51d20b2545424a5c8e9e1)
サウナ施設入力欄はオートコンプリート機能が備わっており、DBに保存されているサウナ施設から選択していただく必要があります。

:::note warn
各都道府県、現在約100施設ずつの登録です。
:::

### ※ マイページ
<img src="https://i.gyazo.com/0301d3c767e3dad54cf4c5393e25fac6.gif" width="330px"><br>タブコンポーネントは`tailwindcss-stimulus-components`で整形。
タブ内は`turbo_frame_tag`を使用し、ページリフレッシュせずにコンテンツをロードできるようにしました。


# 技術スタック
|カテゴリ|技術|
|:-|:-|
|フロントエンド|Rails 7.1.3( Hotwirw / Turbo ), Javascript, TailwindCSS, DaisyUI|
|バックエンド|Rails7.1.3, Ruby3.2.2|
|データベース|PostgreSQL|
|環境構築|Docker|
|インフラ|Fly.io|
|Web API|Google Maps API( Maps Javascript API / Places API )|

## 技術選定理由

### フレームワーク
働きながらの開発であったため、開発速度で圧倒的に優れていると感じているRailsを採用。
主な使用想定がスマホなため、レスポンシブ対応が容易であり、コードの記述量を削減できるという理由でTailwindCSSを採用。

### Google Maps API
**Maps Javascript API**
アプリ内にGoogle Mapの表示。
Google Map内に各サウナ施設の位置にピン立てする機能。

**Places API**
サウナ施設の詳細情報を収集・DBへ保存。

## 開発環境・インフラ

### Dcoker
スクラップ＆ビルドが容易。
スクールのカリキュラムでの使用経験と転職後の開発も意識。

### Fly.io
東京リージョンがあり、無料枠がある。
DBはFly.ioがデフォルトで提供するPostgreSQLを採用。

# ER図
![sameshi_ER図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878469/229a84bf-d3f3-4b93-86a3-b25e298c8be4.png)

# 工夫した点
### UI / UX
<a href="https://gyazo.com/923929c867dee53a83970ef68994a522"><img src="https://i.gyazo.com/923929c867dee53a83970ef68994a522.png" alt="Image from Gyazo" width="349"/></a>
固定されたヘッダーとボトムナビゲーションにより、トップページとメインの機能に関してはどのページにいても**ワンタップでページ遷移**することができるようにしています。

[![Image from Gyazo](https://i.gyazo.com/0449136fe1412f795a14845a5206cd9d.gif)](https://gyazo.com/0449136fe1412f795a14845a5206cd9d)
**基本的にアプリ内の閲覧にユーザー登録、ログインは不要**にしてあり、ログインする必要があるページに遷移しようとした際にのみ、ログイン、新規登録ページに遷移するように設計しました。


# 今後の展望
**1. テスト**
開発中はテストが書けていなかったため、テストコードを追加しカバレッジを上げていきたいです。

**2. 対応エリア拡大**
Google Maps APIのコストと相談しながら順次対応エリアを拡大します。

**3. リファクタリング**
継続的にアップデートしつつアプリを育てていきたいと考えているので、開発効率向上のため随時リファクタリングします。

# おわりに
アプリ開発にあたり、スクール関係者の皆様には特に多大なGiveをいただきました。
本当にありがとうございました！
初めての記事投稿で至らない点も多いかと思いますが、今後は継続的に技術的なアウトプットを通して、自身の成長と、必要としている方へのGiveを実現していけるよう精進します。

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

# この記事を書いた人

https://x.com/sttk_91