Riji + Daiku + Travis CI で GitHub Pages を運用する
まとめ
- Jekyll で GitHub Pages 作ったままほったらかしてたので久しぶりに触ろうと思った
- 「今更 Jekyll でやるのも何かなぁ」
- Middleman なら Travis CI 使って更新作業できることを知る
- Middleman の config.rb 書いてたら面倒になった
- Gotanda.pm が開催されるとのこと
- 「せっかくだから Riji と Travis CI で GitHub Pages 作って LT で発表しよう」
- スピーカー枠埋まってたのでブログに書いた
やりたいこと
「 markdown で記事を書く」「 commit する」「 GitHub に push する」で blog が更新できるようになること
具体的な手順
GitHub Pages を作る
今回は monmon.github.io に作ることにした(ユーザページと呼ばれるやつで [https://github.com/monmon/monmon.github.io:title=
設定方法は GitHub Pages のサイトにあるのでその通りやれば良い。
Riji を使うための前準備をする
今回は Travis で publish したい(静的ファイルを作りたい)ので Carton で Riji をインストールする。
0. まず、Carton が入ってない場合には cpanm で入れる
cpanm Carton
1. cpanfile に Riji を書く(ついでに後々必要になる Daiku も)
% cat > cpanfile requires 'Riji'; requires 'Daiku';
2. Carton でインストール
carton install
これでlocalディレクトリが作れる
3. アーキテクチャの関係上、 Travis で改めて carton install するので、local ディレクトリはgitignoreしちゃう
echo local >> .gitignore
ここまでで一旦commitする
前準備はここまで。簡単。
Riji を使う
Riji は Perl で作られた blog ツールで、「 markdown で記事を書く」「 commit する」「その記事を HTML ファイルとして吐き出す」というお手軽作業で記事更新できるもの。
チュートリアルがわかりやすいのでそれをそのまま倣ってていくだけで使える。
1. 事前作業で Riji が使えるようになっているので、まずは setup
carton exec riji setup --force
既にlocalディレクトリがあるので --force が必要
2. 念のためページが見れるか確認
carton exec riji server
表示できれば一旦OK
3. 今後、新しい記事を書くときは以下を叩くだけでOK
carton exec riji new-entry
Rijiについてはこれでおしまい。簡単。
Daiku を使う
Daiku は Rake みたいなやつの Perl 版。
.travis.yml にズラズラ書くよりも Rake 使ってやるのが良さそうなので Daiku も一緒にインストールすることにした(というか、使ったことないので何となく使ってみたかった)。
Daiku の使い方は Daiku and Daikufile are now production ready | おそらくはそれさえも平凡な日々 や sample を見るとざっくりわかる。
今回 Daiku で必要な作業は以下の3つ。
- master branch を checkout する
- Travis は最新 commit を checkout してテストをまわすわけだけど、 Riji は publish 用の branch かチェックしている( git symbolic-ref HEAD の値を確認している)ため master に切り替える
- publish する
- publish したものを git に push する( blog の更新)
ということで、それぞれ以下のようになった。
1. master branch を checkout する
desc 'git を masterに変える'; task checkout_master => sub { my ($task, @args) = @_; sh qw(git checkout master); };
2. publish する
desc '記事を作る'; task publish => sub { my ($task, @args) = @_; sh qw(carton exec riji publish); };
3. publish したものを git に push する( blog の更新)
desc '作られた記事を github に push'; task push_github => sub { my ($task, @args) = @_; sh qw(git add -A); sh qw(git commit -m), 'Update blog on Travis'; # Token が出力されないように --quiet & 2> /dev/null sh "git push --quiet https://$ENV{GH_TOKEN}\@github.com/monmon/monmon.github.io master 2> /dev/null"; };
最後の--quiet と 2> /dev/null はPersonal access tokenの値が Travis の出力結果に表示されないためのもの。ここだけ文字列で渡している理由は標準エラーにリダイレクトするため( sh は IPC::System::Simple なので、リストで渡してもシェル起動せず、標準エラーを /dev/null にリダイレクト利するためには文字列渡してリダイレクトさせないといけない…んだと思う)。
Daiku についてはここまで。簡単。
Travis を使う
Travis CI はCIサービスで、GitHub に push したらテストまわしたり、必要なシェル実行してくれるやつ。
Perl + Travis CI + Coveralls (PrePANの対応) - $shibayu36->blog; を見て Perl 設定の参考にした。
ここでやることは以下の3つ。
- Travis が GitHub Pages のリポジトリに push されたものをテストするように設定する
- Travis がリポジトリに push できるように secure を作る
- Travis の作業内容を .travis.yml に書く
ということで、細かい内容は以下。
1. Travis が GitHub Pages のリポジトリに push されたものをテストするように設定する
これは Accountsのページ に行って GitHub Pages のリポジトリを ON にするだけでおしまい
2. Travis がリポジトリに push できるように secure を作る
gem install travis travis encrypt -r <owner>/<repo> "GH_TOKEN=<GitHub の Personal access token>"
僕の場合なら
3. .travis.yml を書く
- Perlの場合のドキュメントを参考に Perl の設定
language: perl perl: - "5.18"
(5.16 だと Getopt::Long のバージョンが 2.38 でDaiku の求めるバージョンより低くてハマったのでサクッと5.18にしました)
- branch は master しか使わないので
branches: only: - master
- blog 生成部分は Daiku を使うだけ
before_install: - cpanm Carton install: - 'carton install --deployment' before_script: - carton exec daiku setup script: - carton exec daiku publish after_success: - '[ "$TRAVIS_BRANCH" == "master" ] && [ "$GH_TOKEN" ] && carton exec daiku push_blog_to_github'
- 最後に GitHub に push できるように設定するだけ
env: global: - GIT_COMMITTER_NAME="monmon" - GIT_COMMITTER_EMAIL="lesamoureuses@gmail.com" - GIT_AUTHOR_NAME="monmon" - GIT_AUTHOR_EMAIL="lesamoureuses@gmail.com" - secure: "RpupCpR1J/p+JIqdJ7WUk13NnA1LgpxqVPjHpY18XSTrKZy6YAEtzPu3aVqARFFN40iipiyxSCm93mzOSWwdl9FUyV//ythOCSpF3fs9NKSP/9HilGb8x3yIbpastRML2m1voSYmuR5IKOELc4axVEVapYenUoCVlVhcZ0oVXkM="
(COMMITTER と AUTHOR どちらかだけだとダメで両方書かないといけなかったんだけどどこにそのことが書いてあるのか探せなかった)
.travis.ymlのsyntax checkについては Travis が用意している Lint を使えば良いです(日本語が入ってた場合にLintはグリーンだけど Travis 上ではエラーになるとパターンがあってハマったけど)。
Travis についてはここまで。簡単。
できあがり
ということで、できた blog が http://monmon.github.io/blog/ です!
超いろんな所でハマったけど、それらを乗り越えて作ることができました!
最後に
やってみて重要だなと思ったことはネタを作ってからスピーカー登録しようとしてもスピーカー枠は埋まってるということでした!