Windowsでjekyllを使えるようにするよ

本サイトをjekyllで構築するにあたり、前段階としてWindowsで使えるようにするにはいくつかハマりどころがありましたので、その解決法を紹介します。

このサイトはjekyllを用いて構築しています。jekyllはLinuxやMacOSXで使うなら情報も多く難しいところは無いのですが、WindowsでしかもRuby-2.0.0でやろうとするといくつかハマりどころがありました。だから本記事ではそれらのハマりどころと解決方法を紹介しましょう。

必須ソフト

まずは以下のソフトをインストールしましょう。

MinGW/Msysは mingw-get-inst-20120426.exe をダウンロードし、インストールしてPATHを通します。これはRubyのいくつかの(ネイティブ)モジュールをコンパイルするのに必要です。

Rubyは インストーラー版 が手軽で良いですが、私は 7-ZIPアーカイブ版 を使ってます。64ビット版は、MinGW環境を整えるのがやや手間になるので使わないほうが良いでしょう。Rubyの bin フォルダにPATHを通すのを忘れないでください。

なおMinGWを C:\MinGW に、Rubyを C:\Ruby にインストールしたならば、最低限通すべきパスは以下の3箇所になります。

  • C:\Ruby\bin
  • C:\MinGW\bin
  • C:\MinGW\msys\1.0\bin

gem install

コマンドラインで以下のgemを実行し jekyll とそれが要求するモジュールをインストールしましょう。redcarpet (github風のmarkdownエンジン)は必要に応じてですが、私にとっては必須です。

$ gem install jekyll --platform ruby
$ gem install redcarpet --platform ruby

ポイントは --platform ruby を付けるところで、私はコレを知らなかったために数時間を無駄にしました。

directory_watcher モジュールのダウングレード

$ gem install directory_watcher -v 1.4.1
$ gem uninstall directory_watcher -v 1.5.1

この記事の執筆時点で、上記でインストールされる directory_watcher モジュール(以下DW)のバージョンは 1.5.1 なのですが、このバージョンはどうも Windows では正しく動いていないようなので、DWのバージョンはちゃんと動いている 1.4.1 に落としておくと良いでしょう。

jekyll にパッチを当てる

未パッチのjekyll には Windows で使うにはいくつか問題があるので、パッチを当てて対応してしまいましょう。以下にはパッチを当てるコマンドを示しますが、wgetはブラウザでの ダウンロード に読み替えても良いです。

$ cd C:\Ruby\lib\ruby\gems\2.0.0\gems\jekyll-0.12.1
$ wget https://gist.github.com/koron/5218109/raw/1361402a4c65ea3875fed6328441c9dfd68f2315/jekyll-modify-20130322.diff
$ patch -p1 < jekyll-modify-20130322.diff

問題の詳細

jekyll を Windows の Ruby-2.0.0 で使う上での問題は以下のとおりです。

  • 各種ファイルを CP932 でしか書けない

    Ruby-1.9 以前は環境変数 LANG を使って誤魔化せたのですが 2.0.0 ではうまくいきませんでした。なのでパッチではjekyll自体に入力ファイルのエンコードを指定できる機能を追加しており、_config.yml にて encoding というプロパティで指定できるようになります。

    encoding: utf-8
    
  • 出力されるファイルがテキストモードになってしまう

    私は jekyll で生成したファイルを rsync でサーバに転送するという運用をしています。さらに jekyll は Windows だけでなく Linux でも FreeBSD でも MacOSX からでも利用しています。にも関わらず Windows だけがテキストモードでファイルを作ってしまうと、rsyncの際に無駄な転送が生じてしまいよろしくありません。パッチでは常にバイナリモードで出力するようにしました。

  • --server がDNSの逆引きを行なってしまう

    PCで jekyll --server --auto して、タブレットやスマフォから PC にアクセスして表示を確認しようとするとやけに遅くなります。その原因は jekyll が使ってるWebサーバが、アクセスしにきたクライアントのIPに対して常にDNSの逆引きを行なっており、それが見つけられずにタイムアウトまで待っていたからでした。DNSの逆引きを行わないようなパッチを施しました。

終わりに

私は以上のような方法で jekyll をインストールし、Windows + Ruby-2.0.0 で快適に暮らせています。