narou-docker 起動時に発生する tilt/erubis エラーの解決策

narou-docker 起動時に発生する tilt/erubis エラーの解決策

narou-docker を利用している際、Dockerfile のビルド中に以下のようなエラーが発生しました。

internal:/usr/local/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:127:in `require': cannot load such file -- tilt/erubis (LoadError)

本記事では、このエラーの原因と GitHub Issue #443 に掲載されている解決策について解説します。

エラーの背景

narou 3.9.1の内部では、テンプレートエンジンとして tilt を利用しています。従来、tilt/erubis というモジュールが存在していましたが、最新の環境や gem のアップデートにより、erubis の代わりに erubi を利用するケースが増えてきています。

今回のエラーは、narou が tilt/erubis を require しているにも関わらず、該当するファイルが存在しないことが原因です。tiltがerubisのサポートを外したため、narou-docker の 起動時にこのような問題が発生していました。

解決策

GitHub Issue #443 で推奨されている解決策は以下の通りです。

  1. erubi のインストール
    まず、Dockerfile 内で erubi gem のバージョン 1.13 をインストールします。これにより、最新の erubi が利用できるようになります。

  2. コード中の参照の置換
    narou の内部コード(/usr/local/bundle/gems/narou-3.9.1/lib/web/appserver.rb)で、tilt/erubis という記述を tilt/erubi に置換します。sed コマンドを用いることで、ビルド時に自動的に置換処理を行います。

具体的な Dockerfile の一部は以下のようになります。

dockerfile
# Dockerfile の一部例
&& gem install narou -v ${NAROU_VERSION} --no-document \
&& RUN gem install erubi -v 1.13 --no-document \
&& sed -ie "s/tilt\/erubis/tilt\/erubi/g" /usr/local/bundle/gems/narou-3.9.1/lib/web/appserver.rb

この設定により、narou が参照するテンプレートエンジンのモジュールが正しく置き換えられ、エラーが解消されることを確認しています。

解説と考察

  • なぜ erubi か?
    erubi は erubis の後継として開発が進められており、パフォーマンスやセキュリティ面でも改善されています。narou のコードを修正することで、最新の環境に合わせた互換性を持たせることができます。

  • sed コマンドの利用
    Dockerfile 内で sed コマンドを使用することで、narou のソースコードをビルド時に自動的に修正する点がポイントです。これにより、手動での修正やパッチ適用の手間を省くことが可能となります。

  • 今後の展望
    本件は GitHub Issue #443 でも議論されており、developブランチにも修正がマージされているため、今後のアップデートで公式に対応されると思われます。プロジェクトの更新情報を随時確認することが推奨されます。

まとめ

narou-docker の Dockerfile ビルド時に発生する tilt/erubis エラーは、最新のテンプレートエンジン erubi との互換性の問題に起因していました。
GitHub Issue #443 に掲載された解決策を参考に、Dockerfile に erubi のインストールと sed による置換処理を追加することで、問題を回避することができました。

この手法を利用して、同様のエラーに悩む方がスムーズに問題を解決できることを願っています。

2025-04-20サーバ&テクノロジ

Posted by 納戸 工房