Sat, Aug 15, 2015

GitHub Pagesでブログ立ち上げ - GitHub PagesとJekyll

GitHub Pagesでブログ立ち上げ - GitHub PagesとJekyll

このブログを立ち上げたときの作業を、主に備忘録としていくつかのエントリに分けて書く。 このエントリでは主にGitHub PagesJekyllについて書く。


今の構成

このブログは、Hugoで作って、GitHub Pagesで公開している。

Hugoについては別のエントリで書くとして、GitHub Pagesは、GitHubが提供しているウェブページのホスティングサービスで、GitHubに特定の名前のリポジトリ、または任意のリポジトリに特定の名前のブランチを作ってウェブサイトのソースを置くと、公開してくれるというサービス。PaaSにあたるのかな。 GitHub Pagesのサイトに利用方法が載っている。

以下、このブログ立ち上げに向けてやった作業について書く。

GitHub Pages味見

GitHub Pagesを利用するには、GitHubユーザ名.github.io という名前のリポジトリを作るか、任意のリポジトリにgh-pages という名前のブランチを作って、そこにサイトのソースを置けばいい。そのサイトには、前者の場合はhttp://GitHubユーザ名.github.ioで、後者の場合はhttp://GitHubユーザ名.github.io/リポジトリ名でアクセスできる。 (2016/8/18追記: 今はgh-pagesブランチは不要。)

とりあえず前者をやってみる。

  1. kaitoy.github.io という名前のリポジトリを作って、そのルートに「Hello World」とだけ書いた index.html を置く。
  2. ブラウザでhttp://kaitoy.github.ioにアクセスすると、「Hello World」と表示された。

これだけ。

GitHub PagesとJekyll

GitHub Pagesには、普通にHTML/CSS/Javascriptのソースを置いてもいいけど、Jekyllを利用することもできる。

Jekyllは、ブログ用の静的サイトジェネレータなるもので、Markdownで書いた記事を元にブログサイトのソースを生成するツール。GitHub Pages用のリポジトリにJekyllのソースをアップロードすると、Jekyllでビルドされ、その結果が公開される。

これはうれしい。 Jekyllのソースとビルド結果を別々に管理しなくてよくて楽だし、公開されるサイトが最新のソースに基づいていることが保証される。

結論から言うと、以下のような理由で結局Jekyllは使わなかったんだけど、Jekyllとの格闘の記録を残しておく。

  • Windowsを正式サポートしていない。
  • Rubyで書かれてるため、ビルドが遅い。ブログエントリが数百とかになると辛くなってくるらしい。
  • Jekyllを使っても、かっこいいサイトを手軽に作ろうと思ったら、結局ビルド成果物もGitHubに上げないといけなくなる。

Jekyllセットアップ

GitHub PagesでJekyll使う場合は、GitHub Pagesと同じJekyll環境を手元に作ってプレビューできるようにしておくべきとのこと。なので、これに従って自分のPC (Windows 7) にJekyllをセットアップする。

1.Rubyインストール

Jekyllは Ruby で書かれてるので、まずはRubyをインストールする。 WindowsなのでRubyInstaller (ver. 2.2.2)をダウンロードしてインストール。 Bundler (RubyのパッケージであるGemの依存をアプリケーションごとに管理するツール) もあるといいらしいので、gem install bundlerを実行してインストール。

2. Jekyllインストール

さっき作ったリポジトリ kaitoy.github.io (の手元のクローン)のルートに、Bundlerの定義ファイルを Gemfile という名前で作り、以下の内容を書く。

source 'https://rubygems.org'
gem 'github-pages'

依存するGemは jekyll じゃなくて github-pages。これはGitHub Pages環境のJekyllということだろう。

で、kaitoy.github.io のルートでbundle installを実行する。ここでエラー発生。 エラーメッセージによると、native gemをビルドするために DevKit なるものが要るとのこと。

再びRubyInstallerのページに行ってDevKitをダウンロードして、wikiに従ってインストール。

再度bundle installしたらJekyllのインストールに成功。

  • github-pages: ver. 35
  • jekyll: ver. 2.4.0

これで、ちょくちょくbundle updateを実行すれば、最新のGitHub Pages環境に追随できる。

bundle exec jekyll serveすると、カレントディレクトリのJekyllソースがビルドされ、Webサーバが起動し、http://localhost:4000でそのビルド結果を見れるらしい。

3. Jekyll味見

試しに、適当な場所でjekyll new hogeを実行し、新規サイトフォルダ hoge を作り、その中でjekyll buildしてみる。以下のエラー。

c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb:164: warning: cannot close fd before spawn
'which' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
  Liquid Exception: No such file or directory - python c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/pygments.rb-0.6.1/lib/pygments/mentos.py in jekyll/_posts/2015-05-29-welcome-to-jekyll.markdown
                    done.

Jekyllのサイトを見直したらWindowsはサポートされていないとのこと。 けど、Windowsにセットアップする方法は検索したらたくさん出てきた。 Jekyllのサイトでも紹介されているRun Jekyll on Windowsというサイトの手順に従うとか、Portable Jekyllという、WindowsでJekyllを動かすためのツールを集めたものを使うとか。

後者は、Jekyllのインスタンスを含んでいて、将来にわたるJekyllのアップデートについていってくれるか怪しいので、前者を見てみる。

4. Run Jekyll on Windowsを試す

Run Jekyll on Windowsによると、Jekyllはデフォルトでsyntax highlighterの pygments.rb なるものに依存していて、pygments.rbをWindowsで使うには Python とそのモジュールである Pygments などをインストールする必要があるのこと。

とりあえずPythonをここからダウンロードしてインストール。バージョンは、3系はPygmentsがサポートしていないようなので2.7.10。 pip なるPythonパッケージ管理ツールが要るとRun Jekyll on Windowsに書いてあるが、2.7.10にはデフォルトで入っていた。

python -m pip install Pygmentsを実行してPygmentsをインストール。これはどうもpygments.rbがラップしているものらしい。

また、Jekyllにはauto-regenerationなる、ファイル変更を検知して自動ビルドする機能があって、Windowsでこれを使うには wdm というgemが必要らしい。 以下をGemfileに追加して、bundle installする。

gem 'wdm', '~> 0.1.0' if Gem.win_platform?

したら以下のエラー。

c:\Ruby22-x64\lib\ruby\gems\2.2.0\gems\wdm-0.1.0\ext\wdm/rb_monitor.c:508: undefined reference to `rb_thread_blocking_region'

どうも、ここによると、エラーメッセージにある rb_thread_blocking_region というメソッドは、Ruby 2.0で非推奨になり2.2で消されたものらしい。

wdmはもう数年更新されておらず、修正の見込みはなさそう。(後日見たら開発再開されてて、この問題も修正されていた。)

Rubyをダウングレードするの面倒なので、試しにそのままjekyll serveしたら以下のメッセージが出たけど動いた。

  Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
 Auto-regeneration: enabled for 'c:/Users/Kaito/mirrored_data/pleiades/workspace/kaitoy.github.io/hoge'

auto-regenerationも動いている模様。実際ソースをいじったら自動で反映された。 よくわからないが、よしとする。

実は、以下のエラー(上でも出てたやつ)はまだ出ている。

c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb:164: warning: cannot close fd before spawn
'which' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

このwarningについてはRun Jekyll on Windowsには載っていないが、pygments.rbを0.5.0にダウングレードすればいいとの情報がこことかにある。

5. Jekyllとの決別

この辺りまでJekyllをセットアップした後、JekyllのWindowsとの相性の悪さに嫌気がさしつつ、Jekyllで簡単にかっこいいサイトを作るためのツールなどを調べているうちに、Jekyllを使うのをやめた。それについては別のエントリで書く。