Windows11 にて、2022年4月5日現在の最新版である Jekyll 4.2.2 をインストールし、ローカルで
Jekyll の Edition テーマを用いたサイトをビルドしようとしたところ、エラーが出てビルドできませんでした。
Google で検索しながら、トラブルシューティングを行いましたが、最終的に修正できるまで時間がかかったため、この記事で対処方法をまとめておきます。
この記事でエラーの詳細を記述しているのは、同じエラーに遭遇しているにもかかわらず、問題の解決方法が分からずに、
teratail で質問しても正解が得られなかったり、暫定的な処置をしていたりするので、エラーメッセージで検索して、この記事に辿りつくようにするためです。
また、同じ Ruby 製の静的サイトジェネレーターである Middleman でも同じエラーが出ているようなので、この記事の対処方法が役に立つと思います。
Jekyll 用 Edition テーマとは
Edition テーマは、CloudCannon 社が作成した Jekyll 用のテンプレートで、製品やサービスのドキュメントに使われることを想定しています。
GitHub の CloudCannon/edition-jekyll-template で公開されていますが、このテーマをテンプレートリポジトリとしてリポジトリを作成することができます。
今回、 GitHub で、このリポジトリをテンプレートリポジトリとして自分のリモートリポジトリを作成した上で、このリモートリポジトリをローカルにクローンし、このリポジトリを Jekyll でビルドします。
動作環境
今回の記事では、Jekyll に必要な Ruby と Bundler のインストール方法の詳細は、割愛します。別途、記事にする予定です。
ローカルでビルドし、表示を確認する方法
上述の CloudCannon/edition-jekyll-template をテンプレートリポジトリとして作成したリポジトリの下に移動し、Bundler で依存関係をインストールします。
$ bundle install
Gemfile に gem を追加した場合は、上記のコマンドを実行して、追加した gem をインストールします。
インストールが正常に終了したら、以下のコマンド実行により、Bundler を通して jekyll
コマンドを実行することにより、(時間がかかりますが) 正しいバージョンを使用してサーバーを起動することができます。
$ bundle exec jekyll serve --trace
注意 (Note):
--trace
フラグを付けてjekyll serve
を実行しているのは、Jekyll 4.2.2 のコマンド実行において、--trace
フラグを付けて実行するように、というメッセージが表示されるためです。
ブラウザで http://localhost:4000/
を開くと、ビルドされたサイトが表示されます。
上記のビルドで発生するエラーとその対策
上記のビルドとサーバー起動で遭遇するエラーとその対処方法を説明していきます。
1. Jekyll の互換性エラー
エラーメッセージ
C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-1.16.4/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
上記のエラーメッセージが大量に出たり、下記のエラーメッセージが表示されます。
bstractMemory.c: In function 'memory_get_array_of_string':
AbstractMemory.c:456:13: warning: 'rbimpl_tainted_str_new_cstr' is deprecated:
taintedness turned out to be a wrong idea. [-Wdeprecated-declarations]
456 | rb_ary_push(retVal, (strptr == NULL ? Qnil :
rb_tainted_str_new2(strptr)));
| ^~~~~~~~~~~
In file included from G:/Ruby31-x64/include/ruby-3.1.0/ruby/intern.h:57,
from G:/Ruby31-x64/include/ruby-3.1.0/ruby/ruby.h:192,
from G:/Ruby31-x64/include/ruby-3.1.0/ruby.h:38,
from AbstractMemory.c:43:
エラーの原因
上記のエラーメッセージで deprecated
と表示されているように、現在、
利用している Ruby 3.1.1 で非推奨となっている関数が使用されているためにエラーが発生しています。
これは、このリポジトリの Gemfile の指定の Jekyll のバージョンが古いために発生しています。
ですので、以下のように Jekyll のバージョン指定を削除して、最新の gem を使うようにします。
修正した後は、bundle update
で gem を更新します。
修正前の Gemfile
source 'https://rubygems.org'
gem 'jekyll', '3.8.4'
group :jekyll_plugins do
gem 'jekyll-feed', '0.11.0'
gem 'jekyll-seo-tag', '2.5.0'
gem 'jekyll-sitemap', '1.2.0'
end
修正後の Gemfile
source 'https://rubygems.org'
gem 'jekyll'
group :jekyll_plugins do
gem 'jekyll-feed'
gem 'jekyll-seo-tag'
gem 'jekyll-sitemap'
end
2. tzinfo のエラー
エラーメッセージ
bundle install
実行で、以下のエラーが発生します。
Configuration file: G:/Jekyll/axios-docs-ja/_config.yml
Dependency Error: Yikes! It looks like you don't have tzinfo or one of its dependencies installed. In order to use Jekyll as currently configured, you'll need to install this gem. If you've run Jekyll with `bundle exec`, ensure that you have included the tzinfo gem in your Gemfile as well. The full error message from Ruby is: 'cannot load such file -- tzinfo' If you run into trouble, you can find helpful resources at https://jekyllrb.com/help/!
エラーの原因
Windows に Jekyll をインストールする場合、資料1 に書かれているように、タイムゾーン用の 'tzinfo' gem の追加が必要です。
Gemfile 修正方法
資料1 に書かれている通り、上記の「修正後の Gemfile」の end
の上に、以下の行を挿入します。
gem 'tzinfo', '~> 1.2'
3. tzinfo-data のエラー
エラーメッセージ
bundle exec jekyll serve --trace
の実行で、以下のエラーメッセージが表示されます。
C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/tzinfo-1.2.9/lib/tzinfo/data_source.rb:182:in `rescue in create_default_data_source': No source of timezone data could be found. (TZInfo::DataSourceNotFound)
エラーの原因
'tzinfo' gem に必要な 'tzinfo-data' gem がインストールされていないため、エラーが発生しています。
資料4 に書かれているように、Gemfile の指定に gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
を追加します。
4. tzinfo-data のエラー2
エラーメッセージ
bundle install
で、以下のエラーメッセージが表示されます。
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32`.
エラーの原因
資料5 の記事によると、解決方法は 4つあるそうで、1番目の解決方法である , platforms: [:mingw, :mswin, :x64_mingw]
を削除する方法を採用します。
5. wdm のエラー
エラーメッセージ
bundle exec jekyll serve --trace
の実行で、以下のエラーメッセージが表示されます。
Please add the following to your Gemfile to avoid polling for changes:
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
Auto-regeneration: enabled for 'G:/Jekyll/axios-docs-ja'
G:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/jekyll-4.2.2/lib/jekyll/commands/serve/servlet.rb:3:in `require': cannot load such file -- webrick (LoadError)
from G:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/jekyll-4.2.2/lib/jekyll/commands/serve/servlet.rb:3:in `<top (required)>
エラーの原因
'wdm' gem は、Windows Directory Monitor (WDM) の略で、Windows においてファイル更新を監視するためのライブラリです。
資料1 には、Jekyll サーバーでファイル変更の監視を行うために、以下の行を追加するように書かれています。
gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
しかし、上記のエラーメッセージに書かれているように、gem 'wdm', '>= 0.1.0' if Gem.win_platform?
を追加することにします。
なお、資料6 には、代わりに下記の行を追加するようにしていますが、現状ではメッセージの通りの指定を採用しています。
gem 'wdm', '>= 0.1.0', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
6. webrick のエラー
エラーメッセージ
bundle exec jekyll server
で Web サーバを起動しようとすると、以下のエラーメッセージが表示される。
G:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/jekyll-4.2.2/lib/jekyll/commands/serve/servlet.rb:3:in `require': cannot load such file -- webrick (LoadError)
エラーの原因
資料7 の記事によると、'webrick' も Gemfile に追加する必要があるそうです。
また、資料7 では、下記のエラーメッセージが表示されるそうです。
bundler: failed to load command: jekyll, `require': cannot load such file -- webrick (LoadError)
後から気付いたことですが、Jekyll 日本語訳 から Jekyll 本家サイト が更新されており、
資料3 に 'webrick' に関する記述が追加されていました。
資料3 のコマンド実行ではなく、Gemfile に gem 'webrick'
の行を追加します。
結論
追加が必要な gem
gem | 現在の最新版 |
---|---|
tzinfo | 2.0.4 |
tzinfo-data | 1.2022.1 |
wdm | 0.1.1 |
webrick | 1.7.0 |
備考
日本語訳の 資料1 から本家サイトの 資料2 では、以下の行を Gemfile に追加するように書かれています。
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end
しかし、資料5 の解決方法1、「プラットフォーム関係なく tzinfo-data のタイムゾーンを参照する設定」を採用したため、
プラットフォーム指定は行わず、バージョン指定のみ採用することにしました。
'tzinfo' の指定を修正した後に、bundle update
を実行しておきます。
最終的な Edition テーマの Gemfile
source 'https://rubygems.org'
gem 'jekyll'
group :jekyll_plugins do
gem 'jekyll-feed'
gem 'jekyll-seo-tag'
gem 'jekyll-sitemap'
gem 'tzinfo', ">= 1", "< 3"
gem 'tzinfo-data'
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
gem 'webrick'
end
参考記事
資料1
Jekyll 日本語訳 の Jekyll on Windows
資料2
Jekyll 本家サイト の Jekyll on Windows は、上記の日本語訳から更新されており、修正方法が下記になっています。
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end
資料3
Jekyll 本家サイト の Quickstart には、日本語訳にはない、下記の記述が追加されています。
警告 (Warning): Ruby バージョン 3.0.0 以降を使用している場合、手順5 が失敗することがあります。 この場合、
bundle add webrick
コマンドを実行し、依存関係に webrick を追加することで解決できます。
資料4
【Rails】TZInfo::DataSourceNotFoundエラーが発生する
資料5
bundle installする際のtzinfo-dataのwarningがウザい
資料6
Ruby on Rails チュートリアル Windows での実施時の困ったメモ