Laravelのルーティング入門：Railsのroutes.rbとの違い

### はじめに

プログラミングを学び始めたばかりの方にとって、Webアプリケーションフレームワークのルーティングは重要な基礎です。本記事では、PHPの代表的なフレームワークであるLaravelのルーティングの基本を解説しながら、Ruby on Railsのroutes.rbとの違いにフォーカスして説明します。

### 1. Laravelのルーティングとは？
Laravelにおけるルーティングは、アプリケーションのURLとコントローラーの処理を紐づける仕組みです。ルーティングはroutes/web.phpファイルに定義します。以下は、基本的なルーティングの例です。


```php:php
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});
```

#### 主な特徴：
**メソッドベース**：``Route::get``、``Route::post``などHTTPメソッドごとにルートを定義。
**クロージャ対応**：簡単な処理なら匿名関数（クロージャ）内に直接記述可能。
**グループ化**：同じURLパターンやミドルウェアを使うルートをまとめられる。

公式ドキュメント：[Routing - Laravel](https://laravel.com/docs/11.x/routing)

:::note info
クロージャ
関数内で定義した特定の変数を参照し続けることで
関数が状態を持てる仕組みを指す。
これにより、定義した変数を外側のスコープでも使用できる。
詳しくは以下を参照。

[クロージャとは](https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures)
:::

### 2. Railsの``routes.rb``との違い
Railsでは、``config/routes.rb``ファイルを使ってルーティングを定義します。以下にRailsの基本的なルート定義例を示します。

```ruby:routes.rb
Rails.application.routes.draw do
  root "pages#home"
  get "/about", to: "pages#about"
end
```

#### Laravelとの主な違い：

| 特徴 | Laravel | Rails |
|:-----------|:------------|:------------|
|ルート定義の方法|HTTPメソッドごとに個別定義| `to:オプション`で個別にアクション指定|
|クロージャ| クロージャで直接処理可能| コントローラーを介さない処理は非推奨|
|ルートグループ|明示的に`Route::group`を使用|スコープや名前空間でまとめる|

### 3. 具体的な比較例
#### LaravelでのCRUDルーティング
Laravelでは、`Route::resource`を使うことでCRUDルートを生成できます。

```php:php
Route::resource('articles', ArticleController::class);
```

上記の1行で、以下のようなルートが自動生成されます。
| HTTPメソッド          | URL                              | アクション                                |
|---------------------|--------------------------------------|--------------------------------------|
|GET              | /articles                             | index                               |
|GET    | /articles/create     | create                          |
| POST      | /articles                    | store                       |
|GET    | /articles/{article}     | show                          |
|GET    | /articles/{article}/edit     | edit                          |
| PUT/PATCH   | /articles/{article}                   | update                   |
| DELETE | /articles/{article}       | destroy    |

#### RailsでのCRUDルーティング
Railsでは、resourcesメソッドを使用します。

```ruby
resources :articles
```
同様に、CRUD用のルートが自動生成されます。

| HTTPメソッド          | URL                              | アクション                                |
|---------------------|--------------------------------------|--------------------------------------|
|GET              | /articles                             | index                               |
|GET    | /articles/new     | new                         |
| POST      | /articles                    | create                       |
|GET    | /articles/id    | show                          |
|GET    | /articles/id/edit    | edit                         |
| PUT/PATCH   | /articles/id                  | update                   |
| DELETE | /articles/id      | destroy    |

### 4. ルーティングのベストプラクティス
公式ドキュメントを参照：LaravelやRailsは頻繁にアップデートされます。最新の公式情報を確認しましょう。
RESTful設計を意識：リソースに基づいた設計を心がけると、ルート管理が簡単になります。
ルートファイルを整理：グループ化や名前空間を活用して見通しの良いルーティングを目指しましょう。

### 5. まとめ
LaravelとRailsのルーティングはどちらも強力で柔軟ですが、それぞれに独自の特徴があります。両者を比較しながら使い方を学ぶことで、フレームワークの設計思想や特徴を深く理解できるでしょう。

### 参考記事
https://zenn.dev/takiko/articles/5400a6b0c6bd7d

https://qiita.com/st43/items/949747037030d8e171f4