初心者でも理解できるRailsのルーティング概要と使い方 

## はじめに
お久しぶりです、かずです。
最近railsを業務で使っていて、routesについて理解するのが難しかったので自分なりにまとめてみました。

初学者でも理解できるように書きました:laughing:
よかったら参考にしてください(´・ω・｀)

## 誰に向けた記事か

この記事では、Railsにおけるルーティングの基本と使い方について初心者向けに説明します。
Railsでアプリケーションを開発する際には、ルーティングが非常に重要な役割を担っています。
**Railsでのルーティングの概要や基本的な使い方を理解すること**を目的としています。

## routes ってなに？

まずは概要を説明しますー
へーと思ってもらえればOK:wink:

Railsのroutesは、Webアプリケーションにおいて、
**ユーザーからのリクエストに対してどのコントローラーのどのアクションを実行するかを指定する仕組み**です。

routesを設定することで、ユーザーからのリクエストを特定のアクションに結びつけることができます。
また、routesはリクエストに渡されるパラメーターを解析し、アプリケーション内のデータを特定するために使用されます。

具体的には、routesを使って、URLとアプリケーション内の特定のアクションを関連付けることができます。
例えば、`/articles`というURLにアクセスがあった場合には`ArticlesController`の`index`アクションを実行するように設定することができます。

routesの設定はroutes.rbというファイルに記述されます。
設定方法は簡単で、HTTPメソッドやURLパス、コントローラーとアクションを指定するだけです。


## routes っでどこ？
railsって大体こんな感じのファイル構成なんすよ
んで、configの中にあるんすよ

細かい話は置いといて、まぁここにあるんだなぁって思ってくだされ:sleeping:
```:railsのファイル構成
myapp/
├── app/
│   ├── assets/
│   ├── controllers/
│   ├── views/
│   ├── helpers/
│   ├── mailers/
│   └── models/
├── bin/
├── config/
│   ├── routes.rb ★ここだよ★
│   ├── application.rb
│   ├── environment.rb
│   ├── database.yml
│   └── ... (他の設定ファイル)
├── db/
├── lib/
├── log/
├── public/
├── storage/
├── test/
├── tmp/
└── vendor/
```

## 各ファイルの役割

参考までに各ファイルの役割を簡単に整理しました。
ここもすっ飛ばしてもOKっすｗ


>app/: アプリケーションの主要なコードが含まれます。
>> assets/: 画像、JavaScript、CSSなどの静的ファイルが含まれます。
controllers/: ルーティングに従ってアクションを定義するコントローラーのファイルが含まれます。
views/: ユーザーに表示されるビューのファイルが含まれます。
helpers/: ビューで使用するヘルパーメソッドのファイルが含まれます。
mailers/: メールを送信するためのアクションが定義されたメイラーのファイルが含まれます。
models/: データベースのテーブルと相互作用するモデルのファイルが含まれます。

> bin/: Railsコマンドの実行可能ファイルが含まれます。

> config/: アプリケーションの設定ファイルが含まれます。
>> <font color="red">**routes.rb: アプリケーションのURLを処理するためのルーティング情報が含まれます。**</font>
application.rb: アプリケーションの設定が含まれます。
environment.rb: アプリケーションの実行環境に応じた設定が含まれます。
database.yml: データベースの接続情報が含まれます。

> db/: データベースに関するファイルが含まれます。migrateディレクトリにはデータベースのマイグレーションファイルがあります。
lib/: アプリケーションのモジュール化された共通処理が含まれます。
log/: アプリケーションのログファイルが含まれます。
public/: アプリケーションのパブリックなファイルが含まれます。
storage/: アップロードされたファイルなど、ストレージに関連するファイルが含まれます。
test/: テストに関するファイルが含まれます。
tmp/: 一時ファイルが含まれます。
vendor/: サードパーティ製ライブラリなどのファイルが含まれます。

## Railsでのルーティングとは

Webアプリケーションにおいて、
ユーザーがアクセスするURLと、そのURLに対応する処理を結びつけることが必要です。
この`URLと処理の結びつけを定義することを「ルーティング」`と呼びます。

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

#### HTTPメソッド
Railsでは、HTTPメソッド（GET、POST、PATCH、DELETEなど）によって、ルーティングの定義が変わります。
HTTPメソッドは、以下のように記述します。

```ruby:ルーティングの定義方法
Rails.application.routes.draw do
  get '/posts', to: 'posts#index'
  post '/posts', to: 'posts#create'
  patch '/posts/:id', to: 'posts#update'
  delete '/posts/:id', to: 'posts#destroy'
end
```

上記の例では、

GETリクエストに /posts が、PostsController の index アクションに、
POSTリクエストに /posts が、PostsController の create アクションに、
PATCHリクエストに /posts/:id（:id は投稿ID）が、PostsController の update アクションに、
DELETEリクエストに /posts/:id が、PostsController の destroy アクションに対応しています。

## routes.rbファイルの書き方

routes.rbファイルには、get、post、put、patch、deleteといったHTTPメソッドに対応するルーティングを設定することができます。
また、rootやresourcesといった特殊なルーティングもあります。

さっきのと似たような例を示します。

```ruby:routes.rbファイルの書き方

Rails.application.routes.draw do
  root 'home#index'
  get 'posts', to: 'posts#index'
  get 'posts/new', to: 'posts#new'
  post 'posts', to: 'posts#create'
  get 'posts/:id', to: 'posts#show'
  get 'posts/:id/edit', to: 'posts#edit'
  patch 'posts/:id', to: 'posts#update'
  delete 'posts/:id', to: 'posts#destroy'
end
```

この例では、`root`にアクセスされた場合に`homeコントローラーのindex`アクションを呼び出し、
`/posts`にアクセスされた場合に`postsコントローラーのindexアクション`を呼び出す、といったルーティングを定義しています。

また、`/posts/new`にアクセスされた場合に`postsコントローラーのnewアクション`を呼び出し、
フォームを表示するように設定しています。
`/postsにPOSTメソッド`でリクエストが送信された場合には、`postsコントローラーのcreateアクション`が呼び出され、
フォームから受け取ったデータをデータベースに保存します。

このように、routes.rbファイルにルーティングを定義することで、
HTTPリクエストを正しいコントローラーのアクションにルーティングすることができます。

## ルーティングにおけるHTTPメソッド

主なHTTPメソッドには、GET、POST、PATCH、PUT、DELETEがあります。

> GET：リソースの取得を行う際に使用されます。
通常、Webページを表示するために使用されます。
このHTTPメソッドでのリクエストは、URLにパラメータを追加する形でデータを送信します。

>POST：リソースの作成や更新を行う際に使用されます。
たとえば、フォームに入力されたデータを送信する際に使用されます。
このHTTPメソッドでのリクエストは、HTTPボディにデータを含めて送信します。

>PATCH：リソースの部分更新を行う際に使用されます。
PUTメソッドと似たような使い方をしますが、PUTメソッドがリソース全体を更新するのに対して、
PATCHメソッドはリソースの一部分だけを更新します。

>PUT：リソースの作成や更新を行う際に使用されます。
POSTメソッドと似たような使い方をしますが、PUTメソッドは同じリソースに対して複数回のリクエストを送信しても、
常に同じ結果が得られることが保証されます。

>DELETE：リソースの削除を行う際に使用されます。
このHTTPメソッドでのリクエストは、通常、特定のIDを指定してリソースを削除することができます。

>HTTPメソッドは、Railsのルーティングにおいても重要な役割を担っています。
routes.rbファイルにHTTPメソッドを指定することで、
そのURLにアクセスされた際にどのコントローラーのどのアクションを呼び出すかを設定することができます。

## まとめ

Railsのroutesは、**Webアプリケーションのページにアクセスしたときに、どのページを表示するかを決めるルールブック**みたいなものです。
ルールブックには、アクセスしたURLによってどのコントローラーとアクションを使うかが書いてあります。
たとえば、「/articles」というURLにアクセスがあったら、
「ArticlesController」の「indexアクション」を使って、記事の一覧を表示するという設定ができます。
routesの設定は「routes.rb」というファイルに書かれています。

## おわりに
最後まで読んでいただきありがとうございます！
よかったらいいね！ツイッターのフォローお願いします！:triumph:

https://twitter.com/takazu_engineer