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

LaravelのThrottleミドルウェアでアクセス制限を実装する方法!初心者向け解説

LaravelのThrottleミドルウェアでアクセス制限を実装する方法
LaravelのThrottleミドルウェアでアクセス制限を実装する方法

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

生徒

「先生、LaravelでWebサイトやAPIへのアクセスを制限したい場合ってどうすればいいですか?」

先生

「Laravelでは、Throttleというミドルウェアを使うと簡単にアクセス制限を実装できます。」

生徒

「Throttleミドルウェアって何ですか?」

先生

「Throttleは、特定の時間内にリクエストできる回数を制限する仕組みです。たとえば1分間に100回までしかアクセスできないように設定できます。」

1. Throttleミドルウェアとは?

1. Throttleミドルウェアとは?
1. Throttleミドルウェアとは?

Throttleミドルウェアは、リクエストの回数を制御するためのLaravel組み込み機能です。英語で「throttle」は『スロットル』、つまり『制限』や『絞る』という意味です。悪意ある大量アクセスや誤操作による過剰なリクエストを防ぐことができます。

2. 基本的な使い方

2. 基本的な使い方
2. 基本的な使い方

Throttleミドルウェアはルートに指定して使います。書き方は簡単で、コロンでパラメータを渡します。例えば以下のように設定します。


Route::middleware('throttle:60,1')->group(function () {
    Route::get('/api/data', 'ApiController@data');
});

この例では、1分間に60回までのアクセスを許可しています。もし制限を超えるとHTTPステータス 429 Too Many Requests が返されます。

3. パラメータの意味

3. パラメータの意味
3. パラメータの意味

Throttleのパラメータは throttle:回数,分 の形式です。最初の数字が許可される回数、2つ目が時間の単位(分)です。

例えば throttle:100,1 は1分間に100回までアクセス可能、throttle:10,5 は5分間で10回までという意味です。

4. 個別ルートへの適用例

4. 個別ルートへの適用例
4. 個別ルートへの適用例

ログインページなど、アクセスが集中しやすい場所には個別にThrottleを設定できます。


Route::post('/login', 'AuthController@login')
     ->middleware('throttle:5,1');

この例では、1分間に5回までしかログインリクエストを受け付けません。これによりブルートフォース攻撃などを防ぐことができます。

5. APIルートへの適用例

5. APIルートへの適用例
5. APIルートへの適用例

API開発では、多くのユーザーが同時にアクセスすることが予想されます。Throttleミドルウェアでリクエスト制限をかけることで、サーバーの負荷を軽減できます。


Route::middleware('throttle:1000,1')->group(function () {
    Route::get('/api/user', 'ApiController@user');
    Route::get('/api/posts', 'ApiController@posts');
});

この設定では、1分間に1000回までのリクエストが可能です。用途に応じて回数を調整してください。

6. 注意点とベストプラクティス

6. 注意点とベストプラクティス
6. 注意点とベストプラクティス
  • Throttleミドルウェアはルート単位で設定できる
  • 複数のAPIやフォームに異なる回数制限を設定可能
  • パラメータの回数と時間を間違えないようにする
  • ユーザーごとの制限をかけたい場合はデフォルトでIPアドレスやユーザーIDを基準に制御される
  • 大量アクセスや不正リクエストからアプリケーションを守る基本的なセキュリティ対策として有効

7. 実践的な応用

7. 実践的な応用
7. 実践的な応用

例えば、無料ユーザーと有料ユーザーでアクセス制限を変えることも可能です。パラメータを調整するだけで簡単に柔軟な制御ができます。


Route::middleware('throttle:50,1')->group(function () {
    Route::get('/api/free', 'ApiController@free');
});

Route::middleware('throttle:500,1')->group(function () {
    Route::get('/api/premium', 'ApiController@premium');
});

この設定により、無料ユーザーは1分間50回まで、有料ユーザーは1分間500回までアクセス可能です。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)