2018年以降の記事はGitHub Pagesに移行しました

JekyllとJekyll Bootstrapでかんたん静的サイト生成…するための準備

あらすじ

  • はてな記法、綺麗に出力できて今までお気に入りだったんだけど、欠点として、はてなでしか使わないという問題が
  • 他にも文章書く時にreSTとかMarkdownを使うと捗るが、結局アウトプットするのは個人でははてなが多い……*1
  • そもそもはてな記法は基本はてなじゃなきゃ見れない
  • なら最初から…?

うーん。他の記法使う時がきたのか。

Jekyllとは

Jekyll is a simple, blog aware, static site generator.

https://github.com/mojombo/jekyll/wiki

静的サイトのジェネレーターなのね。 HTML, Markdown, textile なんでもござれ。

環境

  • CentOS 6.2 と、WindowsXP
  • Ruby 1.9.2
    • Bundler 1.1.4
  • Git 1.7.9.6
  • Jekyll 0.11.2
  • RedCloth 4.2.9

いきなり動かす

本来は決まったディレクトリを作ったり、コンフィグファイルを作ったり、レイアウトファイルを作ったりしていく……のだけど、Jekyll Bootstrapを使えばいきなりフルセットで動かす事ができる。

取得はGitで。

$ git clone http://github.com/plusjade/jekyll-bootstrap.git JEKYLL_HOME

JekyllはBundlerでインストールするので移動してGemfileを作成。そしてjekyllコマンドで実行!

$ cd JEKYLL_HOME
$ vi Gemfile
$ cat Gemfile
source :rubygems
source "http://rubygems.org"

gem 'jekyll'
gem 'RedCloth'

$ bundle install --path vendor/bundle
$ bundle exec jekyll --server

これで、http://localhost:4000 にアクセスしてみると超カッコいいサンプルページが出来上がっている。CentOSは以上。

ハマり for Windows

ところで、Windows XPで同じ事やっても_site下に静的ファイルが全然できなかった。……まあ、そもそもXP使うなって話?

結果としては、RedCloth-4.2.9-x86-mingw32直下のspecディレクトリを削除したら生成されるようになった。静的ファイル生成の流れを追っていくと、

  • jekyll/bin/jekyll内でsite.processメソッドが呼ばれている
  • jekyll/lib/jekyll/site.rbのprocessメソッドからread,readからread_directoriesメソッドが呼ばれている
  • read_directoriesメソッドは以下のようになっている
     def read_directories(dir = '')
       base = File.join(self.source, dir)
       entries = Dir.chdir(base) { filter_entries(Dir['*']) }
       self.read_posts(dir)

       entries.each do |f|
         f_abs = File.join(base, f)
         f_rel = File.join(dir, f)
         if File.directory?(f_abs)
           next if self.dest.sub(/\/$/, '') == f_abs
           read_directories(f_rel)
         elsif !File.symlink?(f_abs)
           first3 = File.open(f_abs) { |fd| fd.read(3) }
           if first3 == "---"
#\yaml!/
             # file appears to have a YAML header so process it as a page
             pages << Page.new(self, self.source, dir, f)
           else
             # otherwise treat it as a static file
             static_files << StaticFile.new(self, self.source, dir, f)
           end
         end
       end
     end
  • 読み込むファイルをputs して眺めていると、\yaml!/のところでRedCloth-4.2.9-x86-mingw32\spec\fixtures\basic.ymlを呼んだ瞬間止まっている模様……
  • まあ、specファイルだしなくてもいいよね? 削除、で、動いたという事で*2

で、動かす(Windows)。

$ be jekyll --server
Configuration from C:/HOGE/jekyll/_config.yml
Auto-regenerating enabled: C:/HOGE/project/jekyll -> C:/HOGE/project/jekyll/_site
[2012-09-12 23:50:51] regeneration: 983 files changed
[2012-09-12 23:50:54] INFO  WEBrick 1.3.1
[2012-09-12 23:50:54] INFO  ruby 1.9.2 (2011-07-09) [i386-mingw32]
[2012-09-12 23:50:54] INFO  WEBrick::HTTPServer#start: pid=5944 port=4000

 ___________________________________________________________________________
| Maruku tells you:
+---------------------------------------------------------------------------
| Unclosed span (waiting for ["_"])
| ---------------------------------------------------------------------------
| Included file 'sig.markdown' not found in _includes directoryEOF
| -------------------------------------------------------------|--------------
|                                                              +--- Byte 61
| Shown bytes [0 to 61] of 61:
| >Included file 'sig.markdown' not found in _includes directory
|
| At line 2
|       text     |Included file 'sig.markdown' not found in _includes directory|
|      empty --> ||
|       text     |This _is_ cool|
|
|
| Elements read in span:
|
| Current string:
|   "includes directory"
+---------------------------------------------------------------------------
!C:/HOGE/project/jekyll/vendor/bundle/ruby/1.9.1/gems/maruku-0.6.0/lib/maruku/errors_management.rb:49:in `maruku_error'
!C:/HOGE/project/jekyll/vendor/bundle/ruby/1.9.1/gems/maruku-0.6.0/lib/maruku/input/parse_span_better.rb:222:in `read_span'
!C:/HOGE/project/jekyll/vendor/bundle/ruby/1.9.1/gems/maruku-0.6.0/lib/maruku/input/parse_span_better.rb:423:in `read_em'
!C:/HOGE/project/jekyll/vendor/bundle/ruby/1.9.1/gems/maruku-0.6.0/lib/maruku/input/parse_span_better.rb:202:in `read_span'
!C:/HOGE/project/jekyll/vendor/bundle/ruby/1.9.1/gems/maruku-0.6.0/lib/maruku/input/parse_span_better.rb:46:in `parse_span_better'
\___________________________________________________________________________

エラーは出てるけど、これで http://localhost:4000にアクセスするとページが見れる!
sig ... 署名? あんまりよくないけど、空っぽでも存在さえすれば怒られないっぽい。

*1:個人でない場合はExcelとか

*2:なんでbasic.ymlを読もうとして止まったかまでは調べてないです……