Git初心者がGitHub PagesによるWebページ公開方法をまとめてみた

# このページで伝えたいことまとめ
* htmlのファイル名は`index.html`でなくてもGitHub Pagesは公開できるよ！
    * ※ファイル名を`index.html`にするとトップページに表示されて便利だよ！
* 日本語を含んだブランチ名のブランチから公開しようとすると、GitHub Pagesは公開できないよ！

# GitHub Pagesの使用方法について
* GitHub Pagesを使うことで、自分が作成したWebページを外部に公開することができます。GitHub Pagesを使うと、GitHubに上げているソースを元にWebページが作成可能なのでとても便利です。
* Gitのコマンドの中でadd, commit, pull, pushくらいを使えるようになってきたGit初心者の筆者が、GitHubPagesを使ってWebサイトを公開してみたので公開方法をまとめます。
* 公開方法については少し端折って書いております。「このページで伝えたいことまとめ」の内容が気になる方は[注意点](#注意点)を参照ください。

* ※GitHubアカウントは既に所有している前提で記載いたします。

### 1.GitHubのサイト上でリモートリポジトリを作成する
* トップページの右上の「＋」アイコンを押し、「New Repository」を選択します。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/f2f5c11d-5e4c-5ba4-58c9-d581e39922e7.png">

* リポジトリ名を入力し、Publicとしてリポジトリを作成します。
    * リポジトリ名を「アカウント名.github.io」とすると公開した際のWebページが変わるようです。
    * マストではないので、リポジトリ名は任意の名前で問題ありません。
![77213540-E75D-4009-87BA-D4DC1DC42D3D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/27db2a7d-6ba8-e83a-1c76-d9d50d7a188c.png)


### 2.リポジトリ内に公開したいhtmlファイルを作成する
* 「creating a new file」をクリックします。
![D9B7319B-D728-4BF1-B347-F3477861AE5F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/f0651bb6-9553-37b6-28c7-35fee5d37932.png)

* ファイル名と内容を入力し、「Commit changes」を押すことでcommitができます。表示対象のhtmlファイルを作成しましょう。
    * ローカルで作成してpushしたファイルを公開することももちろん可能です。
    * htmlのファイル名は`index.html`でなくてもGitHub Pages上に公開可能です。
        * ※詳しくは[注意点1 htmlファイルの置き場所とファイル名について](#注意点1-htmlファイルの置き場所とファイル名について)参照
![スクリーンショット 2023-07-15 10.46.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/c1d0b679-a257-039e-1e02-a8506da91df2.png)


### 3.ページを公開する
* ⚙️マークの「Settings」→「Pages」と順に押すことで、GitHub Pagesの設定画面に映ります。
* 公開するBranchを指定して「Save」を押すことで、URLをGitHubが自動生成してくれます。
    * Branchを指定する際に日本語名を含んだBranchを指定すると公開できませんでした。
        * ※詳しくは[注意点2 ブランチ名に注意！](#注意点2-ブランチ名に注意)参照
![スクリーンショット_2023-07-15_10_54_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/3ae72595-159c-a83d-a5a1-bff78d4746d2.png)

* 公開が完了すると、`https://user.github.io/testRepository/`のようなURLが画面上に表示されます。表示されたURLから、自分が作成したWebページを確認できます。



* 上記のように簡単に公開できるのですが、mainブランチ以外で公開したり、`index.html`以外のファイル名で公開しようとすると詰まったポイントがあったので、以下に注意点を記載いたします。

# 注意点
## 注意点1 htmlファイルの置き場所とファイル名について
* `index.html`のファイル名以外でも公開可能です。私が参考にしたサイトでは、htmlのファイル名は`index.html`であることがマストであるような形で記載されていました。しかし、GitHub Pagesの仕組みに変更があったのか`hoge.html`のように`index.html`以外のファイル名でも問題なく公開できました。
    * GitHub Pagesが自動で生成してくれるURLのトップページとして表示したいものを`index.html`にする必要がある、というのが正かもしれません。

* 補足的な内容になりますが、以下の構成の場合に各htmlがどのURLで出力できるか調べてみました。
### フォルダの構成
![GitHubPagesFilePosition.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/b4fd44f2-e005-9409-fa4c-232562e4535a.png)
```
index.html→root直下
hoge.html→root直下
foo.html→root直下
fuga.html→root直下のtestFolderディレクトリの配下
```

* 以下条件でGitHubPagesを公開しました。
    * 自分のユーザ名はuser
    * 上記のフォルダ構成をtestRepositoryリポジトリで公開
    * Branchやフォルダの設定は以下画像のように設定
![BuildAndDeploymentSetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/f3a28045-999b-ae19-d1d7-c74e1900d384.png)

* この際、以下のようなURLが自動で生成されました。
    * `https://user.github.io/testRepository/`

* 各ファイルは以下のURLで接続可能でした。
    * index.html
        * `https://user.github.io/testRepository/`
            * ※`index.html`だけ**明示的にURLに指定しなくてもトップページとして表示可能です**
        * `https://user.github.io/testRepository/index.html`
    * hoge.html
        * `https://user.github.io/testRepository/hoge.html`
    * foo.html
        * `https://user.github.io/testRepository/foo.html`
    * fuga.html
        * `https://user.github.io/testRepository/testFolder/fuga.html`

* 上記をまとめると、自動生成された`https://user.github.io/testRepository/`をrootとみなしたパスを指定することで各ディレクトリのhtmlの表示が可能です。


## 注意点2 ブランチ名に注意！
* 公開する際のブランチはmainブランチである必要はありません。しかし、以下のようにブランチ名に日本語が混在しているブランチを公開対象にするとGitHub Pagesの公開がうまくいきませんでした。

### 日本語名ブランチを指定した設定例
* `main`ではなく、`日本語名ブランチ`という名前のブランチで公開してみます。
![B4AF52D5-C0C6-4BC7-B608-95E1E1EAB6F9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/be82f615-c469-5fe6-6e1c-78d5a27f2ce5.png)

### 発生するエラー
* 以下は「日本語ブランチ名」というブランチから公開した際のエラーです。deployの際にエラーが発生します。
* ここまで極端なブランチ名にせずとも「001_hoge/005_アウトプット」のようなブランチ名でも同様にエラーになります。
![GitHubPagesErrorSummary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/712c515d-b7d6-3796-fdeb-599a6a8acb70.png)

![GitHubPagesErrorMessage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/8ac30bcf-6ddd-3222-1be8-349a7da82a7e.png)


```:ブランチ名に日本語を入れてしまった際のエラー

Error: Creating Pages deployment failed
Error: HttpError: invalid json response body at https://api.github.com/repos/user/repository/pages/deployments reason: Unexpected end of JSON input
    at /home/runner/work/_actions/actions/deploy-pages/v2/webpack:/deploy-pages/node_modules/@octokit/request/dist-node/index.js:108:1
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at createPagesDeployment (/home/runner/work/_actions/actions/deploy-pages/v2/webpack:/deploy-pages/src/internal/api-client.js:126:1)
    at Deployment.create (/home/runner/work/_actions/actions/deploy-pages/v2/webpack:/deploy-pages/src/internal/deployment.js:80:1)
    at main (/home/runner/work/_actions/actions/deploy-pages/v2/webpack:/deploy-pages/src/index.js:30:1)
Error: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'TLSSocket'
    |     property '_httpMessage' -> object with constructor 'ClientRequest'
    --- property 'socket' closes the circle
```

* エラー内容にブランチ名に関する記述は特にありませんが、日本語を含んだブランチでは上記エラーが必ず発生するので、ブランチ名が原因であることは間違いなさそうです。

### 余談
* 私は日本語が混在している課題名をそのままブランチ名としていたことがありましたが、ブランチ名に日本語を含めるケースは多くないと思います。このエラーに遭遇した際、エラーからは原因を推測しづらく解消に少し時間がかかりました。**ディレクトリ名やブランチ名に日本語を混ぜると、あらぬエラーが発生するということを学べる良い機会になりました。**