[個人開発・本リリース] 完全未経験が冷蔵庫の中身を簡単管理できるサービスをリリースした件

## はじめに

こんにちは。ryosuke([@ryousuke_mogurA](https://x.com/ryousuke_mogurA))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

前回MVPリリースしたアプリを本リリースしたので新たな記事を書くことにしました。
技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。

:::note warn
警告
現在はサービス停止しています。
:::
## 目次
[1.作成したサービスの紹介](#サービスの紹介)
[2.作成した経緯](#作成した経緯)
[3.技術スタック](#技術スタック)
[４.こだわったポイント](#こだわったポイント)
[5.画面紹介](#画面紹介)
[6.ER図](#ER図)
[7.実装機能](#実装機能)
[8.今後の展開](#今後の展開)
[9.反省点](#反省点)
[10.感想](#感想)

## サービスの紹介
[![Image from Gyazo](https://i.gyazo.com/e7e1ae987f47a09b7c2ac2a2a178383d.jpg)](https://gyazo.com/e7e1ae987f47a09b7c2ac2a2a178383d)

### サービスURL（レスポンシブ対応済み）

https://pantry-chef-notifier.com

https://github.com/ryo-mogura/Pantry-Chef-Notifier

Web アプリ「PantryChefNotifier」は「食材の在庫リスト」の作成ができるアプリです。

ユーザーはLINEを使用したログインかメールによるログインを選ぶことができます。
食材を登録することで、その食材の消費・賞味期限が近づいたらメール・LINEで通知を受け取れます。

### 作成した経緯
以前購入した食材を忘れて重複購入し、冷蔵庫が食材で溢れてしまったり、消費期限を過ぎて廃棄することが多かったりと無駄な出費が続いていました。また、冷凍保存した食材の鮮度や消費期限を把握できず、品質に不安を感じながら料理をすることもあり、適したレシピを探すのが面倒で料理のモチベーションも低下していました。

「食材の管理　レシピ　アプリ」で調べると食材の消費・賞味期限を管理できるアプリやレシピを検索できるアプリは多々あったのですが消費・賞味期限の管理ができて消費・賞味期限が近い食材を使用したレシピを自動で通知してくれるアプリはヒットしませんでした。

そこで食材の管理とレシピ検索を行うことができ、なおかつ自動で通知してくれるサービスが欲しいと思い立ち、このサービスを作成しました。

## 技術スタック
| カテゴリー | 技術スタック |
| --- | --- |
| Frontend | Rails 7.1.3.2 (Hotwire/Turbo/Stimulus), TailwindCSS, DaisyUI |
| Backend | Rails 7.1.3.2 (Hotwire/Turbo/Stimulus) |
| Database | PostgreSQL |
| Environment | Docker / docker-compose |
| Infrastructure | http://render.com/ |
| API | [Line Messaging API](https://github.com/line/line-bot-sdk-ruby), [Rakuten_web_service API](https://github.com/rakuten-ws/rws-ruby-sdk/blob/master/README.ja.md) |

## こだわったポイント
### 1. Lineでの操作
ユーザーがLINE上でほとんどの機能を利用できるようにすることで、利便性とアクセス性を大幅に向上させています。
具体例) 食材登録機能
LINEからの登録 | LINEからの登録2
-- | --
![Image from Gyazo](https://i.gyazo.com/460fb0b78f668b791b7e14cd4073b9f9.png) | [![Image from Gyazo](https://i.gyazo.com/776ecd6d0e5b65525fe02247362dc5a9.png)](https://gyazo.com/776ecd6d0e5b65525fe02247362dc5a9)

### 2. OAuth認証によるLineログイン機能
手間なくサービスを使用していただけるようにLINEアカウントによるログイン機能を導入しました。
![btn_login_base.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582154/23462b68-ff88-6ed2-0b2c-19ed277e1618.png)

### 3. Lineプッシュ通知とメール通知
登録した食材の消費期限の2日前から毎朝8時に期限が近い食材とその食材を使用したレシピの通知が入ります。

LINE通知　 | メール通知
-- | --
[![Image from Gyazo](https://i.gyazo.com/eae32341f0647d68655321c1ac6b3c3d.jpg)](https://gyazo.com/eae32341f0647d68655321c1ac6b3c3d) | [![Image from Gyazo](https://i.gyazo.com/0d39c06f07216776baa58b9e96f08d2c.png)](https://gyazo.com/0d39c06f07216776baa58b9e96f08d2c)

### 4.モーダルを使用した編集機能
登録した食品の編集を行う際に従来のページ遷移を伴う方法ではなく、モーダルウィンドウを使用することでユーザー体験を向上させました。
 [![Image from Gyazo](https://i.gyazo.com/4a7c16674d30850c2a306e838516fe84.gif)](https://gyazo.com/4a7c16674d30850c2a306e838516fe84)

## 画面紹介
トップ画面 | ログイン画面
-- | --
[![Image from Gyazo](https://i.gyazo.com/823a4b975d8071754c3526c0320bfa70.gif)](https://gyazo.com/823a4b975d8071754c3526c0320bfa70) | [![Image from Gyazo](https://i.gyazo.com/14fe01b50e299cc8b7e26613aa3bb075.gif)](https://gyazo.com/14fe01b50e299cc8b7e26613aa3bb075)

ユーザー登録画面 | 食材一覧画面
-- | --
[![Image from Gyazo](https://i.gyazo.com/d5ea69b0e46902369d5112d6c30468ae.png)](https://gyazo.com/d5ea69b0e46902369d5112d6c30468ae)　| [![Image from Gyazo](https://i.gyazo.com/abb364ef28956fdee46c6a3f0c28c5b7.gif)](https://gyazo.com/abb364ef28956fdee46c6a3f0c28c5b7)

食材の登録画面 | 食材の詳細
-- | --
[![Image from Gyazo](https://i.gyazo.com/b32b0a97c20d4d78bfa5ca9dc27676bb.gif)](https://gyazo.com/b32b0a97c20d4d78bfa5ca9dc27676bb) | [![Image from Gyazo](https://i.gyazo.com/00e2d772675ec4d623273f1f35a286ab.gif)](https://gyazo.com/00e2d772675ec4d623273f1f35a286ab)

食材の編集（詳細ページ上） | 食材の削除機能
-- | --
 | [![Image from Gyazo](https://i.gyazo.com/4a7c16674d30850c2a306e838516fe84.gif)](https://gyazo.com/4a7c16674d30850c2a306e838516fe84) | [![Image from Gyazo](https://i.gyazo.com/1bb8c722ee31fe1b302e00e868cd7611.gif)](https://gyazo.com/1bb8c722ee31fe1b302e00e868cd7611) 

レシピ検索ページ | マイページ
-- | --
[![Image from Gyazo](https://i.gyazo.com/9fd50891d7995dabb272959c8444c0a6.gif)](https://gyazo.com/9fd50891d7995dabb272959c8444c0a6) | [![Image from Gyazo](https://i.gyazo.com/5634429052aa312fe709b11c6296579f.png)](https://gyazo.com/5634429052aa312fe709b11c6296579f)

### Line上の画面
メニュー画面 | 食材の登録 | 食材の登録(2)
-- | -- | --
[![Image from Gyazo](https://i.gyazo.com/44cf3c1113087d9ab7eb4ed257df9d35.png)](https://gyazo.com/44cf3c1113087d9ab7eb4ed257df9d35) | [![Image from Gyazo](https://i.gyazo.com/460fb0b78f668b791b7e14cd4073b9f9.png)](https://gyazo.com/460fb0b78f668b791b7e14cd4073b9f9) | [![Image from Gyazo](https://i.gyazo.com/ff5f91d4cd7be3a1f8e1aef27cceec6f.png)](https://gyazo.com/ff5f91d4cd7be3a1f8e1aef27cceec6f)

食材の登録(3) | 食材リスト | 消費期限が2日以内の食材の取得
-- | -- | --
[![Image from Gyazo](https://i.gyazo.com/776ecd6d0e5b65525fe02247362dc5a9.png)](https://gyazo.com/776ecd6d0e5b65525fe02247362dc5a9) | [![Image from Gyazo](https://i.gyazo.com/a59a2a7ec3af97292a230c4e2da69eeb.png)](https://gyazo.com/a59a2a7ec3af97292a230c4e2da69eeb) | [![Image from Gyazo](https://i.gyazo.com/25062e2fec3eff88bde3daae9fecf1a9.png)](https://gyazo.com/25062e2fec3eff88bde3daae9fecf1a9)

食材の削除 | レシピ検索 | 入力情報のリセット
-- | -- | --
[![Image from Gyazo](https://i.gyazo.com/00e57e02c47a045e52ba2865f54794e1.png)](https://gyazo.com/00e57e02c47a045e52ba2865f54794e1) | [![Image from Gyazo](https://i.gyazo.com/48802a38ff45551edd25e31146753e41.png)](https://gyazo.com/48802a38ff45551edd25e31146753e41) | [![Image from Gyazo](https://i.gyazo.com/403e60d59930e221f2683e214e3aaa6a.jpg)](https://gyazo.com/403e60d59930e221f2683e214e3aaa6a)

## ER図
![Pantry-Chef-Notifier-ER図](https://github.com/user-attachments/assets/193c837a-62e0-4637-8bb6-b927b632b2f1)

## 実装機能
- 認証系
   - 新規登録
   - ログイン/LINEログイン
   - ログアウト
   - パスワードリセット
   - 管理者機能
   - マイページ
- 食材機能
   - 食材の登録・編集・削除
   - 　ソート機能
   - 　ページネーション
   - 　カテゴリー機能
- LINE機能
   - 食材の登録
   - 食材の削除
   - 食材リストの取得
   - 消費期限リストの取得
   - レシピ検索
- 通知機能(LINE・メール)
   - 消費期限が２日以内の食材のリスト
   - 消費期限が２日以内の食材を使用したレシピ
- レシピ検索機能
   - お気に入り追加
   - お気に入り削除
- その他
   - お問い合わせ
   - マイページ機能（ユーザー情報・お気に入りレシピの表示・カテゴリーグラフ機能）
## 今後の展開
今後、サービス面・技術面で、以下のとおり追加・修正を行う予定です。
### サービス面
- Googleログイン機能
- 買い物リスト機能
### 技術面
- テストコードの追加
- CI/CDの実装
## 反省点
### 設計・検討不足
全体的に検討不足だった点です。
作成するものが具体的に決まり、データベースの設計や画面遷移図などをして開発に取り掛かりましたが、あまり深く考えず設計を行ってしまったため、何度も手戻りが発生する場面もありました。
また開発当初は初めて使用する技術のキャッチアップを実装しながら行っていたため、開発スケジュールの遅れや実装イメージと差異がでてしまうことがありました。

以上の経験を踏まえて設計の重要性と詳細な検討の必要性を痛感しました。事前の入念な準備があればコードの修正や変更にも柔軟に対応できます。しかし、今回のように入念な準備を怠ると開発が進むにつれて修正が難しくなり開発が止まってしまうことがわかりました。
## 感想
ここまで読んでいただきありがとうございます。
技術的な内容は別途記事にしていきたいと思います。
今回、初めて個人サービスを開発・リリースすることができました。
設計からインフラまで一連の流れを経験し、ユーザーを意識した開発など様々なことを学ぶことができました。

まだ改善できる点ややるべきことが残っていますが、ひとまず形になったことを嬉しく思います。

今後も引き続き更新していきますので、ぜひ使っていただけると幸いです。
最後までお読みいただきありがとうございました！

X もやっていますのでもしよろしければフォローお願いします！

https://x.com/ryousuke_mogurA