Railsのdefaultsを使いこなそう!locale・format・ページング初期値をルーティングで設定する方法
生徒
「Railsのルーティングで、defaultsっていうのを見かけました。これは何に使うんですか?」
先生
「defaultsは、ルーティングに初期値を指定するための機能だよ。たとえば、言語(locale)やデータの形式(format)、ページ数なんかを決めておけるんだ。」
生徒
「初期値ってことは、何も指定しなかったときに自動で使われるってことですか?」
先生
「その通り!じゃあ、defaultsの基本的な使い方から順番に見ていこうか。」
1. defaultsとは?
defaults(デフォルツ)とは、Ruby on Railsのルーティングで パラメータの初期値をあらかじめ決めておくための仕組みです。 URLに値が書かれていない場合でも、Rails側で「この値を使う」と自動的に補ってくれます。
たとえば、言語を表すlocale、レスポンス形式のformat、
ページ番号を表すpageなどは、毎回URLに書かなくても
初期値が決まっていれば同じ動きをしてくれます。
これにより、URLが長くなりすぎるのを防げます。
# defaultsを使ったシンプルな例
get '/sample', to: 'samples#index', defaults: { page: 1 }
上の例では、/sampleにアクセスしたとき、
URLに?page=1と書かれていなくても、
params[:page]には自動的に1が入ります。
「指定がなければこの値」という考え方なので、初心者でも理解しやすいのが特徴です。
defaultsを使うことで、動作のブレを防ぎつつ、読みやすいURL設計ができるようになります。 まずは「ルーティングで初期値を決められる仕組み」と覚えておくと十分です。
2. locale(言語)の初期値を設定する
多言語対応しているRailsアプリケーションでは、 どの言語で画面を表示するか(locale)を切り替える仕組みがよく使われます。 URLに言語情報を含める方法もありますが、毎回指定するのは少し手間になります。
そこで役立つのがdefaultsです。
あらかじめ初期の言語を決めておけば、URLに何も書かれていなくても、
Railsが自動的にその言語を使って画面を表示してくれます。
# 日本語を初期言語に設定する例
get '/about', to: 'pages#about', defaults: { locale: 'ja' }
この設定では、/aboutにアクセスした時点で
params[:locale]にはjaが入ります。
そのため、URLに?locale=jaを付けなくても、
最初から日本語表示になるのがポイントです。
「特に指定がなければ日本語にしたい」といったケースでは、 defaultsを使うだけでシンプルに実現できます。 初心者の方は「言語の初期設定をルーティングで決められる」と覚えておくと理解しやすいでしょう。
3. format(形式)をJSONなどに固定する
formatとは、Railsがどの形式でデータを返すかを決めるためのパラメータです。 普段ブラウザで見る画面はHTML形式ですが、APIとして使う場合はJSON形式がよく利用されます。 formatを意識することで、「人が見る画面」か「プログラムが使うデータ」かを明確に分けられます。
API専用のURLを作る場合、毎回.jsonを付けるのは少し面倒です。
そこでdefaultsを使えば、URLがシンプルなまま、
最初からJSON形式で返すルートを作ることができます。
# JSON形式で返すAPI用ルートの例
get '/users/:id', to: 'users#show', defaults: { format: 'json' }
この設定をしておくと、/users/1のようにアクセスするだけで、
Railsは自動的に「JSONで返すルートだ」と判断します。
URLに.jsonを付けなくても良いため、APIのURLがすっきりします。
初心者の方は、「formatは返すデータの形を決めるもの」と考えると分かりやすいでしょう。 defaultsで形式を固定しておくと、API用ルーティングを安全かつ分かりやすく整理できます。
4. ページング(pagination)の初期ページを設定する
ページング(pagination)とは、たくさんのデータを一度に表示せず、 複数のページに分けて見せるための仕組みです。 商品一覧や記事一覧など、件数が多くなりがちな画面でよく使われます。
その際、「最初にどのページを表示するか」を決めておかないと、
params[:page]が空になり、処理が分かりにくくなることがあります。
そこでdefaultsを使って、初期ページをあらかじめ指定しておくと便利です。
# 一覧ページの初期ページを1に設定する例
get '/products', to: 'products#index', defaults: { page: 1 }
この設定をしておくと、/productsにアクセスした時点で
params[:page]には自動的に1が入ります。
URLに?page=1を付けなくても、常に1ページ目として扱われるのがポイントです。
初心者の方は、「ページ番号が省略されたら1ページ目にする」と考えると分かりやすいでしょう。 defaultsを使えば、ページング処理を安定して書けるようになります。
5. namespaceやscopeと組み合わせて使う
defaultsは、個別のルートだけでなく、namespaceやscopeといったグループ全体にも適用できます。
namespace :admin, defaults: { locale: 'ja', format: 'html' } do
resources :users
end
このようにすると、/admin/usersにアクセスしたとき、初期状態で日本語のHTMLページが表示されるようになります。
全体に共通の設定を適用したいときにとても便利です。
6. defaultsを使うときの注意点
便利なdefaultsですが、注意すべきポイントもあります。
- 明示的なパラメータ(URLに付いている値)があれば、そちらが優先されます
- 複数のdefaultsを指定するときは、ハッシュ形式でまとめます
- 誤った初期値を入れると、正しくルーティングされなくなる可能性があります
特にformatは、コントローラ側でrespond_toが適切に書かれている必要があるので、合わせて確認しましょう。
7. よく使うdefaultsのパターン一覧
ここでは、Railsのルーティングでよく使われるdefaultsのパターンを表にまとめてみました。
| 使用例 | 意味 |
|---|---|
defaults: { locale: 'ja' } |
日本語を初期言語に設定 |
defaults: { format: 'json' } |
レスポンスをJSON形式に |
defaults: { page: 1 } |
ページングの初期ページを1に |
defaults: { sort: 'new' } |
並び順を「新着」に初期化 |
このようにdefaultsを活用することで、URLがシンプルになり、意図した動作を安定して実現できます。