目次
-
ルーティングの基本
1-1. 単一のルーティング設定
1-2. リソースベースのルーティング
1-3. リソースベースのルーティングに関するオプション -
ルーティングの応用
2-1. ネストされたリソース
2-2. 名前付きルート -
カスタムルーティング
3-1. メンバーとコレクション
3-2. コントローラーのアクション指定 -
ルーティングとSEO対策
4-1. フレンドリーURL
4-2. リダイレクト -
実践例:Railsアプリケーションでのルーティング設計
5-1. 認証機能のルーティング
5-2. APIのルーティング
5-3. 管理画面のルーティング
はじめに
本記事では、Railsルーティングの基本から応用テクニックまでを網羅的に解説いたします。
1. ルーティングの基本
Railsでは、config/routes.rbファイルにルーティング設定を行います。このファイルは、アプリケーションへのHTTPリクエストをどのコントローラーに振り分けるかを決定します。
1-1. 単一のルーティング設定
get 'articles', to: 'articles#index'
上記のコードは、GET /articlesのリクエストをArticlesControllerのindexアクションにルーティングします。
1-2. リソースベースのルーティング
Railsでは、resourcesを用いることで、RESTfulなルーティングを簡単に定義できます。
resources :articles
これにより、以下の7つのルートが自動的に生成されます。
-
index(一覧表示)
-
show(詳細表示)
-
new(新規作成フォーム)
-
create(新規作成)
-
edit(編集フォーム)
-
update(更新)
-
destroy(削除)
1-3. リソースベースのルーティングに関するオプション
resources :articles, only: [:index, :show]
resources :articles, except: [:destroy]
onlyとexceptを使用して、必要なルートだけを生成することが可能です。
2. ルーティングの応用
2-1. ネストされたリソース
ネストされたリソースは、親リソースに関連するリクエストに使用します。
resources :articles do
resources :comments
end
この設定により、/articles/:article_id/commentsのようなネストされたルートが生成されます。
2-2. 名前付きルート
特定のルートに名前をつけることで、パスヘルパーを活用できます。
get 'about', to: 'pages#about', as: 'about'
この設定により、about_pathやabout_urlというヘルパーが使用できるようになります。
3. カスタムルーティング
場合によっては、標準的なresourcesの設定だけでは不十分なことがあります。そんな時にはカスタムルーティングを活用します。
3-1. メンバーとコレクション
個別のリソースやコレクションに対してカスタムルーティングを追加できます。
resources :articles do
member do
get 'preview'
end
collection do
get 'search'
end
end
memberは特定のリソースに対するルートを、collectionは全体に対するルートを設定します。
3-2. コントローラーのアクション指定
異なるコントローラーやアクションにルーティングを振り分けることも可能です。
get 'dashboard', to: 'admin#dashboard'
4. ルーティングとSEO対策
RailsのルーティングはSEO対策にも影響を与えます。適切なURL設計は、検索エンジンのインデックスに好影響を与えるため、意識して設計する必要があります。
4-1. フレンドリーURL
意味のあるURLを設定することで、ユーザーにとっても分かりやすくなります。
get 'products/:id/:name', to: 'products#show'
4-2. リダイレクト
旧URLから新URLにリダイレクトすることで、SEO効果を維持できます。
get 'old_path', to: redirect('/new_path')
5. 実践例:Railsアプリケーションでのルーティング設計
5-1. 認証機能のルーティング
devise_for :users
Deviseを使った認証機能のルーティング設定はシンプルです。
5-2. APIのルーティング
API開発では、名前空間(namespace)を利用すると便利です。
namespace :api do
namespace :v1 do
resources :products
end
end
5-3. 管理画面のルーティング
namespace :admin do
resources :dashboard, only: [:index]
end
管理者用のパスを分けることで、セキュリティと整理が向上します。
まとめ
用途 | コード例 |
---|---|
単一ルート | get 'articles', to: 'articles#index’ |
リソースルート | resources :articles |
ネストされたリソース |
resources :articles do resources :comments end
|
名前付きルート | get 'about', to: 'pages#about', as: 'about’ |
カスタムメンバーアクション |
member do get 'preview' end
|
APIルーティング |
namespace :api do resources :products end
|