miura-taiga / dust-hunters

0 stars 0 forks source link

DustHunters

DustHunters

Image from Gyazo

アプリ概要

本アプリは日々の掃除にゲーム要素を加え、掃除を毎日楽しく行える『お掃除支援アプリ』となっています。

開発背景

私は子供の頃から掃除を習慣化することが苦手でした。毎年年末の大掃除に「毎日少しづつ片付ければ、もっと楽なのにな〜」と思いつつ、毎年掃除を習慣化出来ていませんでした。 そんな掃除を後回しにしてしまう自分自身の経験から生まれました。夏休みの宿題を最後の日にまとめてやるタイプの人間で、継続的な習慣化が難しいと考えてました。 そんな私でも 1 日 5 分間だけなら可能だと考え作成しました。そして、更なる習慣化を実現するために私の好きなゲームのモンスターハンターのゲーム要素を付け加えることにしました。 これにより、掃除が苦手な私でも「毎日 5 分」、「好きなゲーム」と掃除への難易度が緩和させられるだろうと思い、この Web アプリを開発しました。

主要機能

🐉 クエスト機能

クエスト一覧ページから、任意の掃除場所のクエストを選択します。
選択すると戦闘画面へ移り、戦闘開始ボタンを押下すると 5 分間のカウントダウンが始まります。この間に選択した場所の掃除をします
カウントダウンが終了すると攻撃するボタンが出現し、モンスターに攻撃することが可能になります。

クエスト一覧 戦闘画面
Image from Gyazo Image from Gyazo

🌏X シェア機能

Xに共有するボタンを押下すると新規ウィンドウが立ち上がり、X のポスト画面に遷移し、討伐したモンスターを X に共有できます!

クエスト結果 X シャア
Image from Gyazo Image from Gyazo

🪪 ギルドカード機能

【📕 図鑑】討伐したモンスターが登録され、討伐数が閲覧できます。
【⏰ 活動履歴】1 日 1 クエスト完了することでスタンプが押されます。あとから、見返すことも可能です!
【🧹 掃除場所】今までどこを何回掃除したかをグラフで確認することができます!

図鑑 活動履歴 掃除場所グラフ
Image from Gyazo Image from Gyazo Image from Gyazo

👤 プロフィール機能

プロフィールページから「名前」「性別」を編集することが可能です!
性別を変更すると画面左下のアバターが変化します。

Image from Gyazo 男性 女性 その他
Image from Gyazo Image from Gyazo Image from Gyazo

使用技術

カテゴリ 技術 選定理由
フロントエンド Next.js / TypeScript SPA(シングルページアプリケーション)の開発に最適だと判断したため
バックエンド Ruby on Rails (API モード) 開発スピードが担保できるため
データベース PostgreSQL 複雑なクエリや ACID トランザクションの処理が強力なため
CSS / UI Tailwind CSS / MaterialUI 開発時のスタイリング作業の効率化のため / コンポーネントの豊富さとカスタマイズ性の高さから
認証 omniauth-google-oauth2 / jwt 認証フローカスタムしたかったため
開発環境 Docker 一貫性のある開発環境を簡単に構築できるため
インフラ Vercel / Render.com Next.js との互換性が高いため / 導入コストが低く、開発スピードを担保できるため
コード品質管理 ESLint / Prettier / Rubocop コードの品質及び、フォーマットを統一するため
その他 swr / jwt-decode / date-fns / NoSleep.js / react-chartjs-2 / chartjs-plugin-datalabels / @types/gtag.js 別途後述します

技術選定理由詳細

【Next.js について】

① ユーザービリティ向上のため

② フロントエンドスキル向上のため

③ ページルーティング、SSR,SSG を容易に実装できるため

【TypeScript について】

① 型による安全性の確保とバグの予防

② エディタサポートによる開発効率の向上

【Ruby on Rails について】

① 開発、制作速度の担保

② ドキュメントが豊富なため

【認証について】

①omniauth-google-oauth2

②jwt

③ なぜ、認証ライブラリを使用しなかったのか

【インフラについて】

①Vercel

②Render.com

【なぜ、バックとフロントを分断したのか】

① 開発効率と役割分担の向上

② パフォーマンスの最適化

③ 自己学習のため

【その他について】

①swr

②date-fns

③NoSleep.js

④eact-chartjs-2 / chartjs-plugin-datalabels 掃除場所グラフに使用。

⑤@types/gtag.js

ER 図

ER 図 URL

Image from Gyazo

画面遷移図

画面遷移図 URL

Image from Gyazo