Update Jekyll-3.0

Update Jekyll-3.0

このブログの構築に使用しているJekyllv2.5.3からv3.0.1にアップデートした際に、いろいろと問題が発生したのでここに記しておく。

Jekyll

Jekyllをアップデート

gem update jekyll
# もしくは、bundlerを使っているなら
bundle update

よし、これでいい。

さっそく動かなくなる

( -ω-)y─┛~~~

エラーその1: jekyll-paginateがない。

さっそくローカルサーバーを立ち上げるべく、jekyll serve コマンドを叩くがエラー。

Deprecation: You appear to have pagination turned on, but you haven't included the `jekyll-paginate` gem. Ensure you have `gems: [jekyll-paginate]` in your configuration file.

(ページネーションがオンになってるようだけど、gemの jekyll-paginate をインクルードできてないよ。
設定ファイルに gems: [jekyll-paginate] を追記してくれよ。)
とのことなので、jekyll-paginate をインストールして、

gem install jekyll-paginate

# もしくはbundlerの場合、Gemfileに追記
gem 'jekyll-paginate'

_config.yaml に使用するGemパッケージを追記。

gems: [jekyll-paginate]

よし、これでいい。

エラーその2: 日付のチェックが厳しくなった。

draftに置いていた雛形ファイルの日付がおかしいと怒られる。

Error reading file /Users/yuhiisk/Work/Github/blog/_drafts/2015-00-00-****.md: Invalid date '2015-00-00': Document '_drafts/2015-00-00-**.md' does not have a valid date in the YAML front matter.
jekyll 3.0.1 | Error:  comparison of Jekyll::Document with Jekyll::Document failed

リネームした。

2015-00-00-****.md
↓
2015-01-01-****.md

よし、これでいい。

エラーその3: redcarpetがない。

次にredcarpet が無いからgemをインストールしてくれよ、と怒られる。

  Dependency Error: Yikes! It looks like you don't have redcarpet or one of its dependencies installed. In order to use Jekyll as currently configured, you'll need to install this gem. The full error message from Ruby is: 'cannot load such file -- redcarpet' If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/!
  Conversion error: Jekyll::Converters::Markdown encountered an error while converting '_posts/2015-07-30-generate-the-closure-in-for-loop.md':
                    redcarpet
  Liquid Exception: redcarpet in category/javascript/index.html
             ERROR: YOUR SITE COULD NOT BE BUILT:
                    ------------------------------------
                    redcarpet

v3.0からはJekyllにredcarpet が含まれなくなったようだ。
redcarpet は個別にインストールする。

gem install redcarpet

# もしくはbundlerの場合、Gemfileに追記
gem 'redcarpet'

よし、これでいい。

エラーその4: メソッドが未定義。

       Deprecation: Collection#each should be called on the #docs array directly.
                    Called by /Users/yuhiisk/Work/Github/blog/_plugins/sitemap_generator.rb:123:in `fill_posts'.
jekyll 3.0.1 | Error:  undefined method `name' for #<Jekyll::Document _posts/2013-05-18-welcome.md collection=posts>

sitemap_generator.rb というサイトマップを生成するプラグインを入れてたんだけど、その中で使われているメソッドがねぇよボケ、と怒られた。
これは代替として、gemでjekyll-sitemapをインストールする。

gem install jekyll-sitemap

# もしくはbundlerの場合、Gemfileに追記
gem 'jekyll-sitemap'

これも _config.yaml に使用するGemパッケージを追記。

gems: [jekyll-paginate, jekyll-sitemap]

よし、これでいい。

エラーその5: pygmentsがない。

おいおい、pygments が無いじゃねぇか。いいかげんにしろよマジで。
と怒られる。

  Dependency Error: Yikes! It looks like you don't have pygments or one of its dependencies installed. In order to use Jekyll as currently configured, you'll need to install this gem. The full error message from Ruby is: 'cannot load such file -- pygments' If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/!
  Conversion error: Jekyll::Converters::Markdown encountered an error while converting '_posts/2013-05-18-welcome.md':
                    pygments
             ERROR: YOUR SITE COULD NOT BE BUILT:
                    ------------------------------------
                    pygments

これも先ほどと同様、Gemをインストールする。
注意点として、パッケージ名は pygments ではなくて、pygments.rb な点だ。

gem install pygments.rb

# もしくはbundlerの場合、Gemfileに追記
gem 'pygments.rb'

よし、これでいい。

エラーの原因

原因はメジャーアップデートによる構成の変更によるものだ。
ぼくはGemをグローバルにインストールせず、bundlerで管理しているので、Gemfile.lockを比べてみたら違いが一目瞭然だった。

アップデート前(v2.5.3)

    jekyll (2.5.3)
      classifier-reborn (~> 2.0)
      colorator (~> 0.1)
      jekyll-coffeescript (~> 1.0)
      jekyll-gist (~> 1.0)
      jekyll-paginate (~> 1.0)
      jekyll-sass-converter (~> 1.0)
      jekyll-watch (~> 1.1)
      kramdown (~> 1.3)
      liquid (~> 2.6.1)
      mercenary (~> 0.3.3)
      pygments.rb (~> 0.6.0)
      redcarpet (~> 3.1)
      safe_yaml (~> 1.0)
      toml (~> 0.1.0)

アップデート後(v3.0.1)

    jekyll (3.0.1)
      colorator (~> 0.1)
      jekyll-sass-converter (~> 1.0)
      jekyll-watch (~> 1.1)
      kramdown (~> 1.3)
      liquid (~> 3.0)
      mercenary (~> 0.3.3)
      rouge (~> 1.7)
      safe_yaml (~> 1.0)

メジャーアップデートされたので、JekyllにバンドルされているGemパッケージも変更になっている。
次のパッケージはv3.0では含まれなくなったので、もし次の何かしらの機能をすでに使っていたら、別途インストールする必要がある。

  • jekyll-coffeescript
  • jekyll-gist
  • jekyll-paginate
  • pygments.rb
  • redcarpet

新規でインストールする場合でも覚えておくといいだろう。

Ruby製のシンタックスハイライター"Rouge"

ちなみにv3.0からはハイライターが pygments からRougeに変更になっている。
pygments はPython製であるが、RougeはピュアRubyで書かれたシンタックスハイライターだ。60以上の言語をサポートしており、pygments 用に設計されたCSSに対応している。つまり出力には互換性がある。

まとめ

これからもJekyllを愛していきます。

We will continue to be loved now the Jekyll. Thanks.

参考サイト

五十川 洋平(Yohei Isokawa)

五十川 洋平(Yohei Isokawa)

フロントエンドエンジニア/面白法人カヤックなどのWeb制作会社に勤務したのち、故郷の新潟に戻り独立。JSフレームワークAngularやFirebase、Google Cloud Platformを使ったWebアプリ開発が得意。 また、Udemyのプログラミング解説の講師、writer.appの自主開発や上越TechMeetupの主催などを行っています。

プロフィール

©Copyright 2022 Yohei Isokawa All Rights Reserved.