Laravel：ControllerとRouteを定義して、GETリクエストで文字列を返してみた

## はじめに

本記事では、Mac上で簡易的なLaravelプロジェクトを作成し、コントローラーを通じてブラウザに"**頑張れ自分！**"と表示するまでの手順を解説します。

:::note info
**※すでにPHPとComposerがインストールされている前提で進めます。**
:::

内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。

## 書こうと思ったきっかけ

コントローラーとルーティングの関係や役割についての理解があいまいだったため、復習を兼ねて記事にまとめました。

個人的にとてもわかりやすく説明されていた動画だったので、おすすめです…！

**Laravelのコントローラーについて解説動画**

<iframe width="560" height="315" src="https://www.youtube.com/embed/yi-Rj1kX_Dk?si=s2d3ReU7us7u428K" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

**LaravelのRouting(ルーティング)について解説動画**

<iframe width="560" height="315" src="https://www.youtube.com/embed/QNDllvTs2Xo?si=wyW3T59LhmQtTHs-" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

個人的にPHPのキャッチアップをしたくて、初学者による備忘録として記録しています。

## コントローラーとは？

Laravelのコントローラーは、ブラウザなどから受け取ったリクエストに対して、どんな処理を行うかを記述する場所です。

以下、公式から引用します。

> ルートファイル内でリクエスト処理ロジックをすべてクロージャとして定義する代わりに、「コントローラー」クラスを使用してこれらの動作を整理することもできます。コントローラーは、関連するリクエスト処理ロジックを単一のクラスにグループ化できます。例えば、UserControllerユーザーの表示、作成、更新、削除など、ユーザーに関連するすべての受信リクエストを1つのクラスで処理できます。デフォルトでは、コントローラーはディレクトリに保存されますapp/Http/Controllers。

引用元：https://laravel.com/docs/12.x/controllers

例えば「`/hello` にアクセスされたら文字を表示する」といった振る舞いを定義します。コントローラーは、アプリの中核となるビジネスロジックやレスポンス処理を担います。

つまり、リクエスト処理を整理し、再利用しやすくするために、関連する処理をコントローラークラスにまとめられるのが、コントローラーの役割のようです！

## `routes/web.php`

このファイルは、リクエストされたURLに対してどのコントローラーのどのメソッドを実行するかを定義する場所です。

### 全体の流れ（図にすると）

```css
[ブラウザで /hello にアクセス]
          ↓
[ルーティングで HelloController@index を指定]
          ↓
[HelloController@index メソッドが実行される]
          ↓
[「頑張れ自分！」という文字列が返る]
          ↓
[画面に表示]
```

たとえば `/hello` にアクセスされたときに `HelloController@index` を呼び出すような設定をここに書きます。

```php
use App\Http\Controllers\HelloController;

Route::get('/hello', [HelloController::class, 'index']);
```

**参考文献**

https://qiita.com/te-k/items/cdadb5264c3e6b99f9f1

## 実際に動かしてみた

### ステップ1：必要なものを確認

以下のソフトウェアがインストールされていることを確認します：

| ソフトウェア   | 確認コマンド      | 備考              |
| -------- | ----------- | --------------- |
| PHP      | php -v      | 8.1以上を推奨        |
| Composer | composer -V | Laravelの依存管理に必要 |

**私の環境は、以下のような状況です**

![Screenshot 2025-06-04 at 22.01.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/de0f35ff-c91f-4d6f-9662-e03bc77b1730.png)

### ステップ2：Laravelプロジェクトを作成

```bash
cd ~/Desktop/macbook\ pro
composer create-project laravel/laravel myapp
```

### ステップ3：プロジェクトディレクトリに移動

```bash
cd myapp
```

**プロジェクトはこんな感じです**

```shell
 ~/Desktop/macbook pro/myapp   ll
total 632
drwxr-xr-x@  5 xxx  staff     160 Jun  4 22:12 app
-rwxr-xr-x@  1 xxx  staff     425 May 27 02:17 artisan
drwxr-xr-x@  5 xxx  staff     160 Jun  4 21:05 bootstrap
-rw-r--r--@  1 xxx  staff    2419 May 27 02:17 composer.json
-rw-r--r--@  1 xxx  staff  297706 Jun  4 21:04 composer.lock
drwxr-xr-x@ 12 xxx  staff     384 Jun  4 21:05 config
drwxr-xr-x@  7 xxx  staff     224 Jun  4 22:12 database
-rw-r--r--@  1 xxx  staff     414 May 27 02:17 package.json
-rw-r--r--@  1 xxx  staff    1173 May 27 02:17 phpunit.xml
drwxr-xr-x@  6 xxx  staff     192 Jun  4 21:05 public
-rw-r--r--@  1 xxx  staff    3929 May 27 02:17 README.md
drwxr-xr-x@  5 xxx  staff     160 Jun  4 21:05 resources
drwxr-xr-x@  4 xxx  staff     128 Jun  4 21:10 routes
drwxr-xr-x@  5 xxx  staff     160 Jun  4 21:18 storage
drwxr-xr-x@  5 xxx  staff     160 Jun  4 21:05 tests
drwxr-xr-x@ 41 xxx  staff    1312 Jun  4 21:18 vendor
-rw-r--r--@  1 xxx  staff     331 May 27 02:17 vite.config.js
```

### ステップ4：開発サーバーを起動

```bash
php artisan serve
```

ブラウザで `http://127.0.0.1:8000` にアクセスすると、Laravelの初期ページが表示されます。

**アクセス画面**

![Screenshot 2025-06-04 at 22.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0f35c11d-dd97-4cf9-a6d8-b360b2af9f23.png)

### ステップ5：コントローラーを作成し表示させる

#### コントローラー作成

```bash
php artisan make:controller HelloController
```

**問題なく作成されました**

![Screenshot 2025-06-04 at 22.07.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/cb7424b2-0816-402f-a49f-c390fb468117.png)


#### コントローラー編集

`app/Http/Controllers/HelloController.php` を以下のように編集：

```php
<?php

namespace App\Http\Controllers;

class HelloController extends Controller
{
    public function index()
    {
        return '頑張れ自分！';
    }
}
```

**コード解説**

- `HelloController` という名前の **コントローラーを定義** している  
- `index` という関数が **`/hello` のようなルートにアクセスされたときに呼び出される**  
- その関数では、**「頑張れ自分！」という文字列を返す**  

#### ルート設定

`routes/web.php` に以下を追加：

```php
use App\Http\Controllers\HelloController;

Route::get('/hello', [HelloController::class, 'index']);
```

**コード解説**

- `GET /hello` にアクセスされたときに、  
  **HelloController の `index` メソッドを実行するように設定**

- これによって **`/hello` にアクセスすると「頑張れ自分！」が表示される**

#### ブラウザで確認

`http://127.0.0.1:8000/hello` にアクセスすると、画面に「頑張れ自分！」と表示されます。

**アクセス画面**

![Screenshot 2025-06-04 at 22.12.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/fdaa5f07-4924-4ed7-8da5-a9b9f7d2d51c.png)

***なんだか少し元気が出てきました！！（笑）***

## まとめ

ここまで読んでいただき、ありがとうございました！

コントローラーとルーティングを組み合わせることで、アプリケーションのページ表示を柔軟に制御できることがわかりましたが、まだまだ学ぶべきことが多いと感じました。

:::note warn
**今回は簡単な表示から始めましたが、今後はビューやデータベース操作などにも取り組み、アウトプットしていきたいと思います。**
:::

次回は、Bladeテンプレートを使ったHTML表示や、フォーム入力の処理にもチャレンジしていく予定です…！

## 参考文献

https://qiita.com/shizen-shin/items/2ddb0748cdca1867440c

https://qiita.com/yukibe/items/7bab0d596ae9a0930f18

https://blog.cloudsmith.co.jp/2022/03/430/