1. ローマ字スラッグとは?
日本語タイトルをアルファベット表記(ローマ字)に変換し、URL パスとして利用する手法です。つまり、記事の URL を数値 ID ではなく、タイトルに基づいた文字列(スラッグ)で生成します。
記事タイトル: 初めてのRailsガイド
↓
ローマ字スラッグ: /articles/hajimete-no-rails-gaido
2. ローマ字スラッグのメリット
- SNS共有: エンコードされず、URL がそのまま読める
- グローバル対応: 海外ユーザーも意味が想像しやすい
- SEO: 意味ある単語の組み合わせがランキング要因になる
- UX: コピペ時も見栄えが崩れない
3. Rails での実装手順(friendly_id
+ romaji
)
3.1 Gem をインストール & 初期設定
# Gem 追加
bundle add friendly_id romaji
# friendly_id の初期設定ファイルと history 用テーブルを生成
rails generate friendly_id
# articles テーブルに slug カラムを追加(UNIQUE & INDEX 付き)
rails g migration AddSlugToArticles slug:string:uniq:index
# マイグレーションを適用
rails db:migrate
3.2 モデル実装
# app/models/article.rb
require "romaji"
class Article < ApplicationRecord
extend FriendlyId
friendly_id :generate_slug, use: %i[slugged history]
validates :slug, presence: true, uniqueness: true
# タイトルが変わったら新しい slug を生成
def should_generate_new_friendly_id?
title_changed?
end
private
# ひらがな・カタカナ → ローマ字化し、全体を parameterize
def generate_slug
Romaji.kana2romaji(title).parameterize
end
end
3.3 ルーティング設定
# config/routes.rb
resources :articles, param: :slug
article_path(@article)
➜ /articles/hajimete-no-rails-gaido
4. 実運用のための Tips
課題 | 解決策 |
---|---|
同一タイトルの重複 |
friendly_id が --2 , --3 を自動付与して衝突回避 |
漢字混在タイトル |
Romaji.kana2romaji でカナのみ変換→parameterize 、または 手動 slug 入力欄 (slug_base) を用意 |
スラッグ変更による 404 |
use: %i[slugged history] で旧 URL → 新 URL を 301 リダイレクト |
Sitemap 対応 | sitemap.xml に slug ベース URL を出力し、Google Search Console へ送信 |
5. ベストプラクティス
- slug は 小文字 + ハイフン区切り を徹底(SEO に有利)
- タイトルが長すぎる場合は slug を手動で短縮
- 自動生成 + 手動上書き の二段構えにして運用を柔軟に(CMS 設計)
- CI/CD に slug 変更チェック を組み込み、リダイレクト漏れをテスト
6. まとめ
- ローマ字スラッグは 共有性・国際化・SEO を同時に向上させる王道手法
- Rails では
friendly_id
+romaji
+ 独自マイグレーションで簡単導入 - 漢字混在対策 と URL 永続性(history) を忘れずに、運用フローにテストを組み込む