【個人開発】持ち物リストを作成・共有するアプリ「All Ready」を作りました

# はじめに
こんにちは、[mana](https://qiita.com/kumateq)と申します。
プログラミングスクールRUNTEQで学習し、持ち物リストを作成・共有するアプリ「All Ready」を開発いたしました。

https://allready.jp

https://github.com/m-6517/all-ready

<img src="https://www.allready.jp/assets/ogp-b4d87c539fa6e51863d052081489dc7407781bee9999e42efe21ecb3068db31a.png" />

# アプリの紹介

### サービス概要
持ち物リストを作成し、かばんの中身を投稿・共有できるサービスです。
マストアイテムのみを投稿することもできます。
自分の持ち物を整理し、他のユーザーのかばんの中身を参考にすることで、持ち物リストをブラッシュアップできます。

### サービスへの想い、開発した理由
行き先に応じた持ち物リストを作成し、準備を整える時間が好きです。
例えば旅行の際は、直前まで使うものをチェックしておくことで忘れずに出発できます。
旅先で「持ってくればよかった」と感じたものをリストに追加すると、次回の準備がよりスムーズになります。
また、雑誌やWebサイト等でかばんの中身を紹介する記事を読むのも好きです。
誰が何をどのくらい持ち歩いているのかを知ることで、その人のライフスタイルやこだわりが垣間見え、とても興味深いと感じます。
このサービスを通じて、自分の持ち物を整理するだけでなく他のユーザーと共有し合い、より良い準備をサポートする場を提供したいと思い開発いたしました。

### メイン機能

#### 持ち物リスト
[![Image from Gyazo](https://i.gyazo.com/c0ab9c7fb1980ba71af92d654a45809d.gif)](https://gyazo.com/c0ab9c7fb1980ba71af92d654a45809d)
行き先ごとに持ち物リストを作成できます。
準備したアイテムにチェックを入れるとゲージのパーセントが増えていきます。

#### みんなの持ち物
[![Image from Gyazo](https://i.gyazo.com/5183b2371e21a26de1c44060d45f9082.gif)](https://gyazo.com/5183b2371e21a26de1c44060d45f9082)
他のユーザーが共有した持ち物リストを閲覧できます。
検索はリスト名・アイテム名・タグ・投稿の本文に対応しています。

#### マストアイテム
[![Image from Gyazo](https://i.gyazo.com/907029502fe4b91dd5ad3ebfd4f9507d.gif)](https://gyazo.com/907029502fe4b91dd5ad3ebfd4f9507d)
行き先ごとにマストアイテムを1つ紹介できます。
持ち物リストを作成しなくとも閲覧・投稿が可能です。

# 技術構成

### 使用技術
| カテゴリ | 技術 |
| ---- | ---- |
| フロントエンド | Rails 7.2.1 / TailwindCSS / daisyUI / JavaScript |
| バックエンド | Rails 7.2.1 (Ruby 3.2.3) |
| データベース | PostgreSQL |
| 開発環境 | Docker |
| インフラ | Heroku / AmazonS3 |
| API | OmniAuth Google OAuth2 |
| VCS | GitHub |
| CI/CD | GitHub Actions |

### ER図
![Image](https://github.com/user-attachments/assets/54483c5a-eda4-484f-a765-860a3810f5d4)

# こだわった点

### 持ち物リストのカスタマイズ
ユーザーが複数の持ち物リストを作成できるため、カスタマイズに関する機能を充実させました。
- 既存のアイテムの中から選択しリストに追加
- オリジナルのアイテムをリストに追加
- 複数準備するアイテムの数をバッジで表示
- 中身や行き先がわかるようカバー画像を設定
- 準備済みのアイテムのチェックをクリア
- リストを複製
- ドラッグ&ドロップでアイテムを並び替え
SortableJSとStimulusで実装しました。
[![Image from Gyazo](https://i.gyazo.com/22b86f53d7fda8dca3f6478f714ff2ec.gif)](https://gyazo.com/22b86f53d7fda8dca3f6478f714ff2ec)
- 準備済みのアイテムの表示・非表示を切り替え
[![Image from Gyazo](https://i.gyazo.com/ead5c56a129893c10fbe95368bc85e62.gif)](https://gyazo.com/ead5c56a129893c10fbe95368bc85e62)
- タグやコメントを加えて共有したリストのみを公開
各リストのメニューからモーダルで投稿を作成できます。
[![Image from Gyazo](https://i.gyazo.com/a86852bf28a3fc33be7b971d38a5cd6e.gif)](https://gyazo.com/a86852bf28a3fc33be7b971d38a5cd6e)

### ライトモード・ダークモードの切り替え
持ち物を管理する際により使いやすいよう、好みによってカラーを切り替えられるようにしました。

| ライトモード | ダークモード |
| ---- | ---- |
| [![Image from Gyazo](https://i.gyazo.com/bade34f943701232bb52b9c49099cd33.png)](https://gyazo.com/bade34f943701232bb52b9c49099cd33) | [![Image from Gyazo](https://i.gyazo.com/0aa1bb422abae771135f93440c2d1ba6.png)](https://gyazo.com/0aa1bb422abae771135f93440c2d1ba6) |

### レスポンシブ
持ち物を準備する際はスマートフォンでの使用を想定していますが、リストのカスタマイズなどはPCでよりスムーズにできるよう意識しました。

スマートフォン（メニューをモーダルで表示）
| | |
| ---- | ---- |
|![www.allready.jp_item_lists_332(iPhone XR) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931393/de7316f4-9f90-486f-967d-7c8cfdcb15b9.png) | ![www.allready.jp_item_lists_332(iPhone XR).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931393/df612c44-ac18-42f3-801f-faba37e3a3c4.png) |

PC （メニューを常に表示）
| |
| ---- |
| [![Image from Gyazo](https://i.gyazo.com/48d01de544e2a43e560e9a238b670cc0.png)](https://gyazo.com/48d01de544e2a43e560e9a238b670cc0) |

### グラデーションの使用
下記の理由から、ロゴやボタンにグラデーションを使用しています。
- リストにチェックを入れるとゲージのパーセントが増え、準備が段々と整っていくアプリであること
- 持ち物を管理するツールのため色数を少なくしたいが、シンプルすぎず出かける前のワクワク感を損なわないこと

### 動的OGP
"持ち物リスト"と"マストアイテム"をXでシェアできるため、各投稿のテキストと画像（画像なしの投稿にはデフォルト画像）を埋め込んでOGP画像を生成します。
| 持ち物リスト | マストアイテム |
| ---- | ---- |
|![スクリーンショット 2025-02-11 13.08.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931393/3f25f60f-8f39-4e54-abb4-12701637881a.png) | ![スクリーンショット 2025-02-11 13.07.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931393/7fcdc4fb-adff-4c42-9f1d-2a110004b7e9.png) |

# 今後の展望
いただいたフィードバックを参考に、より使いやすくなるよう改善していきたいです。
また、テストコードのカバレッジを高め、不具合の早期発見や防止につなげたいです。

# 終わりに
アプリ開発にあたりサポートしてくださった皆さまに心より感謝しております。
実装を進める中で問題解決に時間を要することもありましたが、「この機能を実現したい！」という目標に向かって励みました。
今後もよりよい体験を届けられるよう開発していきたいと思います。
お読みいただきありがとうございました！