Competitive Programming Advent Calendar 2019 用のリポジトリ
突然ですが、以下の「ここをクリック」と書かれている箇所をクリックしてみてください。隠されていたコンテンツが表示されるようになるはずです。
この機能は Jekyll に備わっている機能ではなく、自分で追加したプラグインによって実現されています (このプラグインは Adding support for HTML5’s details element to Jekyll に記載されている内容を参考に作成されたものです)。このように、Jekyll は自分の手で機能を拡張することができます。
しかし、セキュリティの観点から GitHub Pages では自分で追加したプラグインをビルドできません。これでは困るので、CI (継続的インテグレーション) を活用して自作のプラグインも使えるようにしてみましょう。
以下で説明されている内容は jekyll-travis の README を基に作成されており、本リポジトリ内の .travis.yml や Rakefile 等のファイルは jekyll-travis リポジトリから拝借したものです。詳細な説明がほしい方はこちらのリポジトリの README をご覧ください。また、プラグインの具体的な作成方法については プラグイン | Jekyll に委ねますので参考にしてください。
まず、Travis CI へアクセスして、自分が利用している GitHub アカウントの情報をもとに登録を済ませてください。
登録したての状態で Travis CI の Dashboard に行くと、「GitHub Apps Integration」と出ているはずです。緑の「Activate」というボタンをクリックします。

すると、どのリポジトリに Travis CI をインストールするか聞かれます。CI を適用したいリポジトリが含まれるように選択し、「Approve & Install」をクリックします。

これで Travis CI のインストールは完了です。Dashboard にリポジトリが表示されるようになったと思いますので、リポジトリを選択してリンク先に飛び、「More Oprions → Settings」をクリックします。すると、Environment Variables (環境変数) を設定する項目がありますので、以下を入力します。DISPLAY VALUE IN BUILD LOG にチェックを入れないように注意してください。
GIT_NAME (GitHub アカウント名)GIT_EMAIL (アカウント名に紐付けられているメールアドレス)GH_TOKEN (Personal Access Token)
repo のみでよいです。
これで、Travis CI を利用する準備ができました。
Sample 1 まででは GitHub Pages が勝手にビルドしてくれていましたので master ブランチにあるものをそのままビルドさせていましたが、今回は GitHub Pages のビルド機能は使わずに CI を利用して自分でビルドさせます。生成元と生成先のブランチは異なるほうが嬉しいため、今回は master ブランチに Markdown ファイルを置き、その内容を gh-pages ブランチにビルド させることにしましょう。
Sample 1 では生成元ブランチを master にしていましたが、これを gh-pages ブランチに変更します。gh-pages ブランチを生成したら、Sample 1 における生成元ブランチの設定と同様に、gh-pages ブランチを代わりに生成元ブランチとして指定します。
また、Sample 1 のときと同様に_config.yml は適宜自分の情報に差し替えてください。特に、CI を用いたビルドにおいて Rakefile 上で以下の変数を使用しますので、必ず設定を変更してください。
username: tsutaj # 自分の GitHub ユーザー名
repo: pages-example # リポジトリ名
destination: _site/ # 基本的にいじる必要はないです
Sample 1 で sample_002.md を exclude していた方は、再びその行をコメントアウトすることを忘れないでください。ここまで操作しましたら、master ブランチに push します。gh-pages ブランチへの push は Rakefile 等が Travis CI 上で自動でやってくれます。
$ git add [files]
$ git commit -m "add pages files"
$ git push origin HEAD
うまくいけば、master ブランチに push したものが gh-pages ブランチにビルドされるはずです。