github pages入門

## はじめに
今回、マニュアルの作成をgithub pagesを使ってやってみることにしました。
その際に色々と躓いたりすることがあったので備忘録を兼ねて以下のことをする方法を記載していきます。

* markdown形式でページ作成する方法
* ローカルでデバッグする方法
* ページのレイアウトをカスタマイズする方法
* ひとつのリポジトリ内で複数のページを作成する方法

## markdown形式でページ作成する方法

### 必要なもの

* githubアカウント

### 注意事項

随所にスクリーンショットがありますが投稿当時のものになります。
内容が実際と異なることがありますのでご注意ください。

### リポジトリを作成する

githubにログインしてリポジトリの作成をします。
自分のリポジトリ一覧の画面から「New」ボタンを選択します。
![スクリーンショット_2020-08-26_14_54_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/27988f11-d351-19b8-71e6-fdd75d67d010.png)

好きなリポジトリ名を入力します。
リポジトリは必ずパブリックリポジトリにしてください。
設定が完了したら「create repository」を選択します。

![スクリーンショット_2020-08-26_15_06_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/7c0700b7-f2c6-4e51-f588-c6599b9b314d.png)

### github pagesの設定をする

リポジトリを作成したらリポジトリの設定画面に遷移します。

![スクリーンショット_2020-08-26_15_09_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/2320e8c5-6beb-91ac-0a90-be1873710c8f.png)

下の方にスクロールしていくと「github pages」の設定項目があります。
ここで、github pagesに反映したいブランチを選択します。
(今回はmasterブランチとします)
次に、github pagesで表示させるファイルの位置を選択します。
今回はREADMEが表示されないようにdocsを選択しました。
選択が完了したら「Save」ボタンを選択します。

![スクリーンショット_2020-08-26_15_12_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/96194bc8-7eae-1cdb-0a04-9a45ddc98eb1.png)

設定が完了するとこのようにURLが発行されます。
しかし、アクセスしても現段階ではdocsフォルダが存在しないので404が表示されてしまいます。

![スクリーンショット 2020-08-26 15.14.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/38c158a6-586a-ba86-26db-5e7e07921d76.png)

そこで次にテーマの選択をしていきます。

### テーマを選択する

先程のgithub pagesの設定画面から「choose theme」を選択します。
そうすると様々なテーマを選択できる画面が表示されます。
テーマを決めたら「Select theme」を選択します。
今回はCaymanを選択しました。

![スクリーンショット_2020-08-26_15_17_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/b54834a0-e467-c46f-d5fb-4b75018bfae7.png)

コミット画面が開かれるので任意のコミットコメントを入力して「commit changes」を選択します。
これでdocs以下にmarkdownファイルが作成されました！

![スクリーンショット_2020-08-26_15_21_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/d13f00d1-d730-9c57-fd8c-fb20bf131b9d.png)

設定画面に表示されているURLにアクセスするとindex.mdの内容が選択したテーマに沿って表示されていると思います。

![スクリーンショット 2020-08-26 15.23.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/c4e1a363-e4b0-d30f-b079-db239d1781e6.png)

index.mdを自由に編集すれば簡単にページを作成していくことができます。

## ローカルでデバッグする方法


### 必要な環境

* ruby(今回は2.7.0を使用)

### 前提条件

* github pagesを設定しているリポジトリをクローンしていること

### デバッグ環境を作成する

以下の内容を記載した`Gemfile`をリポジトリ直下に作成します

```ruby
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"

gem "github-pages", group: :jekyll_plugins
```

リポジトリ直下にて以下のコマンドを実行します
(`cd docs`はdocs以下にページファイルを作成している場合に実行します)
※rubyのバージョンが異なるとうまく動作しないことがあるのでご注意ください！

```shell
sudo gem install bundler
sudo bundler install
cd docs
bundle exec jekyll serve
```
最後のコマンドを実行後、以下の内容が表示されることでローカルホストにアクセスしてページの内容を表示できるようになります。

![スクリーンショット 2020-08-26 15.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/ccdf752b-0362-0d38-afda-db7313a8330e.png)


...しかし、選択したテーマは反映されていません:cry:
(しかも/index.mdと指定しないといけない...)

![スクリーンショット 2020-08-26 15.43.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/72bcc14a-dc98-e991-d77b-f254243bfd16.png)


### layoutファイルを用意する

テーマを反映させるためにlayoutファイルを用意します。
themeを管理している[リポジトリ一覧](https://github.com/pages-themes)から選択したテーマのリポジトリを選択します。
今回はcaymanを使用しているのでcaymanのリポジトリを選択します。
リポジトリ内に`_layout/default.html`があるのでそれを`docs/_layouts`以下に配置します。(_layoutsディレクトリは各自で作成します。)
レイアウトを複数使用したい場合はわかりやすいファイル名に変更します。
(今回はdefault.htmlで進めていきます。)

### index.mdを修正する

レイアウトファイルを作成しただけではまだテーマの反映はされません。
index.mdにどのレイアウトを使用するか指定して上げる必要があります。
index.mdの先頭に以下を追記します。
(レイアウトのhtmlファイル名を別のものにしている場合はそれを指定します。)

```markdown
---
layout: default
---
```
追記後、保存し`http://127.0.0.1:4000/`にアクセスするとテーマが反映された状態で表示されるようになります:raised_hands:

![スクリーンショット 2020-08-26 15.53.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/dc871692-035d-3e74-b83e-61ed662002ac.png)

ただ、まだヘッダー部分にタイトルや説明文がありません...
設定します！

### タイトルと説明文を設定する

 前項にてindex.mdでレイアウトの指定をしました。
同様の場所でタイトルと説明文の設定をすることができます。
index.mdの先頭に以下のtitleとdescriptionを追記します。

```markdown
---
layout: default
title: github pages sample
description: github pagesのサンプルページです！
---
```

これを設定するだけでタイトルと説明文を設定することができます。

![スクリーンショット 2020-08-26 15.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/bd7295c4-2d60-9f89-4dd7-9a9ba68a38ec.png)

### configファイルを変更する

configファイルにタイトルや説明に何を指定するか設定することで本番環境でもindex.mdファイルで指定したタイトルが表示されるようになります。
リポジトリ直下にある`_config.yml`の末尾に以下を追記します。

```yml
title: { { page.title } }
description: { { page.description } }
```

これで本番環境でもindex.mdの内容を見てタイトルと説明文を設定してくれるようになります。

## ページのレイアウトをカスタマイズする方法

リポジトリ内で作成されている_layout/以下のhtmlファイルが実際のページにも反映されるのでhtmlファイルをカスタマイズすることで自分好みのレイアウトにすることができます。
今回はページ上部にある「Skip to the content.」ボタンを削除してページ内のデフォルトの文字色を変更してみます。

![スクリーンショット 2020-08-26 15.58.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/e1abc0db-f736-398f-6be8-69c55afcc774.png)

### リンクを削除する

`_layouts/default.html`の以下の箇所を削除します。

```html
<a id="skip-to-content" href="#content">Skip to the content.</a>
```

![スクリーンショット 2020-08-26 16.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/7ae02d36-bba1-94dd-e155-5660b2196d9a.png)

リンクボタンが消えました！簡単ですね:thumbsup:

### デフォルトの文字色を変更する

default.htmlの内容を変更するとレイアウト部分が変更されることが分かりました。
htmlファイル内にscriptやstyleを指定することでページに動作を加えたりスタイルを変更したりすることもできます。
index.htmlの末尾に以下を追記します。

```html
<style>
    main {
        color: magenta;
    }
</style>
```

保存後、ページをリロードすると文字色がマゼンタに変わりました！

![スクリーンショット 2020-08-26 16.07.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/3b4a001b-0ebc-d948-2d56-6a7841a2ce19.png)

先程も書いたとおり、scriptを記載することもできるので、例えばトップに戻るボタンを作成することもできます。
また、htmlを編集することでページのサイドに目次を表示させることもできます。

## ひとつのリポジトリ内で複数のページを作成する方法

リポジトリ内にひとつだけではなく複数のページを作る方法です。
他にも方法はあるかもですが一例と思っていただければと...

### docs以下にmdファイルを置くためのディレクトリを作成する

今まではindex.mdをdocs直下においていましたがdocs以下に任意のディレクトリを作成して、その下にindex.mdを配置します。
今回は`docs/page1/index.md`としました。
この状態で`http://127.0.0.1:4000/page1/`にアクセスします。
無事に画面が表示されました:raised_hands:
(わかりやすいようにタイトルに~page1~を追記しています)

![スクリーンショット 2020-08-26 16.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192406/23aff28f-51b8-9a96-c685-c0470f79864b.png)

ページごとにレイアウトを変えたい場合はindex.mdのlayout部分をそれに合ったlayoutのファイル名に設定すれば反映することができます。

## 最後に

個人的にデバッグ環境の用意やレイアウトの作成部分で躓いてしまいましたが、慣れてしまえばすごく便利なツールだなと感じました。
特にmarkdown形式で書けるようにしておくことで非エンジニアの方でも簡単にページの編集ができるのでありがたいなと思います。
プルリク作成したり変更履歴の管理もできますし...