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 で推奨されている解決策は以下の通りです。
-
erubi のインストール
まず、Dockerfile 内で erubi gem のバージョン 1.13 をインストールします。これにより、最新の erubi が利用できるようになります。 -
コード中の参照の置換
narou の内部コード(/usr/local/bundle/gems/narou-3.9.1/lib/web/appserver.rb
)で、tilt/erubis
という記述をtilt/erubi
に置換します。sed コマンドを用いることで、ビルド時に自動的に置換処理を行います。
具体的な Dockerfile の一部は以下のようになります。
この設定により、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 による置換処理を追加することで、問題を回避することができました。
この手法を利用して、同様のエラーに悩む方がスムーズに問題を解決できることを願っています。