ブログ環境を jekyll 4.0.0 にアップデートした

#tech

このブログ構築に使っている jekyll を 4.0.0 にアップデートした。地味に長旅だったので流れを書いておく。

redcarpet を kramdown に

jekyll 4.0.0 から redcarpet が使えなくなり、記事のコンパイルが失敗するようになった。どうやらあまりメンテされていないのが原因でサポートを外されたらしい。

そもそも何でこれを使ってたんだっけレベルだったので、迷わず標準の kramdown に変えた。

Remove support for Redcarpet · Issue #6981 · jekyll/jekyll · GitHub

Ruby 環境を 2.6.5 に

jekyll 4.0.0 では Ruby 2.3 が非サポートになっている。元々2.5 系を使ってたのでそのまま使えはしたんだけど、この機会に環境をアップデートした。

rbenv で 2.6.5 をインストールして動かそうとすると以下のエラーに。

$ rbenv install 2.6.5
Downloading openssl-1.1.1d.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
Installing openssl-1.1.1d...

BUILD FAILED (OS X 10.15.2 using ruby-build 20191205)

Inspect or clean up the working tree at /var/folders/pz/y077p0k15rs71wdhzgvx4p_r0000gn/T/ruby-build.20200126000617.32087.OcxzSq
Results logged to /var/folders/pz/y077p0k15rs71wdhzgvx4p_r0000gn/T/ruby-build.20200126000617.32087.log

Last 10 log lines:
      _s_server_main in s_server.o
  "_verify_stateless_cookie_callback", referenced from:
      _s_server_main in s_server.o
  "_wait_for_async", referenced from:
      _s_client_main in s_client.o
      _sv_body in s_server.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [apps/openssl] Error 1
make: *** [all] Error 2

調べると openssl のインストール先を RUBY_CONFIGURE_OPTS で指定する必要があるらしいという事が分かったが、これに似た問題の解決法は brew info パッケージ名 でヒントが載っていることを知った。リンカエラーが出たらまずパッケージ情報を見ると良いかもしれない。

ruby-build パッケージには以下のような注記があった。

$ brew info ruby-build
ruby-build: stable 20191225, HEAD
…

To link Rubies to Homebrew's OpenSSL 1.1 (which is upgraded) add the following
to your ~/.zshrc:
  export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"

Note: this may interfere with building old versions of Ruby (e.g <2.4) that use
OpenSSL <1.1.

これに従い rbenv を実行すると正常に Ruby 2.6.5 がインストールできた。

RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)" rbenv install 2.6.5

jekyll-sass-converter の実行時エラー

Sass を使ってないのに jekyll 本体が jekyll-sass-converter に依存している関係でハマった。どうやらこれが更に依存している sassc-ruby の新しいバージョンで問題が起こっているようだった。

2.2.0 causes LoadError · Issue #146 · sass/sassc-ruby

bundler: failed to load command: jekyll (/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/bin/jekyll)
LoadError: Could not open library '/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle': dlopen(/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle, 5): no suitable image found.  Did find:
        /Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle: load commands not in a segment
        /Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle: stat() failed with errno=25
  /Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/ffi-1.12.1/lib/ffi/library.rb:145:in `block in ffi_lib'
...

解決方法がなかなか見つからずウームという感じだったが、以下のスレッドで同じ問題にハマっていた人を見つけて解決。

gem uninstall sassc
gem install sassc —user-install
gem install sassc — —disable-march-tune-native

Jekyll fails on macOS Catalina - Help - Jekyll Talk


以上の流れでめでたく 4.0.0 でブログが生成できるようになった。