カテゴリ: Rails 更新日: 2026/01/05

Railsのredirectとmatchを完全ガイド!初心者でもわかるルーティングの安全な書き方

redirect と match:リダイレクト・ワイルドカードの安全な使い方
redirect と match:リダイレクト・ワイルドカードの安全な使い方

先生と生徒の会話形式で理解しよう

生徒

「ルーティングで、古いURLを新しいURLに変えることってできますか?」

先生

「はい、Railsではredirectを使うことで、URLの転送が簡単にできます。」

生徒

「じゃあ、いろんなパターンに対応するルートを一括で設定することは?」

先生

「そのときはmatchワイルドカードを使うと便利ですよ。ただし、安全に使うコツもあるので詳しく見ていきましょう!」

1. redirectとは?リダイレクトの基本

1. redirectとは?リダイレクトの基本
1. redirectとは?リダイレクトの基本

Railsのルーティングでは、古いURLを新しいURLに転送(リダイレクト)するためにredirectを使います。たとえば、昔のページ構成から新しいURLに変わったときなどに便利です。

実際の例を見てみましょう。


get '/old-about', to: redirect('/about')

このように書くことで、「/old-about」にアクセスした人を自動的に「/about」ページに転送(リダイレクト)してくれます。

2. redirectの活用例:外部サイトやパラメータ付きURLへ

2. redirectの活用例:外部サイトやパラメータ付きURLへ
2. redirectの活用例:外部サイトやパラメータ付きURLへ

リダイレクトは、外部サイトに案内したいときにも使えます。


get '/google', to: redirect('https://www.google.com')

また、パラメータを受け取って柔軟に転送することもできます。


get '/user/:id', to: redirect('/members/%{id}')

%{id}のように書くと、URLの中の動的な部分を新しいURLに埋め込めるのが特徴です。

3. matchとは?柔軟にルーティングを定義

3. matchとは?柔軟にルーティングを定義
3. matchとは?柔軟にルーティングを定義

matchは、GETやPOSTなどのHTTPメソッドを指定してルーティングできる便利な方法です。複数のメソッドに同じパスを対応させたいときに使います。


match '/contact', to: 'pages#contact', via: [:get, :post]

このように書くと、「/contact」パスにGETとPOSTの両方でアクセスできます。たとえば、お問い合わせフォームの表示と送信の両方に対応できます。

4. ワイルドカードの使い方と注意点

4. ワイルドカードの使い方と注意点
4. ワイルドカードの使い方と注意点

*を使うことで、どんなパスにもマッチさせる「ワイルドカード」のルートを定義できます。


get '*path', to: redirect('/404')

このコードは、存在しないURLにアクセスした場合に「/404」ページへ転送します。

ただし、使い方を間違えると全てのリクエストをキャッチしてしまうため、必ず一番下に書くようにしてください。そうしないと、他の正常なルートよりも先に実行されてしまいます。

5. redirectとmatchを組み合わせた実践例

5. redirectとmatchを組み合わせた実践例
5. redirectとmatchを組み合わせた実践例

例えば、以下のようにすると「/home」へアクセスしたときに、「/top」にリダイレクトできますし、GET・POSTのどちらでも処理を受けられます。


match '/home', to: redirect('/top'), via: [:get, :post]

これは、古いURLから新しいページにスムーズに誘導しつつ、柔軟なアクセス方法を許可したいときに便利です。

6. HTTPメソッドとmatchの指定の違い

6. HTTPメソッドとmatchの指定の違い
6. HTTPメソッドとmatchの指定の違い

matchでは、HTTPメソッドをviaで必ず明示的に指定する必要があります。GET、POST、PATCH、PUT、DELETEのようなメソッドが指定できます。

メソッドを指定しないとセキュリティ上のリスクがあるため、Railsはデフォルトでmatchの使用に制限をかけています。

7. リダイレクトのステータスコードを変更したいとき

7. リダイレクトのステータスコードを変更したいとき
7. リダイレクトのステータスコードを変更したいとき

redirectは、通常は「301(恒久的リダイレクト)」を使いますが、必要に応じて「302(一時的なリダイレクト)」に変えることもできます。


get '/old', to: redirect(status: 302, path: '/new')

検索エンジン対策として、URLの変更が一時的な場合は302にすると良いでしょう。

8. SEOにも効果的なリダイレクト設計のコツ

8. SEOにも効果的なリダイレクト設計のコツ
8. SEOにも効果的なリダイレクト設計のコツ

検索エンジン最適化(SEO)を意識する場合、redirectで301リダイレクトを正しく設定することは非常に重要です。古いページの評価を新しいページに引き継ぐことができるからです。

URLの設計変更時や、ルーティングの統合・統廃合の際にはredirectを使ってしっかりと誘導してあげましょう。

9. 使いすぎに注意!matchは便利だが慎重に

9. 使いすぎに注意!matchは便利だが慎重に
9. 使いすぎに注意!matchは便利だが慎重に

matchを多用すると、ルーティングが複雑になりやすく、ルールが分かりづらくなる場合があります。

基本はresourcesやget/postなどを使い、それでも対応できないときに限ってmatchを使うようにしましょう。

また、セキュリティの面でも、via: :allなどの指定は避けるようにしてください。意図しないリクエストを許可してしまうリスクがあるためです。

まとめ

まとめ
まとめ

redirectとmatchを理解して安全で分かりやすいRailsルーティングを設計しよう

この記事では、Railsのルーティング機能の中でも特に重要なredirectmatchについて、基本的な使い方から実践的な注意点まで詳しく学んできました。Railsでアプリケーションを運用していく中では、URL構成の変更やページの統合、古いURLへのアクセス対応などが必ず発生します。そのような場面で、redirectとmatchを正しく理解して使えるかどうかは、アプリ全体の品質や安全性に大きく影響します。

redirectは、古いURLから新しいURLへユーザーを自動的に転送するための仕組みです。ページ構成を変更した場合でも、過去のURLにアクセスしてきたユーザーを迷わせることなく、正しいページへ案内できます。また、外部サイトへの転送や、URLパラメータを引き継いだリダイレクトも簡単に実装できるため、運用フェーズでは欠かせない存在です。特に、恒久的なURL変更では301リダイレクトを正しく設定することで、評価やアクセスの流れを維持しやすくなります。

一方でmatchは、複数のHTTPメソッドに対応したルーティングをまとめて定義できる柔軟な方法です。フォーム画面の表示と送信を同じURLで処理したい場合や、特殊な要件に対応したい場合に役立ちます。ただし、その自由度の高さゆえに、使いすぎるとルーティングの見通しが悪くなり、意図しないアクセスを許可してしまうリスクもあります。そのため、viaでHTTPメソッドを明示的に指定し、必要最小限の範囲で使うことが重要です。

ワイルドカードを使ったルーティングも便利ですが、全てのリクエストを捕まえてしまう可能性があるため、必ずルーティング定義の一番下に書くというルールを守る必要があります。404ページへの誘導など、目的を限定して使うことで、安全で分かりやすいルーティング設計につながります。

Railsのルーティングは、単に動作すれば良いというものではなく、「誰が見ても理解しやすいか」「将来の変更に耐えられるか」という視点がとても大切です。redirectとmatchを適切に使い分けることで、URL設計が整理され、結果として保守性の高いRailsアプリケーションを作ることができます。

まとめとしてのサンプルルーティング

最後に、今回学んだredirectとmatchを組み合わせたシンプルなサンプルルーティングを確認してみましょう。古いURLへの対応と、柔軟なアクセス方法を両立しています。


# routes.rb

# 古いURLから新しいURLへ転送
get '/old-top', to: redirect('/top')

# GETとPOSTの両方に対応
match '/contact', to: 'pages#contact', via: [:get, :post]

# 存在しないURLは404ページへ
get '*path', to: redirect('/404')

/old-top    → /top にリダイレクト
/contact    → GET・POSTどちらでも処理
その他      → /404 にリダイレクト

このようにルーティングを整理することで、ユーザーにとっても分かりやすく、開発者にとっても管理しやすい構成になります。redirectとmatchは便利な機能だからこそ、役割を理解した上で使うことが大切です。

先生と生徒の振り返り会話

生徒

「redirectって、ただページを飛ばすだけじゃなくて、アプリを安全に運用するためにも重要なんですね。」

先生

「その通りです。URL変更は避けられないので、正しいリダイレクト設計がとても大切になります。」

生徒

「matchも便利ですが、使いすぎると分かりにくくなる理由がよく分かりました。」

先生

「基本はgetやresourcesを使い、どうしても必要なときだけmatchを使うのがRailsらしい書き方ですね。」

生徒

「これからは、ルーティングを書くときに安全性と分かりやすさを意識して設計してみます。」

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.2
Java&Spring記事人気No2
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
データベース
データベース正規化とは?初心者でもわかるデータ重複を防ぐSQL設計の基本