未経験者がLaravelでポートフォリオを作成してみた

<h1>はじめに</h1>
はじめまして!かずやと申します!<br>
実務未経験者がLaravelを使用し、Webアプリケーションを作成してみたので
紹介させていただきます。<br>

<h2>1.作成PF紹介</h2>

<h4>タイトル「StudyTime」</h4>
<span style="text-decoration: line-through;">URL：https://studytime0.com</span> ← 現在公開停止しています

 <br>
GitHub：<a href="https://github.com/redeye0077/study_record">https://github.com/redeye0077/study_record</a><br>
<br>

トップページ
![トップページ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773402/d2d9d5f8-0287-ebba-59c8-efc0bac18058.png)

<h4>概要</h4>
学習を効果的に管理し、直近の学習の進捗を追跡するための便利な学習記録アプリです。
学習時間を記録することで学習の習慣化を促し、学習のモチベーションを維持することができます。<br>

<h4>開発背景</h4>
普段、学習に取り組んでいる中で、自分自身がより努力を継続したいと感じました。しかし、モチベーションが上がらずに挫折してしまうこともあります。そこで、自分の努力を「見える化」することで、モチベーションを高め、学習の継続を支援するアプリを作成することにしました。<br>
<br>
このアプリでは、学習の記録や進捗状況を可視化し、自分の努力を具体的に確認できるようにしています。
また、目標設定の機能を備え、自己成長の達成感を感じることができるようにしています。<br>

<h4>解決する課題</h4>

* 月の目標勉強時間を設定し勉強した時間と見比べることで、
目標の達成度を可視化できるようにしました。

* 勉強時間を直近7日間のグラフで表示することで、勉強の進捗や継続状況を視覚的に確認できるようにしました。

<h4>使用技術</h4>
1.フロントエンド<br>

* HTML
* CSS
* Tailwind CSS
* JavaScript

2.バックエンド
* PHP 8.1.18
* Laravel 9.46.0

3.使用ライブラリ
* Chart.js
* FullCalendar
* Laravel Breeze

4.データベース
* MySQL

5.インフラ
* さくらのVPS

<h4>実装機能</h4>
<table border="1">
    <tr>
        <th></th>
        <th>機能</th>
    </tr>
    <tr>
        <td>1</td>
        <td>アカウント登録機能</td>
    </tr>
    <tr>
        <td>2</td>
        <td>アカウント削除機能</td>
    </tr>
    <tr>
        <td>3</td>
        <td>ログイン機能</td>
    </tr>
    <tr>
        <td>4</td>
        <td>ログアウト機能</td>
    </tr>
    <tr>
        <td>5</td>
        <td>学習記録機能</td>
    </tr>
    <tr>
        <td>6</td>
        <td>学習記録表示機能</td>
    </tr>
    <tr>
        <td>7</td>
        <td>月間目標機能</td>
    </tr>
    <tr>
        <td>8</td>
        <td>ログインID変更機能</td>
    </tr>
    <tr>
        <td>9</td>
        <td>パスワード変更機能</td>
    </tr>
</table>
<br>

<h4>ER図</h4>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773402/e1d145cc-627f-9865-04a0-c04d990f0097.png>
<br>


<h4>インフラ構成図</h4>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773402/80129970-a279-1226-96ab-7f9c23386414.png>
<br>

<h4>工夫点</h4>
<h5>新規登録のメール認証</h5>

* ユーザーが正しいメールアドレスを登録していることを確認し、無効なアカウントの作成やスパム登録を防止するため、仮登録機能を導入しました。
仮登録では、ユーザーがメールアドレスを提供すると、確認のために自動的に送信されるメールを受け取ります。メールを受け取ったら、メール内のリンクをクリックすれば本登録が完了します。

<h5>UI/UX</h5>

* Tailwind CSSを活用して、サイトのデザインに一貫性を持たせ、視覚的な統一感を持たせるようにしました。

<h5>プルリクエストの活用</h5>

* チーム開発を意識して、Gitにpushする際は必ずプルリクエストを出してGitHub上でマージするように心掛けました。

<h4>苦労した点</h4>
<h5>テーブル設計</h5>

* データベース設計の基礎を理解するのに時間がかかったのと、テーブル間の関係性や属性の適切な定義に苦労しました。
技術ブログなどを見たりしながら理解しました。

<h5>VPSへのデプロイ</h5>

* デプロイ時に何度もエラーが出て苦しみましたがエラーログを見たり、調べたりして進めていきました。
またわからないことがたくさんあり、何がわからないのかがわからない状況になってしまっていたのですが1つずつ調べながら全体を理解していきました。<br>

<h4>今後追加予定の機能</h4>

* 実績機能
* カテゴリーごとに月の勉強時間を表示する機能

<h2>2.学習順序</h2>

PF作成までの学習手順については以下の通りで学習していました。

<h4>1.プログラミング学習開始（2022年2月〜）</h4>
<b>学習したもの</b>

- Progate
    - HTML&CSS
    - PHP
    - Git

まずはProgateを活用してプログラミング学習を開始しました。
Progateで学習を終えたら以下の書籍で学習をしました。

- 書籍
    - <a href="https://www.amazon.co.jp/1%E5%86%8A%E3%81%A7%E3%81%99%E3%81%B9%E3%81%A6%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FHTML-%EF%BC%86-CSS%E3%81%A8Web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7-Mana-ebook/dp/B07PS1ZJN6">1冊ですべて身につくHTML ＆ CSSとWebデザイン入門講座</a>
    - <a href=https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FJavaScript%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E7%8B%A9%E9%87%8E-%E7%A5%90%E6%9D%B1-ebook/dp/B07Y3FJ885/ref=sr_1_1?adgrpid=133879833048&hvadid=658803721815&hvdev=c&hvlocphy=1009497&hvnetw=g&hvqmt=e&hvrand=5887542267229209507&hvtargid=kwd-333694023051&hydadcr=27298_14678555&jp-ad-ap=0&keywords=%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8Fjavascript+%E8%B6%85%E5%85%A5%E9%96%80&qid=1685273780&s=books&sr=1-1>確かな力が身につくJavaScript「超」入門 第2版</a>
    - <a href=https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BPHP%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E3%80%90PHP7%E5%AF%BE%E5%BF%9C%E7%89%88%E3%80%91-%E3%81%9F%E3%81%AB%E3%81%90%E3%81%A1%E3%81%BE%E3%81%93%E3%81%A8/dp/4839964688/ref=asc_df_4839964688/?tag=jpgo-22&linkCode=df0&hvadid=295723231663&hvpos=&hvnetw=g&hvrand=14796275648108745167&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009497&hvtargid=pla-525293963744&psc=1&th=1&psc=1>よくわかるPHPの教科書 【PHP7対応版】</a>
    - <a href=https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=sr_1_1?adgrpid=53066868853&hvadid=658841666068&hvdev=c&hvlocphy=1009497&hvnetw=g&hvqmt=e&hvrand=1147433208121616627&hvtargid=kwd-391169144556&hydadcr=27294_14678600&jp-ad-ap=0&keywords=php%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF+laravel%E5%85%A5%E9%96%80&qid=1685273889&sr=8-1>PHPフレームワークLaravel入門 第2版</a>

<h4>2.Webアカデミア Laravelコース受講(2022年4月〜6月)</h4>

最初の1ヶ月でスクールの学習教材を勉強しました。<br>

その後2ヶ月間、3人共同で掲示板アプリを作成しました。
GitHubのプルリクエストの仕方やissueによるタスク管理、コンフリクトの解消方法などを学びました。<br>

<h4>3.PF作成(2022年7月〜2023年5月)</h4>

PFの作成は以下の順序で行いました。

1.開発環境構築
2.テーブル設計
3.静的画面(HTML)作成
4.ロジック部分作成
5.UI(CSS)作成
6.デプロイ
7.全体修正