※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
haml-rails導入エラーの解消について
rails7にhamlを導入しようとしたエラーが出たので、備忘録として残します。
まずhamlについて前回の記事はこちら
上記の記事ではhamlitを利用していますが、今回はhaml-railsを入れます。
Gemfileに以下を追加
gem 'haml-rails', '~> 2.1'
インストールする
gem install haml-rails
対象のhtmlファイルをhamlに変換するため、erb2hamlをインストールします。
gem 'erb2haml'
bundle install
このあと、問題のエラーが出ます。
hamlに変換しようとしたらエラーが発生しました。
bundle exec rake haml:replace_erbs
Looking for ERB files to convert to Haml...
rake aborted!
NoMethodError: undefined method `exists?' for FileTest:Module (NoMethodError)
unless FileTest.exists?(haml_path)
^^^^^^^^
Did you mean? exist?
どうやら、どこかにFileTest.exists?
という記述があるらしく、それが良くないと。
FileTest.exists?
という古い書き方をしているコードを探し、FileTest.exist?
に修正しないといけないらしい。
VScodeで検索しても出てこない。
そのため、こちらの記事に大変助けていただきました。
以下のコマンドで問題のファイルを探します。
grep -rn "FileTest.exists?" $(bundle show erb2haml)
「grep -rn
」は「ディレクトリ以下の全ファイルから、指定した文字列を行番号付きで検索する」ためのコマンド
Railsに限らず、ソースコード検索で広く使われているらしい
「grep -rn」は、LinuxやMacのコマンドラインで使うgrepコマンドのオプション付き実行例です。Railsのコード検索でよく使われます。
コマンド | 用途 |
---|---|
grep | ファイル内の文字列を検索するコマンド |
-r | 再帰的(recursive)にディレクトリ配下すべてのファイルを検索 |
-n | 検索結果に行番号を表示 |
VScodeでは出てこなかったのに、どこにいるんや・・
/Users/●●●/.rbenv/versions/3.2.5/lib/ruby/gems/3.2.0/gems/erb2haml-0.1.5/lib/erb2haml/railties/erb2haml.rake:29: unless FileTest.exists?(haml_path)
/Users/●●●/.rbenv/versions/3.2.5/lib/ruby/gems/3.2.0/gems/erb2haml-0.1.5/lib/erb2haml/railties/erb2haml.rake:59: unless FileTest.exists?(haml_path)
このファイルにアクセスして、コードを修正します。
nano /Users/●●●/.rbenv/versions/3.2.5/lib/ruby/gems/3.2.0/gems/erb2haml-0.1.5/lib/erb2haml/railties/erb2haml.rake
「nano
」は、ターミナルでnanoエディタを使ってターミナル上でファイルを開くコマンド(ここで編集できる)
コマンド | 用途 |
---|---|
nano | ターミナル上でファイルを編集できる |
実行すると、以下の画面に切り替わる

2箇所のFileTest.exists?
をFileTest.exist?
に修正する
nanoエディタでファイルを編集した後の保存・終了方法は、以下のとおり↓
- 保存したいなら「^O WriteOut」する
- 「File Name to write 〜」と表示されたらEnterで、そのまま保存される
(別名で保存したい場合は新しいファイル名を入力してEnter) - 編集を終了するときは「^X Exit」する
- 変更があれば「保存しますか?」と聞かれる
→ Y(Yes)を押して保存
→ N(No)で保存せずに終了
すると、元のターミナル画面に戻る

無事、hamlファイルに変換された!