GitHub から提供されている静的サイト公開機能である GitHub Pages 。Git 的には「特定ブランチの特定フォルダ以下を静的サイトとして公開する」機能です。GitHub のリポジトリとしてコミットされていれば、GitHub のウェブ UI を使って設定できます。

が、いくつかの制約事項はあるものの git CLI だけでも(GitHub のウェブ UI から操作しなくても) GitHub Pages を公開することもできます。その手順を確認したので以下に記載しておきます。


【前提条件】
GitHub リポジトリに静的サイトのページが公開登録されている前提が必要です。また GitHub ページとして公開したいコンテンツは "/" (つまりリポジトリ直下のフォルダ)にまとまっているものとします。

というわけで以下のようなリポジトリを作りました。リポジトリ直下に README.md, page1.html, page2.html という3つのファイルが存在しているものとします:

(https://github.com/dotnsf/gh-pages-sample)
2023012200


それぞれの中身は以下のようになっています。3つのファイルでそれぞれリンクが設定されている、というだけの単純な内容です:
README.md
# README.md

- [ページ1](./page1.html)

- [ページ2](./page2.html)

page1.html
<html>
<head>
<title>ページ1</title>
</head>
<body>
<h1>ページ1</h1>

<a href="./">README.md</a>
</body>
</html>

page2.html
<html>
<head>
<title>ページ2</title>
</head>
<body>
<h1>ページ2</h1>

<a href="./">README.md</a>
</body>
</html>

このリポジトリをそのまま GitHub Pages で公開することにして、その手順を↓に紹介します(最後に応用の形でサブフォルダを GitHub Pages で公開する方法も紹介します)。


【git CLI での公開手順】
改めて GitHub Pages として公開したいリポジトリを参照し、その URL を確認します。今回の例であれば https://github.com/dotnsf/gh-pages-sample となります:
2023012201


このリポジトリを git clone します:
$ git clone https://github.com/dotnsf/gh-pages-sample

$ cd gh-pages-sample

次に gh-pages という名前のブランチ(←ここが重要!)を作成して checkout します:
$ git checkout -b gh-pages

このブランチをリモートの gh-pages ブランチとして git push します:
$ git push origin gh-pages

ここまでの手順が成功すると、GitHub のリモートリポジトリ側にも gh-pages ブランチが作成されていることが確認できます:
2023012202


(ここまでの手順で GitHub 上で GitHub Pages の設定はしていないのですが)"Settings" - "Pages" を選択して GitHub Pages の設定画面を確認すると、gh-pages ブランチの /(root) フォルダ以下が GitHub Pages として、 https://dotnsf.github.io/gh-pages-sample/ という URL で公開されていることが分かります:
2023012203


この URL にウェブブラウザでアクセスしてみると、README.md の内容が GitHub Pages として確認できます:
2023012204


ページ内のリンク部分をクリックすると想定通りのページに推移できます。GitHub ページとして期待通りに動いていることが確認できました:
2023012205


2023012206


ここで紹介したように gh-pages というブランチを作ってコミット&プッシュすることで、そのコンテンツを GitHub Pages として公開することができるようです。これによってウェブ画面からの操作なしで GitHub Pages 公開が実現できます。


【(応用)特定のサブフォルダ以下を GitHub Pages として公開したい場合】
GitHub で gh-pages という特殊な名前のブランチに登録することで GitHub Pages として公開できることがわかりました。ただ上で説明した方法ではリポジトリのフォルダ全体を公開することになりました。特定のサブフォルダの中だけを GitHub Pages として公開する方法はないのでしょうか?

その方法がこちらです。例えばローカルリポジトリ内の web フォルダ以下を GitHub Pages として公開する場合は以下のように指定します:
$ git subtree push --prefix web origin gh-pages

gh-pages というブランチを指定するのは↑で説明したのと変わりませんが、"git push" ではなく "git subtree push" というコマンドを使います。またこの時に "--prefix フォルダ名" を指定することで指定フォルダの内容だけを gh-pages ブランチとして(=GitHub Pages として)登録する※ことになります。


※少しややこしいのですが、この subtree push を使う方法で GitHub Pages を設定した場合、gh-pages ブランチに全ファイルが登録されて、その中の web フォルダ以下が GitHub Pages になる、というわけではありません。gh-pages ブランチに web フォルダ以下の全ファイルが登録されて、ルートフォルダ以下のファイル(つまりブランチ内の全ファイル)が GitHub Pages になります。つまり main ブランチと gh-pages ブランチではリポジトリのファイル構成が変わってしまう点に注意が必要です。