Railsルーティング入門

## 目次
[はじめに](#はじめに)  
1. [ルーティングの基本](#1-ルーティングの基本)  
   1-1. [単一のルーティング設定](#1-1-単一のルーティング設定)  
   1-2. [リソースベースのルーティング](#1-2-リソースベースのルーティング)  
   1-3. [リソースベースのルーティングに関するオプション](#1-3-リソースベースのルーティングに関するオプション)  
2. [ルーティングの応用](#2-ルーティングの応用)  
   2-1. [ネストされたリソース](#2-1-ネストされたリソース)  
   2-2. [名前付きルート](#2-2-名前付きルート)  
3. [カスタムルーティング](#3-カスタムルーティング)  
   3-1. [メンバーとコレクション](#3-1-メンバーとコレクション)  
   3-2. [コントローラーのアクション指定](#3-2-コントローラーのアクション指定)  
4. [ルーティングとSEO対策](#4-ルーティングとseo対策)  
   4-1. [フレンドリーURL](#4-1-フレンドリーurl)  
   4-2. [リダイレクト](#4-2-リダイレクト)  
5. [実践例：Railsアプリケーションでのルーティング設計](#5-実践例railsアプリケーションでのルーティング設計)  
   5-1. [認証機能のルーティング](#5-1-認証機能のルーティング)  
   5-2. [APIのルーティング](#5-2-apiのルーティング)  
   5-3. [管理画面のルーティング](#5-3-管理画面のルーティング)  

[まとめ](#まとめ)

## はじめに

本記事では、Railsルーティングの基本から応用テクニックまでを網羅的に解説いたします。

 ## 1. ルーティングの基本

Railsでは、config/routes.rbファイルにルーティング設定を行います。このファイルは、アプリケーションへのHTTPリクエストをどのコントローラーに振り分けるかを決定します。

### 1-1. 単一のルーティング設定

```ruby
get 'articles', to: 'articles#index'
```

上記のコードは、GET /articlesのリクエストをArticlesControllerのindexアクションにルーティングします。

### 1-2. リソースベースのルーティング

Railsでは、resourcesを用いることで、RESTfulなルーティングを簡単に定義できます。

```ruby
resources :articles
```

これにより、以下の7つのルートが自動的に生成されます。

* index（一覧表示）

* show（詳細表示）

* new（新規作成フォーム）

* create（新規作成）

* edit（編集フォーム）

* update（更新）

* destroy（削除）

### 1-3. リソースベースのルーティングに関するオプション

```ruby
resources :articles, only: [:index, :show]
resources :articles, except: [:destroy]
```

onlyとexceptを使用して、必要なルートだけを生成することが可能です。

## 2. ルーティングの応用

### 2-1. ネストされたリソース

ネストされたリソースは、親リソースに関連するリクエストに使用します。

```ruby
resources :articles do
  resources :comments
end
```

この設定により、/articles/:article_id/commentsのようなネストされたルートが生成されます。

### 2-2. 名前付きルート

特定のルートに名前をつけることで、パスヘルパーを活用できます。

```ruby
get 'about', to: 'pages#about', as: 'about'
```

この設定により、about_pathやabout_urlというヘルパーが使用できるようになります。

## 3. カスタムルーティング

場合によっては、標準的なresourcesの設定だけでは不十分なことがあります。そんな時にはカスタムルーティングを活用します。

### 3-1. メンバーとコレクション

個別のリソースやコレクションに対してカスタムルーティングを追加できます。

```ruby
resources :articles do
  member do
    get 'preview'
  end
  collection do
    get 'search'
  end
end
```

memberは特定のリソースに対するルートを、collectionは全体に対するルートを設定します。

### 3-2. コントローラーのアクション指定

異なるコントローラーやアクションにルーティングを振り分けることも可能です。

```ruby
get 'dashboard', to: 'admin#dashboard'
```

## 4. ルーティングとSEO対策

RailsのルーティングはSEO対策にも影響を与えます。適切なURL設計は、検索エンジンのインデックスに好影響を与えるため、意識して設計する必要があります。

### 4-1. フレンドリーURL

意味のあるURLを設定することで、ユーザーにとっても分かりやすくなります。

```ruby
get 'products/:id/:name', to: 'products#show'
```

### 4-2. リダイレクト

旧URLから新URLにリダイレクトすることで、SEO効果を維持できます。

```ruby
get 'old_path', to: redirect('/new_path')
```

## 5. 実践例：Railsアプリケーションでのルーティング設計

### 5-1. 認証機能のルーティング

```ruby
devise_for :users
```

Deviseを使った認証機能のルーティング設定はシンプルです。

### 5-2. APIのルーティング

API開発では、名前空間（namespace）を利用すると便利です。

```ruby
namespace :api do
  namespace :v1 do
    resources :products
  end
end
```

### 5-3. 管理画面のルーティング

```ruby
namespace :admin do
  resources :dashboard, only: [:index]
end
```

管理者用のパスを分けることで、セキュリティと整理が向上します。

## まとめ

| 用途 | コード例 |
| --- | --- |
| 単一ルート | `get 'articles', to: 'articles#index’` |
| リソースルート | `resources :articles` |
| ネストされたリソース | `resources :articles do`<br>&nbsp;&nbsp;&nbsp;&nbsp;`resources :comments`<br>`end` |
| 名前付きルート | `get 'about', to: 'pages#about', as: 'about’` |
| カスタムメンバーアクション | `member do`<br>&nbsp;&nbsp;&nbsp;&nbsp;`get 'preview'`<br>`end` |
| APIルーティング | `namespace :api do`<br>&nbsp;&nbsp;&nbsp;&nbsp;`resources :products`<br>`end` |