Rubyのテンプレートエンジンをerbからslimに変更する際に変えた2つのこと

割と簡単だけど、きれいなhtmlじゃないとうまく変換してくれなかった

そもそもslimとは

Slim is a template language whose goal is reduce the syntax to the essential parts without becoming cryptic.

って書いてあるように、可読性をある程度担保して、本質的なsyntax(タグ的なところ?)を減らすような目的で作られたテンプレート言語らしい。

で、本題。

最初からslimを使ってコーディングしていればいいんだけど、すでにerbを使ってしまっている場合、1からslimに変換するとちょっとキツイ。。そしてそんなことはさせないよというのがslimで、すでに公式でhtml2slimっていう変換ツールを提供してくれているではないか!
ということで、それを使って既存のerbファイルを変換してみた。

# インストールはgemで
gem install html2slim

使い方を見てもらってもわかる通り、これをインストールすると、html2slimとerb2slimコマンドを使うことができるようになる。

これを見ながら試しに1ファイルを変換してみる

erb2slim app/views/index/index.html.erb app/views/index/index.html.slim

できたー
でもこれ全ファイル1つずつやるの??
ってそんなことはなくて、実際は1ファイルずつやらずにRubyのワンライナーとかを使ってやるのが賢いですよね。

既存のerbファイルをslimファイルに変換

# 既存のerbファイルをslimファイルに変換して、erbファイルは物理削除する
for file in app/views/devise/**/*.erb; do erb2slim $file ${file%erb}slim && rm $file; done

できたー

と、思ったら、なんかエラーが出て表示されない。。
問題の箇所を見てみたら、htmlファイルにjavascriptが記載されていたり、文法的に抜けがあったりしたところがうまく変換されなかったみたいで、そこを修正したら無事動作しましたー

ちなみにデフォルトの設定だとslimってテンプレートとして認識されないですよね

はい。railsを使っている場合には、gemのインストールと設定の変更が必要ですよねー

slim-railsをインストールする

# Gemfileにslim-railsを追加
gem 'slim-rails'

application.rbでテンプレートエンジンを指定してあげる

# config/application.rb
class Application < Rails::Application
  config.generators.template_engine = :slim
end