Railsの開発において、同じデザインや構造を持つ画面要素を効率的に管理するための機能として部分テンプレートがあります。
しかし、その作成や管理、引数の渡し方については、初めての方には少し戸惑う部分もあるでしょう。
この記事では、部分テンプレートの基本的な使い方から、より高度な活用方法までを詳しく解説します。
- 部分テンプレートのディレクトリやファイル名について
- 部分テンプレートに引数(変数)を渡す方法
- 部分テンプレートにおける省略記法
- 部分テンプレート利用時の注意点
部分テンプレートとは?
部分テンプレートは、共通のHTML構造を一つのファイルにまとめ、必要なページからそのファイルを呼び出して表示する仕組みです。
これにより、コードの再利用性が向上し、開発の効率化やメンテナンスの容易さが実現します。
部分テンプレートの具体的な利用方法について、次のセクションから詳しく見ていきましょう。
部分テンプレートのディレクトリとファイル名
部分テンプレートのファイルを格納するディレクトリ名には決まったルールはなく、ファイル名にはルールがあります。
部分テンプレートのディレクトリの命名
部分テンプレートを格納するディレクトリでよく見かける命名としてsharedとpartialの2つがあります。
部分テンプレートを格納するディレクトリ名はこの命名でなければ駄目という厳密なルールはありませんが、下記の2つの理由からsharedと言うディレクトリ名を使用するのが良いと思います。
- ログイン機能のgemで人気が高いdeviseがsharedを使用している。
- Railsガイドの3.4 パーシャル(部分テンプレート)を使用するの項目でもsharedを使用している。
また1点補足としてsharedに入れる部分テンプレートは主にヘッダー、フッター、ナビゲーションバーなど、ほぼ全てのページで共通で使う部品を格納するケースが多いです。
逆に特定の機能だけにしか使わないテンプレート、例えば投稿画面でしか利用しない部分テンプレートであれば、下記の様にpostsディレクトリの中に入れてしまったほうが、どの様な画面で利用している部分テンプレートなのかが明確になるので良いです。
- app/views/posts/new.html.erb
- app/views/posts/edit.html.erb
- app/views/posts/_form.html.erb ← newとeditで利用する部分テンプレート
部分テンプレートのファイル名
部分テンプレートのファイル名は基本的には自由に決められますが、先頭に「_」を付けると言うルールがあります。
このルールを守らないとせっかく部分テンプレートを作っても呼び出すことが出来ないので注意しましょう
部分テンプレートの書き方・呼び出し方
各viewファイルから部分テンプレートを呼び出すためにはrenderというメソッドを利用します。
下記のコードはapp/views/usersのディレクトリに部分テンプレートである_form.html.erbがあり、その内容をnew.html.erbで読み込む場合の例になります。
app/views/users/new.html.erb
<%= render partial: 'form' %>
今回で言うと部分テンプレートのファイル名は_form.html.erbですが、formと記述しています。
部分テンプレートの省略記法
1つ前の項目で説明した方法よりも、よく利用されているのが下記の省略記法のパターンです。
app/views/users/new.html.erb
<%= render 'form' %>
このpartialを記述しない省略記法の方が実務でもよく使われるので積極的に活用していきましょう。
部分テンプレートに引数(変数)を渡す方法
部分テンプレートには引数を渡すことも可能です。
通常の記法で引数を渡す場合
まずは省略をしていない記法からです。
下記の例ではform(部分テンプレート)に対して@userというインスタンス変数をuserとして渡しています。
app/views/users/new.html.erb
<%= render partial: 'form', locals: { user: @user } %>
partialを省略せずに記述する場合は、localsというメソッドを記述して変数を{ }の中に記述します。
省略記法で引数を渡す場合
省略記法で引数を渡す場合はlocalsは記述出来ないので、下記の様になります。
app/views/users/new.html.erb
<%= render 'form', user: @user %>
引数を渡す場合でもこちらの省略記法の方がよく使われるので、この書き方に慣れておきましょう。
インスタンス変数は部分テンプレート内で参照しない
Controllerから返されたインスタンス変数を活用すれば、部分テンプレートに引数を渡す必要はないのでは?と思った方もいるかもしれません。
しかし部分テンプレート内でインスタンス変数を使ってしまうことにより、Controller側の処理に依存してしまい、再利用性が損なわれてしまいます。
部分テンプレート内ではインスタンス変数を使わず、引数としてインスタンス変数の値を渡すようにしましょう
部分テンプレートを使用して再利用性を高めよう
部分テンプレートを活用する事でViewのコードのメンテナンス性を向上させる事が出来ます。
どの様なコードを部分テンプレートとして切り出すべきかというのは若干の慣れが必要になりますが、実務でも必須のスキルとなるので、これを機会に部分テンプレートを実際に使って書き方だけでも慣れておきましょう。
- Ruby初心者に向けた学習ロードマップ!挫折しないための学習方法!
- 【初心者向け】MacでRailsを使えるようにするための環境構築方法を徹底解説!
- 【初心者向け】RailsでMySQLを使うための手順をコマンド付きで解説!
- Railsが難しい理由を現役エンジニアが解説!学習効率を上げるには○○を高めるべき!
- Rails初心者に向けたコマンドまとめ!newやgenerateコマンド、簡単に使える便利関数を紹介!
- Railsでルーティングを作成!ネストやパラメーターを取得する方法も解説!
- Railsの部分テンプレートの書き方をコード付きで解説!引数の渡し方やディレクトリ名の悩みとはおさらば!
- Railsでリンクヘルパー(link_to)を使ってサクッとリンクを生成する方法を解説!