2回目のチーム開発に挑戦しました。

<h1>はじめに</h1>
今回のWebアプリケーションは「ワクワクするものを作ろう」というコンセプトで作成しました。ワクワクするものって何だろうというところを考えるところからこの開発はスタートし、なんとか形にできたので共有したいと思い、この記事を書いています。作成したWebアプリケーションは、<strong>「みんなで作る全国聖地巡礼マップAnimecca」</strong>です。正直未熟な部分もあるかと思いますが、温かい目で見て頂ければ幸いです。

<h1>開発背景</h1>
<strong>なぜこのアプリを作ったのか。どんな課題を解決したのか</strong>について記載します。


チームメンバーでワクワクするものについて話し合うところからスタートしました。まず、自分がワクワクすることについて、それぞれ書き出し共有しました。例えば、「旅行に行くとき」・「アニメを見ること」・「コンビニの新しいスイーツ」等さまざまな意見が出ました。ふと、アニメ好きのチームメンバーの1人が旅行の話になったとき、アニメの聖地巡礼マップが使いにくいという話を聞きました。そこで実際に既存の聖地巡礼マップを見ていくと、聖地情報がきれいにまとめられているサイトだけども共有機能がなかったり、聖地情報を共有して投稿できるサイトだけどサービスが終了していたり、そもそも聖地の情報が少なく実際にアニメのどのシーンなのかといったことが分からないといった課題を発見しました。であれば、<strong>それぞれのサイトのよい部分を集めて作れば、アニメ好きのユーザーが聖地巡礼旅行を計画しやすくなるし、同じような趣味の人たち同士で聖地を共有できるというワクワクする体験を提供できるのではないか</strong>と考え、開発をスタートしました。

<h1>使用技術</h1>
<strong>・フロントエンド</strong>: React/Next.js/TailwindCSS<br>
<strong>・バックエンド</strong>: Ruby on Rails<br>
<strong>・DB</strong>:SQLite<br>
<strong>・開発環境</strong>: Docker/Docker Compose<br>
<strong>・外部API</strong>: AnictAPI/GoogleMapsAPI<br>
<strong>・ソース管理</strong>: Git/Github

<h1>完成したアプリと機能一覧</h1>
<strong>TOPページとハンバーガーメニュー</strong><br>
ここでは聖地を日本地図から探したり、作品から探したりできます。（北海道がハンバーガーメニューで隠れています…）

![screencapture-localhost-3000-2024-02-07-17_29_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/33d6368c-71d9-5e01-963a-a49d928015f3.png)

<strong>聖地登録ページ</strong><br>
ここでは聖地の登録ができます。作品名、話数、どのシーンなのか、聖地名、場所、概要、画像を登録できます。作品名はAnictのAPIから作品Titleを取ってきているので、検索の文字に応じて予測変換が出てきます。

![スクリーンショット 2024-02-07 173331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/0fe87737-02a5-d6d1-9aa7-a9614c94cff9.png)

GoogleMapsAPIを使っているため、場所はグーグルマップにピンを刺して入力することができます。

![スクリーンショット 2024-02-07 173429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/7db22661-3f62-ce9f-710b-cb8032ac289e.png)

<strong>聖地一覧ページ</strong><br>
ここは東京の聖地一覧です。自分や他のユーザーが登録した情報を見ることができます。右側をクリックすると、ページ詳細に遷移できます。

![スクリーンショット 2024-02-07 172330.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/33538d8c-0912-3fde-e9d4-1a9159fbf6a8.png)

<strong>聖地詳細ページ</strong><br>
聖地詳細ページです。聖地の登録で登録した内容を見ることができます。ハートマークをクリックすると、マイリストに登録できます。

![スクリーンショット 2024-02-07 174902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/3f1dd63f-332d-887c-4b98-b054d4009066.png)

<strong>マイリストページ</strong><br>
ここは他のユーザーの投稿した聖地情報をまとめておくことができます。

![スクリーンショット 2024-02-07 175345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/eb756f43-41b7-c046-179f-5104d40288fe.png)

<strong>ログイン・会員登録ページ</strong><br>
ログインページと会員登録ができます。JWT認証を使っています。また、パスワードは6文字以上で名前の被りがないようにバリデーションを設けています。

![スクリーンショット 2024-02-07 175512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/88405a29-f262-5fd1-f6f4-64745c93842b.png)

![スクリーンショット 2024-02-07 175612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/3641f973-4629-89ed-e904-651a2abc7fb5.png)

<h1>私がやったこと</h1>
・要件定義<br>
・画面遷移図作成<br>
・ER図作成とDB設計<br>
・ワイヤーフレームの作成<br>
・TOPページの実装<br>
・ハンバーガーメニューの実装<br>
・ログインと会員登録ページのひな型の実装<br>
・ロゴの作成<br>
・発表スライド・原稿作成<br>
・発表

<h1>要件定義</h1>
ここではどんなことがアプリではできるのかを決めました。<br>

・登録する項目は作品名、何話、何分・何秒のシーン、場所、実写の画像、概要（感想、場所の詳細情報など）<br>

・地図と作品名から検索できる<br>

・ユーザーが行った聖地を登録できる（公開する）<br>

・ユーザー登録<br>

・ユーザーが行きたい聖地リストを登録できる（マイページのみ）


<h1>画面遷移図</h1>
簡易的な画面遷移図です。当初はどの画面からでもハンバーガーメニューで遷移できるようにしようと考えていました。ただTOP画面から詳細画面にはいく必要ないことに気づき、最終的に各都道府県の聖地一覧ページとマイリストから遷移するようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/358b9ca9-b366-9f48-0939-5db62fd5cfec.png)

<h1>ER図とDB設計</h1>
Webアプリケーションを運用するにあたってどのような情報が必要か洗い出してその関係性を明確にしました。

DB設計
![スクリーンショット 2024-02-07 181403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/02781c92-58ef-5b33-892a-e956cdbcac4d.png)

ER図
![スクリーンショット 2024-02-07 183552.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/5c0ec7c7-6954-472f-c646-c0c5303f1422.png)

<h1>環境構築</h1>
チームメンバーの中に、以前Dockerを使っての開発経験がある方がいらっしゃったので、その方にイメージファイルを作ってもらい、メンバーの環境を整えました。正直私はDockerに関するキャッチアップをしていなかったので、その方が作ってくださったドキュメントをみて、ローカル環境を構築しました。（ありがたい…）オリジナルのプロダクトを作るときは、キャッチアップして取り入れてみたいです。

<h1>実装してみて思ったこと</h1>

<strong>Topページ</strong>

TOPページの日本地図から探すところの実装が自分にとって複雑なデザインだったので、どうやって実装するか悩みました。デザインしていた時はそんなに苦労しないだろうと安易に考えていましたが、実際に実装してみるとそんなことは全くなかったです。よくエンジニアとデザイナーの仲が悪くなりやすいみたいな話を聞きますが、まさか過去の自分との仲が悪くなるとは思いませんでした。

どうやって解決したかというと、似たようなデザインのサイトを探してきて、そのサイトをディベロッパーツールで検証しました。その結果、Position:absoluteにTopとLeftの位置を細かく調整して作られていることに気づき、その方法を参考にして、無事それっぽいものを作ることができました。

もっと良くするなら、ホバーしたときに文字の色を変える等、ユーザーにとって分かりやすくなるようにするとよかったなと思いました。

<strong>ハンバーガーメニュー</strong>

最初はヘッダーに機能を設置しようと思っていましたが、ハンバーガーメニューの方がすっきりしていいと思うという意見から実装することになりました。実装期間が1週間という縛りがあったため、Qiitaの記事を参考にハンバーガーメニューの実装を行いました。ハンバーガーメニューを開くと、他のコンテンツが見にくくなるという問題があったため、CSSを調整し小さくコンパクトに収まるよう改善しました。

<strong>ロゴの作成</strong>

Figmaというアプリを使って作成しました。デザインはAIにそれっぽい画像を作ってもらい、それをトレースする形で作成しました。
![Group 47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578340/8f10a01d-175b-ec2d-47c3-35fd9cb2bb18.png)

<strong>発表</strong>

本来別の方が発表する予定でしたが、発表前日にその方のローカル環境がその方特有のエラーでアプリが動作しないという問題が起きました。当日までにその問題が解決しなかったため、急遽私が発表することになりました。メンバーさんにもスライドの添削を手伝っていただき、発表数分前まで練習するというギリギリの状態になってしまいました。ワンスライドワンメッセージを意識して、伝わりやすい構成を意識して作りました。どうなるかと思いましたが、結果的に他のメンバーやメンターさんからも良かったと言ってもらえて安心しました。

<h1>作品自体の評価について</h1>

結果的に聖地巡礼というテーマとワクワクするものを作るというコンセプトが一致していたため、全体で2番目という評価をいただくことができました。他のチームの皆さんが作られた作品も全部素晴らしくて、中にはそのままサービスとして出せるぐらいクオリティの高い作品もありました。

<h1>チームの良かった部分と課題</h1>

<strong>良かったところ</strong>
・プロダクトのテーマが良かった。
・ルール決めを最初のしていたのが良かった。
・作るものを早く決められたのが良かった。
・バックエンドとフロントのコミュニケーションがよく取れていた。
・進捗報告ができた。
・Docker導入できた。
・画面共有で分からないところをみんなで解決する努力をした。

<strong>改善するところ</strong>
・最後の方はもっとチーム会を開催した方が良かった。
・連携が最後の最後になった。
・最初の方はだれがいつなにをしているのか把握してなかった。
・Docker環境が原因でエラーが多発した。
・発表者の問題が発覚した時点で、エラーが解決できないことを考慮して誰が代わりにやるか決めておくべきだった。

<strong>TRYすること</strong>
・最初にAPIなどバックとフロントがつながる部分をいつ作るのか最初に決めた方が良かった。
・環境構築の事前通告をもっとするべき。
・技術について人任せにせず、自分たちも調べる。
・困っていることをしっかり伝える。
・新規性を掘りさげる
・競合調査をもっとする。


<h1>個人の良かった部分と課題</h1>

<strong>良かったところ</strong>
・プレゼンをうまくできた。
・複雑なデザインを実装できた。
・ハンバーガーメニューが実装できた。
・チームの意見がまとまらず膠着状態のときに、何か発言して前に進めることができた。
・レスポンスを早く返すことを意識して実行した。

<strong>改善点</strong>
・もっとロジカルな実装の部分をできたらよかった。
・JavaScriptの理解が低い。
・考えがまとまってないのに、とりあえず発言してみることが多かったので、説明し直すことが何度かあった。

<strong>TRYすること</strong>
・JavaScriptの勉強を頑張る。
・もっと自分からこのタスクをやりますぐらいの主体性をもつ。
・論理的思考を意識する。

<h1>最後に</h1>
ここまで読んでくださりありがとうございました。<br>

前回のチーム開発よりもモダンな技術を使って開発することができたことや、他のメンバーさんの技術力の高さを肌で感じられたことは自分にとって良い経験になったと思います。それと同時に、自身の技術力の低さ等の問題点も浮き彫りになり、それをひしひしと感じています。次はオリジナルプロダクトの作成に入るので、技術力の低さはそこで苦しみながら身に着けていきたいと思います。