0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マイグレーション、ルーティング、コントローラー - Laravel学習 #1

0
Last updated at Posted at 2026-05-18

Laravelの基礎であり、毎回忘れがちなのに重要なキーワードをまとめています。

内容

  • マイグレーション
  • ルーティング
  • コントローラー

マイグレーション

ドキュメント

DBの作成や編集、削除などを管理する方法=バージョン管理。
誰が、いつ、どういった目的でテーブルの作成、編集、削除を行なったかがわかる。

手順

1. マイグレーションファイルの作成
2. 編集
3. 実行

1. マイグレーションファイルの作成

ターミナル
php argisan make:migration create_{テーブル名}_table

database/migrationsディレクトリ内にマイグレーションファイルを生成

2. マイグレーションファイルの編集

database/migrations/日付_create_{テーブル名}_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{

    public function up(): void
    {
      /*作成の処理を記述*/
      // Schema::createの場合はテーブルを新規作成
      Schema::create('table_new(テーブル名)', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email');
        $table->timestamps();
      });

      // Schema::tableの場合は既存テーブルの更新
      Schema::table('table_old'){
        $table->string('email');
      }

      // Schema::rename($from, $to);でリネームできる
      Schema::rename('table_old', 'table_new');

      // Schema::dropかSchema::dropIfExistsで既存テーブルの削除
      Schema::drop('users');
      Schema::dropIfExists('users');

      // 既存カラムのタイプと属性変更 ->change()
      Schema::table('users', function (Blueprint $table) {
        $table->string('name', 50)->change();
      });

      // カラム名のリネーム ->renameColumn
      Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('from', 'to');
      });

      // カラムの削除 ->dropColumn
      Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('votes');
      })
      // 複数カラムの削除
      Schema::table('users', function (Blueprint $table) {
         $table->dropColumn(['votes', 'avatar', 'location']);
      });
    }

    public function down(): void
    {
      /*削除の処理を記述*/
      Schema::drop('table_new');
    }
};

よく使うデータ型

3. マイグレーションファイルの実行

ターミナル
php artisan migrate

これでテーブルの生成が完了する

その他のマイグレーションコマンド

これまでどのマイグレーションが実行されているか確認

php artisan migrate:status

マイグレーションを実行せず、実行するSQL文の確認

php artisan migrate:rollback --pretend

直前のマイグレーションをロールバック

php artisan migrate:rollback

--step=5 などをつけることで指定した数だけロールバックできる

全てロールバック

php argisan migrate:reset

全てロールバック+全マイグレーション実行

php artisan migrate:refresh

テーブルを削除し。前マイグレーション実行

php artisan migrate:fresh

書くマイグレーションファイルの状態表示

php argisan migtate:status

ルーティング

ドキュメント

参考

特定のアドレスにアクセスした際に、何のHTTPリクエストを要求されたら、どの処理を実行するかといった「ルート」を管理、設定する仕組み。

Laravelには、デフォルトでWeb用とAPI用の2つのルートがあり、それぞれweb.phpとapi.phpを使用。

基本的な書き方

web.php
Route::get('ディレクトリ名', function () {
    // 処理したい内容
    return 'Hello World';
});

ルートパラメータ

Route::get('posts/{id}', function ($id) {
    return $id.'番のブログ投稿記事';
});

このように書き、 /posts/10にアクセスすると、10番のブログ投稿記事と表示される。
urlから必要なパラメーターを取り出して表示することができる。

以下のような複数指定もできる。

Route::get('posts/{postId}/comments/{commentId}', function ($postId, $commentId) {
    return $postId.'番のブログ投稿記事の'.$commentId.'番目のコメント';
});

ビューを返す

以下のように記述することで、resources/viewsに作成したファイルを画面に表示できる。

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

return view('表示させたいviewファイル名')

また、以下のように配列を指定することもできる。

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

コントローラを指定する

Route::get('/users', [UserController::class, 'index']);

functionの部分にコントローラーを書く。

※コントローラーについては後述するので、ここでは「こう言う書き方がある」程度の認識でOK。

名前付きルート

Route::get('/users', [UserController::class, 'index'])->name('users.index');

->name('users.index') のように名前をつけておくことで、このルートを呼び出すのが簡単になる。

ミドルウェア

ミドルウェアとは、「中間に入る処理」のこと。
例えばユーザーログイン認証で、ログインしていない場合、ルートにアクセスできないようにできる。

Route::get('/users', [UserController::class, 'index'])->middleware('auth');

Route::middleware('auth')->group(function () {
  // ここにルート定義
});

リダイレクト

Route::redirect('/here', '/there');

「このURLにアクセスしたら、こっちにリダイレクトさせて」が簡単にできる。

コマンド

ルートリスト

php artisan route:list

アプリケーションで定義しているすべてのルートの概要を簡単に確認できる。

以下のように-vをつけることで、ミドルウェアの表示も可能。

php artisan route:list -v

コントローラー

ドキュメント

参考

web.phpなどにメソッド(関数)を記述していくよりも、コントローラーを使用することでメソッドを整理して利用しやすくなる。
関係するリクエスト処理ロジックを単一のクラスにグループ化できる。

たとえば、「UserControllerクラスは、ユーザーの表示、作成、更新、削除など、ユーザーに関連するすべての受信リクエストを処理する」のようにできる。

  • ルーティングで受け取った情報をモデルやビューで処理するように指示すること
  • モデルで受け取った情報をビューファイルで読み取れるように処理すること

作成方法

ターミナル
php artisan make:controller コントローラー名

app/Http/Controllers/コントローラー名.phpで生成される

任意のディレクトリに入れたい場合

ターミナル
php artisan make:controller Test/HelloController

app/Http/Controllers/Test/HelloController.phpが出来上がる

基本のコントローラー

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class コントローラー名 extends Controller
{
  // 
}
  • namespace
    名前空間。これをつけることで同じメソッド(関数)名でも、namespaceが異なれば別のメソッドとして扱える。
  • use 名前空間(namespace)
    指定した名前空間をインポートする

※Illuminate
vender > laravel > framework > src > Illuminateにある。
Illuminate\Http\RequestにはLaravelでデフォルトで使える便利なメソッドがいろいろ用意してある。

テキストを表示させてみる

<?php

namespace App\Http\Controllers;


class コントローラー名 extends Controller
{
    public function メソッド名()
    {
        $text = "これはコントローラのテストです。";

        //top.blade.phpに$textという変数を渡す場合
        return view('top', ['view_text' => $text]);
    }
}

view(ビューファイル名,ビューに渡したいもの)とすることでコントローラからビューへ指示を出すことができる。

web.php
Route::get('/URL','コントローラー名@メソッド名');

Route::get('/test','TestController@index');
Route::get('/test', [TestController::class, 'index']);

web.phpに上記のように記述することで、リクエストURLをルートで受け取ったときに、どのコントローラで処理するかを定める。
例えばURLが/testの場合、TestControllerのindexメソッドを実行できる。

blade.php
<p>{{ $view_text }}</p>

次回はViewで使用するコンポーネントとslotについてまとめています

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?