【rails7】haml-railsの導入

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

haml-rails導入エラーの解消について

rails7にhamlを導入しようとしたエラーが出たので、備忘録として残します。

まずhamlについて前回の記事はこちら


haml-railsをインストール

上記の記事ではhamlitを利用していますが、今回はhaml-railsを入れます。

Gemfileに以下を追加

gem 'haml-rails', '~> 2.1'

インストールする

gem install haml-rails

erb2hamlをインストール

対象のhtmlファイルをhamlに変換するため、erb2hamlをインストールします。

gem 'erb2haml'
bundle install

このあと、問題のエラーが出ます。


bundle exec rake haml:replace_erbs

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?という記述があるらしく、それが良くないと。

chatGPTに翻訳も兼ねて聞いてみた

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検索結果に行番号を表示

2つのファイルがあぶり出される

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エディタでファイルを編集した後の保存・終了方法は、以下のとおり↓

  1. 保存したいなら「^O WriteOut」する
  2. 「File Name to write 〜」と表示されたらEnterで、そのまま保存される
    (別名で保存したい場合は新しいファイル名を入力してEnter
  3. 編集を終了するときは「^X Exit」する
  4. 変更があれば「保存しますか?」と聞かれる
    → Y(Yes)を押して保存
    → N(No)で保存せずに終了

すると、元のターミナル画面に戻る


bundle exec rake haml:replace_erbsを実行

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