【個人開発】旅行やデートのプランを共有するSNS「おでかけプランニング」を作成しました

# はじめに

はじめまして3rararaと申します！

今回は旅行やデートのプランを共有するSNS「おでかけプランニング(GoOutPlanning)」を作成したため、
記事にまとめておこうと思います

これからポートフォリオを作成しようと考えている方などの一例として、作成の一助となれば幸いです！
機能を追加する度に記事をアップデートできたらと考えています！✨

7/11追記 GoogleVisionAPIを導入し、不適切な画像を投稿できないよう実装しました！

# 自己紹介
卸売業や不動産関係の経理事務を5年間従事していましたが、
プログラミングに興味が湧きエンジニアになることを決意しました
2024年4月よりDMM WEBCAMPさんでプログラミングの学習を開始し、
学習期間2ヶ月、開発期間は1ヶ月ほどです！

# 目次
[1. ポートフォリオの紹介](#1ポートフォリオの紹介)
[2. 機能紹介](#2機能紹介)
[3. 実装のこだわりポイント](#3実装のこだわりポイント)
[4. フリー素材等の紹介](#4フリー素材等の紹介)
[5. 使用技術等](#5使用技術等)
[6. 今後の予定](#6今後の予定)

## 1.ポートフォリオの紹介
![go_out_plannin_header_logo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/f3c0ab6f-8ce7-9888-4c21-f36ea3a3bfb9.jpeg)

### サービス概要
「旅行やデートのプランをこれから考える人、頑張って考えた人」のための
"行き先"ではなく"プラン"を共有するSNSアプリです。

【サイトURL】

https://go-out-planning.net

レスポンシブ対応済みのため、PCでもスマートフォンでもご利用いただけます

【Github URL】

https://github.com/3rarara/go_out_planning

本記事では、「Go out Planning」の概要やこだわりポイント、
苦労した点などについて書いていきます！
機能の実装については記載していませんのでご留意ください🙇

### 開発テーマを選んだきっかけ
旅行やデートのプランを練ることが苦手で、同行者に考えてもらうことが多くありました
いつもプランを考えてくれている同行者は私ではなく、「第三者に誉めてもらいたい！」とよく言っていました

旅行やデートの"行き先"ではなく"プラン"を共有するSNSアプリがあれば、 同行者のようなプランを練る側の方にも、私のようなプランを練ることが苦手な方にも役に立つのではないかと考え、 このサービスを思いつきました

## 2.機能紹介
### 検索機能
#### 通常検索

<img alt="search_map.gif" src="https://i.gyazo.com/42362b5c3981c84726c852a25d0c4da5.gif">

#### マップ検索

<img alt="search_map.gif" src="https://i.gyazo.com/69d0704cdb6584ef73635fedb4e3e439.gif">


### 投稿機能 (ユーザー登録必要)
スケジュールがいくつ増えても大丈夫なように、フォームの追加・削除を何度でも行えるようにしています！

実装方法はこちらの記事に詳しく書いています

https://qiita.com/3rarara/items/e62fef62a58a7f6fdaac

[![Image from Gyazo](https://i.gyazo.com/1b0ce29e1fef843bccb65dd850475985.gif)](https://gyazo.com/1b0ce29e1fef843bccb65dd850475985)

### GoogleVisionAPIを導入　※7/11追記
APIを導入して不適切な画像を検知し投稿できないよう実装しました
投稿しようとすると、下記のようにフラッシュメッセージが表示されます

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2871e066-2f9e-23bb-9a80-37a4cf0fc397.png">

実装時はこちらの記事を参考にしました！
ありがとうございます！

https://qiita.com/kumaryoya/items/7d2ee56a10172b7f0b29

### 新規登録・ログイン認証をbootstrapモーダルで実装　※7/17追記
バリデーションはJavascriptで実装しました

[![Image from Gyazo](https://i.gyazo.com/378162453b356670e6bd3448172d7668.gif)](https://gyazo.com/378162453b356670e6bd3448172d7668)

[![Image from Gyazo](https://i.gyazo.com/69e29e3c3abc88b6e333d1d8eb2c9497.gif)](https://gyazo.com/69e29e3c3abc88b6e333d1d8eb2c9497)

https://qiita.com/3rarara/items/6450603f2ea29f5d7793

https://qiita.com/3rarara/items/ea4dc2686f16d745c38c

## 3.実装のこだわりポイント
詳しい内容の記事がある場合はリンク貼っています！

- [未ログインユーザーをIPアドレスで特定し、閲覧数にカウントすること](https://qiita.com/3rarara/items/6adcbebc7f3dfc87394b)

- [通知が来ている時に視覚的に気づくようカウントアイコンを表示したこと](https://qiita.com/3rarara/items/5204dba18e73051708fd)

- [複数のワードの検索が可能かつ、投稿検索ではPlanとPlanDetail、Tag内の全てのカラムを検索していること](https://qiita.com/3rarara/items/7bb1959c28df0d77235c)

- [GoogleMapを導入し、場所が視覚的にわかりやすいこと](https://qiita.com/3rarara/items/31b6d01c8bc911bbd2f0)

- 下書き機能を実装し、作成を途中で保存できること
- コメント機能、いいね機能、フォロー機能、DM機能に非同期化をしていること
- タブメニューを作成することによって機能が多くてもシンプルなレイアウトにしたこと

## 4.フリー素材等の紹介
### アイコンサイト

https://fontawesome.com/kits/fccb2a51cf/setup

### ロゴ作成サイト

https://www.canva.com/ja_jp/

### イラストサイト

https://loosedrawing.com/

## 5.使用技術等
[![My Skills](https://skillicons.dev/icons?i=html,css,bootstrap,ruby,rails,js,aws,git,github)](https://skillicons.dev)

### 開発環境
- OS：Linux(CentOS)
- 言語：HTML,CSS,JavaScript,Ruby,SQL
- フレームワーク：Ruby on Rails
- JSライブラリ：jQuery
- IDE：Cloud9

### その他
- GitHub Actions（自動テスト・デプロイ）
- draw.io(ER図)
- Figma(画面遷移図)

#### GitHub Actions（自動テスト・デプロイ）
・ RSpecテストの実装理由
計画段階では、多くの機能を実装することに気を取られてテストを軽視していました。
しかし、ポートフォリオについて多くの記事を読んでみると実装よりも遥かにテストが大事であることに気がつきました
どれだけ様々な機能が備わっていても動作しなければ意味がないからです
また、RSpecテストはアプリ根幹である機能のみ実装しています

・ RSpec自動化の理由
デプロイは段階的に複数回行われます
実際の現場でもリリースしてから一部を更新することは必ずあります
他の機能を実装した時に、根幹である機能に影響を及ぼしている可能性があります
そういった影響を気づかずにデプロイしてしまうことを防ぐために、
mainブランチにpushした段階でテストを走らせ、テストが全てクリアになればデプロイが実行されるように実装しました


#### ER図
https://drive.google.com/file/d/15grhLVoA1iR_CYBgvsUeSlVAfuTyn3RA/view?usp=sharing

![ER.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/babef66b-5d9f-b133-6b03-8fc33ccea0dd.png)

#### 画面遷移図

https://www.figma.com/design/te6oY9hhH464bylYuSoaZj/go_out_planning?node-id=0-1&t=oYhkwvziZzAvcjD2-1

### 使用API
- Google Maps API
- Geocoding API

## 6.今後の予定
もっと良いアプリにするために、以下のような機能を順次追加を検討中です

- タグ入力保管機能をdatalist以外で実装する
現在datalistを使用していますが、,で区切った２つ目のワード以降は入力保管されないため

- 画像圧縮をプログレッシブ方式に
JPGとPNGのみ許可する形で、PNGはJPGに変換後プログレッシブ方式に、
JPGはプログレッシブ方式に変換するよう実装を検討中

~~- ログイン認証画面をモーダルで実装する~~ 実装済

~~- GoogleのVisionAPIかNaturalLanguageAPIを導入~~ 実装済

# さいごに
最後まで読んでいただきありがとうございました！
これからポートフォリオを作成しようと考えている方などの一例として、作成の一助となれば幸いです！

https://go-out-planning.net/