0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Railsでローマ字スラッグを実装する

Posted at

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. ベストプラクティス

  1. slug は 小文字 + ハイフン区切り を徹底(SEO に有利)
  2. タイトルが長すぎる場合は slug を手動で短縮
  3. 自動生成 + 手動上書き の二段構えにして運用を柔軟に(CMS 設計)
  4. CI/CD に slug 変更チェック を組み込み、リダイレクト漏れをテスト

6. まとめ

  • ローマ字スラッグは 共有性・国際化・SEO を同時に向上させる王道手法
  • Rails では friendly_id + romaji + 独自マイグレーションで簡単導入
  • 漢字混在対策URL 永続性(history) を忘れずに、運用フローにテストを組み込む
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?