RailsプロジェクトにSlimを導入する
はじめに
まず、Railsを使用してシンプルなトップページを作成する方法を紹介します。
トップページ作成後にSlimというテンプレートエンジンを導入して簡潔で読みやすいコードを記述する方法について説明します。
コントローラー作成
まずRailsのコントローラーを作成します。コントローラーはビューとモデルの間で通信を仲介する役割を果たしています。<アクション名>
はオプションなのでなくても問題ないです。
bundle exec rails generate <コントローラ名> <アクション名>
# generateは短縮できます
bundle exec rails g <コントローラ名> <アクション名>
今回はトップページを作成して表示したいので、top
という名前のコントローラーと、その中にindex
アクションを作成します。
bundle exec rails generate controller top index
上記のコマンドを行うと、次の基本的なMVCの構造などが自動的に生成されます!
├── app
│ ├── controllers
│ │ └── top_controller.rb
│ ├── views
│ │ └── top
│ │ └── index.html.erb
│ └── helpers
│ └── top_helper.rb
├── test
│ └── controllers
│ └── top_controller_test.rb
├── config
│ └── routes.rb # 「get 'top/index'」が追記されます
└── app
└── assets
└── stylesheets
└── top.scss
-
コントローラの生成:
app/controllers
ディレクトリにTopController
という名前のコントローラファイル (top_controller.rb
) が生成され、指定したアクション(今回はindex
)がデフォルトで作成されているはずです。 -
ルーティングの追加: コントローラとアクションに対応するルーティングが
config/routes.rb
に自動で追加されます。 -
ビューの生成:
app/views/top
ディレクトリが作成され、その中にindex.html.erb
という名前のビューファイルが生成されます。
bundle exec rails generate <コントローラ名> <アクション名>
に--skip-routes
などのオプションを付けると、指定したファイルが自動作成されなくなります。
ルーティング設定
ルーティングを設定して、トップページにアクセスできるようにします。
Rails.application.routes.draw do
root 'top#index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
トップページにアクセスする
Railsサーバーを起動して、
bundle exec rails server
http://localhost:3000/ にアクセスしてトップページ(app/views/top/index.html.erb
の内容)が表示されるか確認してください。
Slim
Slimは、Railsで使われる軽量なHTMLテンプレートエンジンであり、簡潔で読みやすいコードを記述することができます。
Slimのインストール
Slimをインストールするために下記を追加してください。
gem 'slim-rails'
インストールを行なってください。
bundle install
slim形式のビューファイルの作成
touch app/views/top/index.html.slim
下記の内容に編集してください。
h1 SlimのTop#index
p Find me in app/views/top/index.html.slim
サーバーを再起動し、ブラウザで再度アクセスしてみてください。
bundle exec rails server
先ほどのままだと思います。
これは下記のように同じディレクトリ内に.erb
形式のファイルとslim
形式のファイルがある場合は、.erb
形式のファイルが優先して読み込まれるためです。
app
└── views
└── top
├── index.html.erb
└── index.html.slim
.erb
形式のファイルを削除してみてください。
rm app/views/top/index.html.erb
.slim
形式のファイルの内容が表示されているのがわかると思います。
.erb形式のファイルを.slim形式のファイルに変換する方法
GitHubリポジトリから直接Gemをインストールするための指定をしています。
gem "html2slim", github: "slim-template/html2slim"
手動で作成しているindex.html.slim
を削除して下記を実行してみてください。
bundle exec html2slim app/views/top/index.html.erb app/views/top/index.html.slim
app/views/top/index.html.slim
が作成されていることがわかると思います。
今後コマンドを使用してビューファイルを作成する場合は、.erb
ではなく.slim
ファイルが作成されるようになります。
ちなみにgem "html2slim"
のような書き方では、HTMLからSlimへの変換ツールであるerb2slim
とhtml2slim
は、hpricot
という古いライブラリに依存しているので、Ruby 3.3.3
では、これらのツールはhpricot
の非互換性のため使用できませんでした。
hpricot
のリポジトリを確認したところ、最終更新から11年が経過しており、「適切なメンテナーが不在のため、hpricotを終了する。」という記載がありました。
終わりに
何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉
Discussion