# プロジェクト概要
学校管理画面のリプレイス
バックエンドもフロントエンドもRailsで書かれている、かつ、コードの見通しが悪くメンテナンスがしにくい状態だったため。
### チーム情報
・プロジェクトマネージャー:1名
・フロントエンド: 3名(フリーランス)
・バックエンド:3名
### 担当業務
・GraphQLでのAPI開発(query、mutation)
・画面作成
・フロントエンドの進捗管理
・コードレビュー
### 習得スキル
・GraphQL(graphql-ruby , Hasura)
・Ruby on Rails
・Vue3(Nuxt3)
・Apollo CLient
・キャッシュ管理
### 作業内容
・コードから仕様を読み解き、仕様の整理をしながらAPI作成
・N+1が起きないようにLoaderを使用してパフォーマンスを意識したAPIの作成
・graphql-rubyのドキュメントを読み、土台を一から作成。
・Apollo Clientのキャッシュの管理
・フリーランス3名の進捗管理とPRのコードレビューを担当。
Notionで作業を細かくチケット化し、一週間を1スプリントとして、チケットを振り分けて進捗管理を行った。
・JsonCsvを使ったCSV出力処理。
・Rails側で実装されている既存機能を使える部分は使って工数削減を行った。(納期が近かったため)
PDF出力などはフロント側で生成するのではなく、Rails側で既にPDF出力用のtemplateがあったので、Rails側でPDF化したデータをフロント側に渡してダウンロードする流れにした。
フロント側でPDF生成することも考えたが、PDFの改ページ時にCSSが効かない問題が発生したため。
### コメント
プロジェクト立ち上げ当初は、「学校」、「学生」、「事務局」、「企業」の4画面全てをフルリニューアルとしてリリースする予定で、Hasuraを使用してAPI開発を約半年程していたが、予算、納期の関係で断念し、「学校」画面だけをリリースすることになりgraphql-rubyに転換した。(Hasuraを使用するにはDBをMySQLからPostgreSQLに変更する必要があり、分割リリースが出来ないため。)
Prizmaを採用しようかという話もあったが、稼働中のDBがリレーションが貼られていなかったり、アンチパターンが多発していたため(フルリニューアルではDB設計から直す予定だった)、Prizmaを使用できるような状態ではなかったため断念。
上記の一件で担当していたマネージャーがこのプロジェクトから外れ、新たなマネージャーが担当することになったが、フロントの方まで手が回っていなかったので、バックエンドAPIを作りながらフロントのフォローをしていたところ、フロントの進捗管理を担当することになった。
### 反省点
初めて作業振り分けや、進捗管理を担当。
序盤は大雑把に作業を振り分けしていたが、フリーランスの方はドメイン知識が浅いこともあり認識が合っていない場合が多く、作り直しが多々発生してしまった。仕様をしっかり説明し、認識のすり合わせが必須であることを痛感した。