Railsの多言語URL設計を完全ガイド!初心者でもわかるlocale・スラッグ・人間可読URL
生徒
「Railsで多言語対応する時、URLの設計ってどうすればいいんですか?」
先生
「それはとても大事な話ですね。Railsではlocaleという仕組みを使って、URLに言語を含める方法がありますよ。」
生徒
「URLに言語を含めるって、どんな感じですか?」
先生
「例えば/ja/productsや/en/productsのように、日本語と英語で切り替えができるようにするんです。人間が読んでもわかりやすいURLになりますよ!」
1. 多言語URLとは?
多言語URL(たげんごゆーあーるえる)とは、Webサイトを日本語や英語など複数の言語で表示するために、URLに言語コード(例:ja、en)を入れる設計のことです。例えば日本語なら/ja/products、英語なら/en/productsのようにします。
この設計をすることで、ユーザーが見ている言語が一目で分かり、SEO(検索エンジン最適化)にも効果的になります。
2. localeスコープでURLに言語を含める
Railsではscopeという機能を使って、URLに言語コードを入れることができます。これを「localeスコープ」と呼びます。以下はその実装例です。
Rails.application.routes.draw do
scope "(:locale)", locale: /ja|en/ do
resources :products
end
end
このように書くと、/ja/productsや/en/productsのようなURLが使えるようになります。
locale(ロケール)とは、「表示する言語や地域設定」のことです。
3. URLにスラッグを使って人間が読めるURLに
Railsでは、ID番号だけのURLではなく、スラッグ(slug)を使って/products/ruby-bookのように「人間が読めるURL」にすることもできます。
スラッグとは、記事のタイトルなどから生成した短くて分かりやすい英語の文字列です。
例えば、次のようにURLが変わります。
- 通常:
/products/1 - スラッグ使用:
/products/ruby-book
このようにすることで、SEOに強くなり、検索エンジンからも評価されやすくなります。
4. スラッグを使うためのルーティング設定
スラッグを使う場合、ルーティングでは通常のIDの代わりに:idの部分をスラッグで処理する必要があります。Railsでは特別な設定をしなくても、:idの部分にスラッグを渡せます。
get '/products/:id', to: 'products#show', as: 'product'
ただし、コントローラ側でIDではなくスラッグで検索するようにします。
def show
@product = Product.find_by(slug: params[:id])
end
5. localeとslugを組み合わせた多言語対応のURL例
多言語対応とスラッグを組み合わせると、以下のような人間が読みやすいURLが作れます。
/ja/products/ruby-book(日本語ページ)/en/products/ruby-book(英語ページ)
これにより、ユーザーにも分かりやすく、Googleなどの検索エンジンにも評価されやすくなります。
6. デフォルトの言語設定とリダイレクト制御
もしURLに言語コード(locale)がない場合、自動でリダイレクトして指定の言語に移動させたいこともあります。その場合はApplicationControllerでbefore_actionを使って制御します。
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
I18n(アイ・エイ・チー・エヌ)は、Railsの多言語対応をするための仕組みです。I18n.localeに値を設定することで、表示する言語を切り替えることができます。
7. URLの自動生成にもlocaleを含めるには?
Railsでlink_toなどのURL生成時にもlocaleを含めたい場合、default_url_optionsを設定しておくと便利です。
def default_url_options
{ locale: I18n.locale }
end
これにより、Railsが自動で生成するすべてのURLに、今の言語コードが含まれるようになります。
8. 多言語URLとSEOの関係
Googleの検索エンジンは、URLの構造を見てページの内容や言語を判断します。そのため、/ja/や/en/を含めることで、Googleにも「これは日本語ページです」「これは英語ページです」と伝えることができます。
また、スラッグを使ってページの内容がわかるURLにすることで、検索キーワードとマッチしやすくなり、検索結果にも表示されやすくなります。