大学2年 / ソフトウェアエンジニア志望
本アプリは、映画のレビューおよびウォッチリストをクラウド上で作成・管理できるWebアプリケーションです。
ユーザーが、他者の評価に影響されることなく、自身の直観的な感想を蓄積できるようにすることを目的としています。
| メールアドレス | パスワード |
|---|---|
| test1@test.com | testtest |
| test2@test.com | testtest |
| test3@test.com | testtest |
主要ライブラリ
本アプリの主要な機能であるレビューとウォッチリストについて、 それぞれでユーザーの利用目的が異なることを考慮して、画面設計を分離しました。
レビュー画面は「鑑賞後にゆっくり振り返ること」「レビューをじっくり読み返すこと」を目的としているため、 一覧・詳細・作成ページを分離し、映画の詳細情報と合わせて閲覧できる構成にすることで、 リッチなUXを意識した設計としました。
一方、ウォッチリストはその場で素早く追加・確認する用途が中心であるため、 一覧ページのみのシンプルな構造、画面遷移を伴わない編集ダイアログで構成することで、 利便性を意識したシンプルな設計としました。
これにより、「思考の深さ」と「操作の速さ」という異なるUX要件をそれぞれ叶える画面設計を実現しました。
当初、映画の詳細情報は外部APIから取得したものを全てデータベースにキャッシュし、永続化していました。 しかし、全てのデータの永続キャッシュ化はデータベースの容量を圧迫するだけでなく、 外部APIを利用するメリット自体が失われると気づいたため、構成を変更しました。
高頻度で利用される基本情報(映画のタイトルなど)は永続化し、 利用頻度が低い詳細情報は7日間の期限を設けることで、 アクセスの高速化とデータベースの最適化の両方を実現しました。
また、期限を過ぎた情報の削除処理については、 デプロイ先がRender無料プランであることから使用していない間はサーバーがスリープ状態となるため、 削除処理の定期実行ができないという制約がありました。
そのため、ログイン処理が行われる際に一定確率で削除処理が実行されるように設計し、 本サービスの利用頻度を考慮した確率を設定しました。
本アプリの開発においては、データベース設計やAPI設計をドキュメント化して管理し、 開発を体系的に進めることを最も意識しました。 設計を初期段階からドキュメントとして整理し、仕様変更時にも更新することで、 開発を効率的に進めました。
特にフロントエンド実装の際に、API設計を参照しながら取り組むことで開発がスムーズに進み、 ドキュメントの重要性を実感しました。
Spring Securityを用いて認証機能を実装しました。 当初はセッションベースの認証方式を採用し、Cookieを用いた状態管理を行っていましたが、 CORS設定やCookieの扱いに課題がありました。
特にブラウザのシークレットモード等の環境においてCookieが期待通りに送信されない状況が続いたため、 JWTベースの認証方式へ移行し、API通信をCookieに依存しない形に変更しました。
この経験を通して、バックエンドでの実装だけでなく、 HTTP通信・Cookie・ブラウザごとの制約を含めた認証処理の理解を深めることができました。
RenderやVercelを用いたクラウド環境へのデプロイを初めて行いました。 ローカル環境では問題なく動作していた機能が、 本番環境ではCookie設定などの違いにより動作しないケースを経験し、 デプロイにおいては環境毎の違いを把握する必要があると学びました。
また、データベースのホスティングでは、当初はSupabaseを使用する予定でしたが、 Renderとの接続要件の問題により構成を変更しました。 この経験から、技術選定においては機能だけでなく、 インフラやサービス間の制約も考慮する必要があると学びました。
Reactによるフロントエンド開発に初めて本格的に取り組みました。
フロントエンドはバックエンドに比べて実装の自由度が高い分、 コードの構造や責務の分割を適切に設計する難しさを感じました。
また、画面仕様の実現に伴いAPIの追加や変更が必要になる場面が多く、 設計段階で全てを予測して網羅することの難しさを実感しました。
今後はリファクタリングやツールの導入を通して、 より保守性の高いフロントエンド開発を行いたいと考えています。
認証機能
レビュー機能
映画情報機能
シェア機能
課金機能
認証・セキュリティ
インフラ・データ管理
バックエンド設計
フロントエンド・UX