LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
生徒
「LaravelでAPIを作るときって、ルートの書き方が普通と違うんですか?」
先生
「はい。LaravelにはAPI専用のルーティングファイル routes/api.php が用意されていて、そこでAPIルートを定義するんです。」
生徒
「ふつうの web.php とどう違うんですか?」
先生
「では、APIルーティングの基本から実際の使い方まで、一緒に見ていきましょう!」
1. LaravelのAPIルーティングとは?
Laravel(ララベル)では、Web画面を表示するためのルートと、データだけをやりとりするAPI用のルートを分けて管理します。APIはスマートフォンアプリや外部サービスと情報を交換するときによく使われ、画面を返す必要がないため、Webとは少し違う仕組みで動きます。まずは「APIルートがどこに書かれているのか」を知ることが第一歩です。
APIルートは、routes/api.phpという専用ファイルにまとめて記述します。このファイルに書いたルートには、Laravelが自動的に/apiというプレフィックス(先頭につく文字列)が付与され、さらにAPI専用のミドルウェアも適用されます。特別な設定をしなくても、APIとして動くように準備されているイメージです。
たとえば、次のような簡単なAPIルートを api.php に書くと、ブラウザでアクセスしたときにJSON形式のデータが返ってくるようになります。
use Illuminate\Support\Facades\Route;
Route::get('/sample', function () {
return ['message' => 'これはAPIから返ってきたデータです'];
});
このコードは /api/sample にアクセスすると動作します。画面ではなく「データだけ」を返すのがAPIの大きな特徴で、Webルートとの役割の違いがここからでもイメージしやすくなります。APIルーティングは難しそうに見えますが、まずは「Webとは別にAPI専用の入り口が用意されている」と理解するところから始めるとスムーズです。
2. api.phpの基本的な書き方
ここからは、実際にroutes/api.phpにコードを書いてみましょう。とはいっても、最初はとてもシンプルなサンプルで大丈夫です。「特定のURLにアクセスされたら、固定のメッセージを返すだけ」のAPIから始めると、LaravelのAPIルーティングの雰囲気がつかみやすくなります。
エディタでroutes/api.phpを開き、次のコードを追加してみてください。
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/hello', function () {
return response()->json(['message' => 'こんにちは、API!']);
});
このコードは、/api/helloというURLにアクセスしたときに「こんにちは、API!」というメッセージをJSON形式で返すAPIルートです。Route::get('/hello', ...)の部分で「GETメソッドで/helloに来たリクエストを受け取る」という意味になり、function () { ... }の中で実際に返す内容を定義しています。
response()->json([...])は、「配列で用意したデータをJSONに変換して返す」というLaravelの便利な書き方です。ブラウザやツールからhttp://localhost/api/helloにアクセスすると、画面にはHTMLではなく、{"message":"こんにちは、API!"}のようなデータだけが表示されます。これが、Webページではなく“データ専用の入り口”としてAPIルートを使うときの基本的な形になります。
3. コントローラを使ったAPIルートの定義
先ほどは api.php の中に直接処理を書きましたが、実際のLaravel開発では、APIの処理はコントローラに分けて書くのが一般的です。機能が増えてくると、ひとつのファイルにすべてを書いてしまうと読みづらくなるため、「URLの受付はルート」「具体的な処理はコントローラ」という役割分担をしておくと後からとても楽になります。
まずは、API用のコントローラを1つ作ってみましょう。ターミナル(またはコマンドプロンプト)を開き、次のコマンドを実行します。
php artisan make:controller Api/GreetingController
このコマンドを実行すると、app/Http/Controllers/Api/GreetingController.php というファイルが自動で作成されます。Api/ というサブディレクトリを指定しているので、「API関連のコントローラをこの中にまとめておこう」という整理もしやすくなります。
次に、このコントローラの中に「あいさつメッセージを返すだけ」のシンプルなメソッドを用意してみます。
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class GreetingController extends Controller
{
public function hello()
{
// ここでAPIとして返したいデータを準備する
return response()->json([
'message' => 'コントローラからこんにちは!'
]);
}
}
hello メソッドの中では、配列で用意したメッセージを response()->json() を使ってJSON形式に変換し、そのままAPIレスポンスとして返しています。画面を表示するビューは使わず、「データだけ」を返している点が、Webページ用のコントローラとの大きな違いです。
最後に、このコントローラのメソッドをAPIルートと結びつけます。routes/api.php に次のように追記してください。
use App\Http\Controllers\Api\GreetingController;
Route::get('/hello', [GreetingController::class, 'hello']);
この1行で、「/api/hello にGETアクセスが来たら、GreetingController の hello メソッドを実行する」というルールが完成します。ブラウザやAPIツールから http://localhost/api/hello にアクセスすると、JSON形式のあいさつメッセージが返ってくれば成功です。
このように、コントローラを使ったAPIルーティングに慣れておくと、「APIの入口(ルート)」と「処理の本体(コントローラ)」をきれいに分けて考えられるようになり、LaravelでのAPI開発がぐっと分かりやすくなります。
4. API専用のミドルウェアとは?
Laravelでは、routes/api.php に書かれたルートには、自動的に api というミドルウェアグループが適用されます。ミドルウェアとは、リクエスト(アクセス)とレスポンス(返答)の間に立って「通っていいか?」「どんなルールで扱うか?」をチェックする“関所”のような役割を持つ仕組みです。
API用のミドルウェアでは、画面表示が前提のWebルートとは違い、クッキーやセッションをあまり使わず、代わりにトークン認証やアクセス制限(一定回数以上の連続アクセスを制御する仕組み)など、APIに向いた設定がまとめて適用されます。例えば、CSRF(クロスサイトリクエストフォージェリ)保護は画面フォーム向けの機能なので、APIでは基本的に無効になっています。
実際に、自分でミドルウェアを追加して使うこともできます。たとえば「このAPIはログインしているユーザーだけが使えるようにしたい」という場合、次のようにルート側でミドルウェアを指定します。
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\GreetingController;
Route::middleware('auth:sanctum')
->get('/secure-hello', [GreetingController::class, 'hello']);
この例では、/api/secure-hello にアクセスする前に auth:sanctum というミドルウェアが必ず実行され、「正しく認証されているか」をチェックしてからコントローラの処理に進みます。このように、APIルートは web.php とは別に api.php で管理しつつ、ミドルウェアを組み合わせることで、安全で扱いやすいAPIルーティングを構成できるようになっています。
5. APIルートにプレフィックス(/api)が自動で付く
api.phpにルートを書いた場合、自動的に/apiというプレフィックス(先頭の文字列)がURLに追加されます。
たとえば、api.phpに以下のルートを書いたとします:
Route::get('/users', function () {
return ['user1', 'user2'];
});
このルートにアクセスするには、http://localhost/api/usersというURLになります。自分で/apiを書く必要はなく、自動的に付くので覚えておきましょう。
6. Webルートとの違いを理解しよう
web.phpは、画面を表示するHTML(ウェブページ)向けのルートを管理します。一方で、api.phpはデータをやりとりするAPI向けに使われます。
例えば、ブログ投稿のデータだけ取得したいときにはAPIルート、ブログページそのものを表示したいときにはWebルート、といった使い分けになります。
まとめ
LaravelのAPIルーティングは、初心者が最初につまずきやすい分野ですが、仕組みを丁寧に理解するととても扱いやすくなる特徴があります。特に、API専用のルーティングファイルとして用意されているapi.phpは、Web画面を扱うweb.phpとは根本的に役割が異なり、データ通信に特化した構成が自然に備わっています。今回の記事では、api.phpに自動的に付与されるプレフィックスやミドルウェアの特性を踏まえつつ、実際にどのようにコードを書くかを順序立てて示しました。初心者が迷いやすいポイントとして、web.phpとの違い、ミドルウェアの性質、そしてコントローラを使ったAPI設計の自然な流れがありましたが、実例を交えながら理解することで、より実務的なイメージがつかめる構成となったはずです。
APIルーティングの学習では、URLとメソッドの関係を単純に覚えるだけでなく、どのような処理をどの層に分けると開発がスムーズになるかという観点も重要になります。Laravelでは、コントローラ設計が非常に柔軟で、メソッド単位で責務を細かく分けられるため、大規模なアプリケーションでも後から修正しやすい利点があります。今回取り上げたルーティング定義はその基礎部分であり、今後ミドルウェアやバリデーション、リソースクラス、サービス層などに発展していくための土台として大切なポイントになります。特に、API開発ではJSON形式での返却が中心になるため、レスポンスを整えるためのコントローラ設計を丁寧に行うことが品質向上に直結します。
また、プレフィックスとして自動で付与される/apiはLaravelの便利な仕様のひとつであり、開発者がURLを毎回意識して書かなくても自然とAPIであることが示される設計になっています。API開発が未経験の初心者にとって、このような仕組みが自動化されているのは非常に理解しやすく、間違いを防ぎながら学習を進められるメリットがあります。さらに、apiミドルウェアによってCSRF保護が無効化されている点など、Webとの動作の違いを理解することで、どのファイルにどのルートを書くべきか判断できるようになります。この違いを明確に把握しておくことは、開発時の混乱を避けるためにも欠かせない知識です。
コントローラを利用したAPIルートの定義に関しては、実務でも最も使用される形式であり、単なる学習の範囲を超えて実際の開発に直結する重要なステップとなります。Laravelでは、コントローラの作成からメソッドの定義、そしてルートへの紐づけまでがスムーズに行えるため、初めてAPIを作る学習者でも迷わず進められます。例えば、今回のGreetingControllerのように、API専用のディレクトリに整理して配置する構成は、プロジェクトが大きくなった際にも読みやすさを保つために役立ちます。こうしたフォルダ構造の整理を意識するだけでも、後のAPI拡張がはるかに楽になります。
ここでは、学習を振り返る意味も込めて、簡単なAPIルーティングのサンプルコードを掲載しておきます。実際に手を動かしながらLaravelの挙動を体験することで、理解が格段に深まりますので、ぜひ自身の環境で試してみてください。
練習用サンプルAPIコード
// routes/api.php
use App\Http\Controllers\Api\SampleController;
Route::get('/sample', [SampleController::class, 'index']);
// app/Http/Controllers/Api/SampleController.php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
class SampleController extends Controller
{
public function index()
{
return response()->json(['result' => 'サンプルAPIからの応答です']);
}
}
生徒
「先生、今日の学習でAPIルーティングの仕組みがかなり理解できた気がします!特にapi.phpに自動でプレフィックスが付いたり、ミドルウェアが最初から設定されているのがすごく便利ですね。」
先生
「その理解はとてもいい流れですね。Laravelは初心者でも迷わないように設計されているので、プレフィックスやミドルウェアのような仕組みが自然と学べるようになっています。実際にAPIを増やしていくと、この便利さがもっとわかってきますよ。」
生徒
「あと、コントローラを使ってAPIを整理する方法もすごく分かりやすかったです。同じAPIでもWebページとは扱い方が違うんだなって理解できました。」
先生
「その通りです。APIはデータ通信が中心ですから、Webとは責務が違います。今回のようにコントローラを使って整理する方法を覚えておくと、プロジェクトが大きくなっても管理しやすくなります。次のステップでは認証やバリデーションなども学ぶと、さらにAPI開発が楽しくなりますよ。」