ReactアプリをGitHub Pagesにデプロイする方法

# はじめに
今回ReactでTODOリストを作成しました。こちらをGitHub Pagesを用いて公開できるようにしました
備忘録を兼ねて公開方法をまとめますので、ぜひ参考にしていただきたいです。


# 手順
簡単にまとめてみるとこんな感じになります。
1. Reactアプリを作成する
1. GitHubに新しいリポジトリを作成する
1. 作成したリポジトリにReactアプリを連携させる
1. 必要なパッケージのインストールをする
1. デプロイスクリプトの追加をする
1. Reactアプリをビルドする
1. GitHubにコミット＆プッシュする
1. GitHub Pagesの公開設定をする
1. GitHub Pagesにて作成されたURLで表示する


# 1.Reactアプリを作成する
今回はVScodeを使用してReactアプリを作成しました。
まず、Reactを使用するためには、`Node.js`と`npm`が必要になります。
```
$ node -v
$ npm -v
```
上記をターミナルで実行するとインストールされているか確認することができます。
インストールされていない場合はインストールしてください。

次に、プロジェクトを作成します。
```
$ npx create-react-app react_todo_list
```
コマンドを実行します。
`react_todo_list`の部分はアプリ名になるので、自分で好きなアプリ名に変更して実行してください。

実行して`Happy hacking!`が表示されれば、プロジェクトの作成ができました。

```
$ npm start
```
上記を実行して[localhost:3000](http://localhost:3000/)にアクセスして画像のように表示されていればOKです。

![8.reactの初期画面-1024x532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/28169bbb-4cd0-8246-3f27-3f2fd666e2ed.png)

# 2.GitHubに新しいリポジトリを作成する
GitHubにて新しいリポジトリを作成します。

Topページ右上の`+`ボタンから、`New Repository`を選択します。
![1A6C8AD1-A240-4F34-A2AB-EDCC6C07DCF6_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/1a81448b-c062-2278-c735-50a8467513e9.jpeg)

② リポジトリ名を入力して、Publicでリポジトリを作成します。  
※ 無料アカウントだとPublicアカウントしか公開できません。  
リポジトリ名は基本的になんでも大丈夫ですが、ここで設定したリポジトリ名によってこの後に公開するWebページのURLが変わります。  
**「アカウント名.github.io」とした場合**
公開URLは、`https://アカウント名.github.io`となります。
**「それ以外の場合」**
公開URLは、`https://アカウント名.github.io/リポジトリ名`となります。


リポジトリ名を入力して、Publicを選択してCreate repositoryを押して新しいリポジトリを作成する。

![AC9934A4-B399-4A62-A253-AE3C8A765110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/e15e71de-1bd0-7cbe-c78b-fcc275a005e4.png)
![8B15E2F4-3E23-4289-80C0-75C88AB3EF33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/7ffbafdc-d5bb-aaab-589b-90bea26dd7e1.png)


作成できたら次のような画面に切り替わります。
このような画面になればOKです。
![9F5F4782-232C-4783-A978-853BE9B1D816.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/e8ba8c5a-1220-165c-7a7b-3e1bf5660241.png)


# 3.作成したリポジトリとReactアプリを連携する

今回はVScodeで作成したReactのコードを使っていきます。

ターミナルで作成したReactアプリのディレクトリに移動します。
```
$ cd [アプリ名]
```

### ローカルリポジトリからプッシュしてファイルを追加する
ターミナルで
```
$ git init

$ git add .

$ git commit -m "コメント"

$ git remote add origin [リポジトリ名]

$ git branch -M main

$ git push -u origin main
```
とコマンド操作してリモートリポジトリにローカルリポジトリのファイルをプッシュします。

# 4.必要なパッケージのインストールをする
デプロイ用のnpmパッケージをインストールします。
```
$ npm install gh-pages
```

# 5.デプロイスクリプトの追加をする
package.jsonの"scripts"に以下のスクリプトを追加する。
```
"predeploy": "npm run build",
"deploy": "gh-pages -d build"
```

# 4.Reactアプリをビルドする
package.jsonに以下の内容を記述していきます。

`<Githubアカウント名>`にはご自身のGithubアカウント名を、`<リポジトリ名>`には作成したリポジトリの名前を入れます。

```package.json
　...省略
{
+ "homepage": "https://<Githubアカウント名>.github.io/<リポジトリ名>/",

// 省略

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "predeploy": "npm run build",
    "deploy": "gh-pages -d build"
  },
}
```
追記が完了したら
```
$ npm run deploy
```
を実行する。

# 5.コミット＆プッシュをする
以下のコマンドを実行し、コミット＆プッシュを実行する。
```
$ cd app/<プロジェクト名>
$ git add .
$ git commit -m "build"
$ git push -u origin main
```

# 6.GitHub Pagesの公開設定をする
Settingタブを選択します。
![スクリーンショット 2024-10-07 1.21.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/8b1f4c50-b77e-b557-e698-55af9f5d5558.png)

次に左サイドバーにあるCode and automationの `Pages` を選択します。
![スクリーンショット 2024-10-07 1.21.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/9e47309e-84d3-c723-555e-bc7650040774.png)

Branchをgh-pagesを選択してSaveする
![スクリーンショット 2024-10-07 1.22.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/eee28f61-374c-3a43-ca2a-d158ed2b8682.png)

数分程度待つとデプロイされ、公開したWebページのURLが表示されます。
URLにアクセスすると、作成したReactアプリを確認することができるようになります。
![8.reactの初期画面-1024x532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335067/5206934b-a3a8-53d9-2905-8ae536ec26a0.png)

# 最後に
以上でGitHub Pagesを用いたReactアプリの公開手順になります。
GitHub Pagesは無料で簡単に公開することができるので是非実装したアプリを公開してみてください。