From 102e1698c369cb4766761bf2ea355a456345629e Mon Sep 17 00:00:00 2001
From: Ryohei Kamei <231205751@ccmailg.meijo-u.ac.jp>
Date: Tue, 8 Oct 2024 12:24:48 +0900
Subject: [PATCH] =?UTF-8?q?README=E3=82=92=E3=82=A2=E3=83=83=E3=83=97?=
=?UTF-8?q?=E3=83=87=E3=83=BC=E3=83=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 95 ++++++++++++++++++++++++++++++++++++++++---------------
1 file changed, 70 insertions(+), 25 deletions(-)
diff --git a/README.md b/README.md
index d9b3877..441a643 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,58 @@
-# 【ポートフォリオ】
大学生の履修登録を簡易化するアプリ「ClassPlannner」
+# 【成果物】
大学生の履修登録を簡易化するアプリ「ClassPlanner」
-
+
## サービス名
-履修プランを共有して履修に関する悩みをなくす学生生活を送ろう!
+「**ClassPlanner**」
+
+## サービスコンセプト
+
+履修プランを共有して、履修に関する悩みを解消し、充実した学生生活を送ろう!
## 開発のきっかけ
-私は現在、大学 3 年生です。所属する学部の卒業要件が非常に複雑なため、卒業までに何を履修すべきか把握するのが難しい状況にあります。具体的には、学部内に 2 つのコースが設けられており、卒業までに 4 つのプログラムを達成する必要があります。2 つのコースでは必修授業が異なり、4 つのプログラムごとに必修科目や選択必修科目(決められた授業から一定数の単位を取得)が異なるためです。
-加えて、X の投稿を見ていると、「先輩の過去の履修プランを知りたい」「履修登録期間が短く困っている」などの悩みを目にしました。
-そのような問題を解決するには、履修プランを共有できる場所があればいいと考えました。また、ちょうど春休みの成果として何かアウトプットを残したいと考え、履修計画共有するためのの Web アプリ「ClassPlanner」の開発を始めました。
+私は現在大学 3 年生です。所属する学部の卒業要件が非常に複雑で、卒業までに何を履修すべきか把握するのが難しい状況にあります。具体的には、学部内に 2 つのコースがあり、卒業までに 4 つのプログラムを達成する必要があります。それぞれのコースでは必修授業が異なり、プログラムごとに必修科目や選択必修科目(決められた授業から一定数の単位を取得)が異なるためです。
+さらに、X の投稿を見ていると、「先輩の過去の履修プランを知りたい」「履修登録期間が短く困っている」などの悩みを目にしました。
+このような問題を解決するためには、履修プランを共有できる場所が必要だと考えました。春休みの成果として何かを残したいと考え、履修計画を共有するための Web アプリ「ClassPlanner」の開発を始めました。
## 「ClassPlanner」の概要
-その履修プランを組んで自分はどのように感じたのか、どんな目的でそのプランにしたのかを書いて投稿することができ、その情報を元に後輩などが履修プランを組む時の参考にすることができます。
-大学生の履修に関する情報は全てここで得られる!そんなプラットホームを目指しています!
+履修プランを投稿し、どのように感じたのか、どんな目的でそのプランにしたのかを記録することができます。これにより、後輩が履修プランを組む際の参考にすることができます。
+大学生の履修に関する情報はすべてここで得られる!そんなプラットフォームを目指しています!
-### URL: https://class-planner-mu.vercel.app/
+### サービス URL: https://class-planner-mu.vercel.app/
### 技術記事(Zenn):https://zenn.dev/ryohei08/articles/629de87a464298
## 制作期間
-約 1 か月と2週間
+約 1 か月と 2 週間(継続開発中で、最初に完成した時点での期間)
## 仕様スタック
-- Frontend Language/FrameWork
- - React, Next.js, TypeScript
-- UI Liblary
- - Shadcn/ui,TailwindCSS
-- Backend/DB
- - Nextjs(API Routes),Supabase,Prisma
-- CD
+- 使用言語
+ - TypeScript
+- フレームワーク
+ - Next.js
+- UI ライブラリ
+ - Shadcn/ui, TailwindCSS
+- バックエンド/DB
+ - Next.js (API Routes), Supabase(PostgreSQL)
+- CI / CD
+ - Github Actions
- Vercel
-- Source Code Management
+- ソースコード管理
- Git/GitHub
-- Others
- - React-Hook-Form,Zod(バリデーションチェック)
- - react-hot-toast(トースト)
- - React icons(アイコン)
+- その他
+ - React-Hook-Form, Zod(フォーム,バリデーション)
+ - Prisma(ORM)
+ - react-hot-toast(トースト)
+ - React Icons(アイコン)
## 主な機能
@@ -52,12 +60,49 @@
- 新規ユーザー登録機能
- ログイン機能(メール&パスワード)
-- マイページの取得,ユーザー情報更新機能(ユーザー名,大学,学部,学科,学年)
+- マイページの取得とユーザー情報更新機能(ユーザー名、大学、学部、学科、学年)
### 履修プラン投稿関連
-- 履修プラン情報の一覧取得,詳細取得,投稿,更新,削除機能(投稿,更新,削除はログインユーザーのみ可能)
+- 履修プラン情報の一覧取得、詳細取得、投稿、更新、削除機能(投稿、更新、削除はログインユーザーのみ可能)
### 口コミ投稿関連
-- 口コミの投稿,一覧取得,詳細取得,削除機能(投稿機能はログインユーザーのみ可能,削除機能は作成したユーザーのみ可能)
+- 口コミの投稿、一覧取得、詳細取得、削除機能(投稿機能はログインユーザーのみ可能、削除機能は作成したユーザーのみ可能)
+
+## 追記(2024 年 10 月 8 日)
+
+本プロダクトは最初に完成した後も継続的に開発を続けており、追加で実装した機能を以下に示します。
+
+- CI (GitHub Actions)
+
+ - Lint とテストを自動実行できる環境を構築しました。
+ - 実装の理由として、今後の継続開発において保守性を高めるためです。
+
+- Jest を用いたテストコード
+
+ - 上記の GitHub Actions で自動テストを実行するために作成しました。
+ - 現在の時点ですべてのコンポーネントに対してテストが行えておらず、継続的に実施しています。
+
+- ESLint でのルール設定
+
+ - Next.js の初期セットアップ時点で ESLint を導入していましたが、ルールを定めていなかったため、設定を行いました。
+ - 特に`jsx-a11y`というライブラリをインストールし、コード中のアクセシビリティに問題のある箇所を修正しました。
+
+- React コンポーネントごとの責務の統一化とリファクタリング
+
+ - `page.tsx`で`"use client"`を使用している箇所があり、Next.js のアンチパターンに該当する書き方をしてしまったため、随時修正中です。
+ - データをフェッチする処理と見た目を構成する部分が一つのコンポーネントに混在しており、可読性が悪く、テストをしづらいという懸念点があったため、改善を続けています。
+
+- セキュリティ面の改善
+
+ - プロダクトを初めて完成させた当時、特定のユーザーのみがアクセスできるページに、URL を変更することでアクセスできる脆弱性が見つかりました。
+ - ``コンポーネントを作成し、特定の処理を追加することで一部改善しました。
+ - また、CORS について、現状の API は Postman などからのリクエストを受け付けてしまう設定になっており、これにより意図しないアクセスが可能となっています。現在、CORS の適切な設定方法を模索中です。
+
+- バックエンド処理を Go によるリファクタリング
+ - 現在の API は Next.js の API Routes を使用しており、認証と DB に Supabase を利用しています。
+ - 選択した理由として、当時利用可能な技術スタックでプロダクトを作りたかったためです。
+ - 新しく Go を学び始めたことをきっかけに、「ClassPlanner」のバックエンドをリプレイスすることを最終目標として学習しています。
+ - 現在リポジトリを分けて実装中ですが、フロントエンドの改修も進めており、時間をかけて進めています。
+ - リポジトリ URL:https://github.com/kameiryohei/class-planner-BE