【個人開発】誰でも簡単に謎解きを作成・回答できる「EnigmaPortals」をリリースしました！👓

## はじめに
皆様初めまして、[ヒデボー](https://x.com/yamarice428 "ヒデボー")と申します!
プログラミングスクール「RUNTEQ」に入学し現在、WEBエンジニア転職を目指して学習&転職活動を行なっています！
今回、個人開発ポートフォリオとして[EnigmaPortals~謎クリエイト~](https://enigmaportals.com/)を開発しました！

## サービス名
#### EnigmaPortals ~謎クリエイト~

[![Image from Gyazo](https://i.gyazo.com/0d8b483df7e4c9eb17e3b01e828333da.png)](https://gyazo.com/0d8b483df7e4c9eb17e3b01e828333da)

#### ・サービスURL

https://enigmaportals.com/

#### ・Github URL

https://github.com/yamadahideto/EnigmaCraft

## サービス概要
自作の謎を投稿、**AIを使用して謎を生成**するなど自由に謎の投稿・閲覧・解答するためのサービスです。 謎の正解数に応じてポイントが付与され、ポイント数によってランキング表示があり、回答者・出題者としても楽しめるサービスです。



## 開発背景

私はリアル脱出ゲームや謎解きが趣味で、よく参加しています。

ただ**本格的な謎解きは時間がかかる為**、気軽に短時間で謎解きを体験したい。 
また、**自分も謎解きの問題を作成できたら良いな**と考えていました。 しかし、玄人やプロが作った謎の投稿サービスはあるのですが、**謎作成の初心者が気軽に投稿できる様な投稿サービス**はあまりなかったので作成してみました！

## 機能紹介

| トップ画面 | ログイン画面 |
|:-:|:-:|
|[![Image from Gyazo](https://i.gyazo.com/056c38abdf7d011551860329343885d4.gif)](https://gyazo.com/056c38abdf7d011551860329343885d4) |[![Image from Gyazo](https://i.gyazo.com/e3e0fbccd2e39b49de07dbf2431afbc4.png)](https://gyazo.com/e3e0fbccd2e39b49de07dbf2431afbc4)
| トップページでメイン機能の使い方がわかるようにGif動画を挿入し、各説明文の近くにログインボタンを配置しました。| ログインはGoogle認証とゲストログインボタンのみにしており、ユーザー登録やログイン時の入力の手間をなくすようにしています。  |


| 作成された謎一覧 | ユーザーランキング |
|:-:|:-:|
|[![Image from Gyazo](https://i.gyazo.com/cf87e8e97d04f60c135b8baa6d519552.gif)](https://gyazo.com/cf87e8e97d04f60c135b8baa6d519552)|[![Image from Gyazo](https://i.gyazo.com/e2c47339d2872232824faa60fe01ed7a.png)](https://gyazo.com/e2c47339d2872232824faa60fe01ed7a) |
| 作成された謎の一覧を表示しています。　クリックすることで謎に回答することができます! |  謎を一問正解する毎に1謎ポイントを付与しており謎ポイントの保有数でランキング表示をしています。 |

| AI謎生成 | オリジナルで謎作成 |
|:-:|:-:|
| [![Image from Gyazo](https://i.gyazo.com/67203fd586aadfb3c78960d11bc3ae20.png)](https://gyazo.com/67203fd586aadfb3c78960d11bc3ae20)|[![Image from Gyazo](https://i.gyazo.com/143b1b0a7a295d0280e65469e9a07d80.png)](https://gyazo.com/143b1b0a7a295d0280e65469e9a07d80)|
| 誰でも気軽に作成できるように、カテゴリと正解を入力するだけでAIがタイトル・文章・画像を生成してくれるようにしました。 | オリジナルで謎解きを考えたい方向けにタイトル、ジャンル、謎の内容と画像を自分で投稿できるようにしています。 |

| 謎への回答 | 正解済み・自作の謎は背景色変更 |
|:-:|:-:|
|[![Image from Gyazo](https://i.gyazo.com/ecedf0b2f0a71f31bce957b4bd6505a7.gif)](https://gyazo.com/ecedf0b2f0a71f31bce957b4bd6505a7)|[![Image from Gyazo](https://i.gyazo.com/3dc5eddb753a45626ed3f7710999d8fa.gif)](https://gyazo.com/3dc5eddb753a45626ed3f7710999d8fa)|
|他のユーザーが作成した問題に回答できます。Xで共有時に現在の謎がリンク設定されます。 | 自作の問題や正解済みの問題は背景色を変更し、まだ正解していない問題がすぐにわかるようにしています。 |

## 技術構成

| カテゴリ | 使用技術 |
|:-:|:-:|
|フロントエンド|Rails 7.1.3.2(Hotwire.Turbo), JavaScript|
|CSSフレームワーク|TailwindCSS, daisyUI|
|バックエンド|Rails 7.1.3.2 (Ruby 3.2.2) |
|データベース| PostgreSQL|
|ファイルサーバー| AWS S3|
|アプリケーションサーバー|heroku|
|Web API|OpenAI API(GPT-4・DALLE-3), Google API |
|開発環境|Docker|

## 選定理由
- スクールでRuby on Railsを中心に学習していたので、学習した内容の復習も兼ねてRuby on Railsで開発しました。
- フロントエンドの知識が薄かった事もあり、TailswindCSS + daisyUIで開発効率の向上を図るため導入しました。
- 以前ミニアプリでローカル開発でのデプロイは経験していたので、Dockerでの開発・デプロイに挑戦しました。

## こだわったポイント

### UI/UX
カラーを青系統と黒をメインにし、違和感のないデザインを心がけ、レスポンシブにも対応させました。
触っていてストレスを感じさせないように入力項目などはできるだけ削ぎ落とし、直感的に操作ができるようにしました。

また、UXの向上を図る為HotWireのTurboを用いて「**ページネーション・謎の回答機能**」を非同期で実装しました。

### ・ トップページ
機能紹介をGifで行うことで、できるだけシンプルに文字を少なく案内できるようにしました。
また、各機能紹介のすぐ下にログインボタンを配置する事で興味を持ってもらえたタイミングですぐにログインができるようにしました。

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

### ・謎一覧画面
正解済み、自作した謎はすぐにわかるように背景色を変更しました。
また、MVP後にユーザーから「**謎の作成者・何人が正解したのか・自分の保有している謎ポイント数を知りたい**」と声をいただいたので、追加実装することで正解数から難易度の予測も可能にしました。

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

### ・AIでの謎の作成
入力項目を**ジャンルと謎の正解のみ**にし、ジャンルは選択式にすることでユーザーの離脱率を下げられるようにしました。

また、AIで謎を生成する性質上どうしても**生成中の待ち時間**が発生してしまいます。
その待ち時間を楽しんでもらえるように、**自作した謎をランダムでモーダル表示**することにより、**待ち時間も謎解きを体験できるようにしました。**
処理部分を非同期にすることも考えましたが、**待ち時間にも謎に触れて欲しい**と思いこちらを採用しました。

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

### ・謎の回答
他のユーザーが作成した問題で、未正解の問題のみ回答ができるようにしています。
HotWireのTurboを使用することで答えの入力後、リアルタイムで正誤判定できるようにしました。
正解後はすぐに答えを表示し再回答できないようにしています。

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

## 最後に
自分のオリジナルのアプリを作成することで、アプリ開発の大変さ・楽しさを経験することができました！
しかし開発していくうちに「こっちで実装したほうが良いかも...」や「この技術でできると思ってたけどできない!?」などがあり、事前の技術検証と設計の作り込みの大切さを痛感しました。
まだまだ分からない事だらけなので日々学習を継続し、頭に描いたアイデアをそのまま実現できるようになりたいと考えています！

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