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

[Ruby][StartUp][Jekyll]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を読もうとして止まったかまでは調べてないです……

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/09/20 [Jekyll] [StartUp] [Ruby] JekyllをGitHub Pagesに上げるための準備
  2. 2012/11/12 [Ruby] [Jekyll] はてなダイアリーのエントリをJekyllへ移行する
  3. 2012/10/10 [Jekyll] [Liquid] [Ruby] Jekyll(Liquid)で記事の目次を出力するプラグインを作ってみた
  4. 2012/09/21 [Python] [Ruby] [Jekyll] Pygmentsを使ってJekyll内記事のコードハイライトを実現する
  5. 2014/04/01 [Ruby] [Jekyll] [イベント] kawasaki.rb #010 で発表してきました #kwskrb
  6. 2014/01/28 [Jekyll] [GitHub] [Ruby] Jekyllプロジェクトへpull requestを行う手順(したとは言っていない)
  7. 2013/09/07 [Ruby] [Git] [Jekyll] Jekyllバージョンアップの際に思いのほか手こずった話 てっく煮さん製プラグインの更新に追従したい編
  8. 2013/08/09 [Ruby] [Redmine] [MySql] [StartUp] WindowsにRedmine2.3をインストールする手順と、プラグイン作成用メモ
  9. 2013/08/07 [Ruby] [Jekyll] [Git] Jekyllバージョンアップの際に思いのほか手こずった話 Jekyll Bootstrapの更新に追従したい編
  10. 2013/05/27 [Jekyll] [Ruby] Jekyll@GitHub Pagesの運用形態を変えたのでAnalyticsの設定が効かなくなっていた
  11. 2013/05/23 [Jekyll] [Liquid] [Ruby] 記事の目次を出力するJekyllプラグインの改良
  12. 2013/04/11 [Ruby] [Jekyll] Jekyllのバージョンを 0.12.0 にあげた
  13. 2013/04/01 [Ruby] [StartUp] [Chef] 入門Chef Solo - Infrastructure as Code を読みながらChef Soloで遊べるようになるまで
  14. 2013/02/25 [Ruby] [StartUp] Ruby 2.0.0 をpikとrvm経由でインストール&環境構築
  15. 2012/12/25 [Ruby] メモ化を知った