ブラウザーのURLから直接文字列を返す経路とBladeでHTMLを返す経路

説明と確認結果は2026年10月時点のものです。

Laravelを用意したら、まずは小さなサンプルでブラウザーに文字が表示されるか確かめたいところです。
私も、一番簡単なサンプルで表示できることを確認できたのはよかったと感じました。
この記事では「Hello World!」を表示し、URLとPHPのコードがどうつながるかを試します。

最初はルートから文字列を返し、次にBladeでHTMLの画面を作ります。
DBやコントローラーを追加せず、少ないファイルで動きを確かめる内容です。
サンプルはLaravel Framework 13.35.0、PHP 8.3.6で確認しました。

作業するプロジェクトを開く

PHP・ComposerとLaravelプロジェクトが用意されていることが前提です。
この記事ではPHP・Composer・Laravelの導入作業は扱いません。
以下のファイル名は、すべてLaravelプロジェクトのルートを基準にしています。
ここではプロジェクト名をlearning-appとします。
その親フォルダーから移動してください。

cd learning-app
php artisan --version

別の名前で作成している場合は、learning-appを自分のプロジェクト名に読み替えます。
今回の出力はLaravel Framework 13.35.0でした。
Could not open input file: artisanが出る場合は、artisanファイルがあるフォルダーへ移動できているか確認します。

このリポジトリには完成版のサンプルを追加済みです。
完成版を使う場合は、同じルートを重複して追記せず、コードを確認して起動へ進んでください。

ルートからHello Worldを返す

routes/web.phpを開きます。
既存のルートを残し、次の定義を追加します。
use Illuminate\Support\Facades\Route;がすでにあれば、同じ行を追加する必要はありません。

use Illuminate\Support\Facades\Route;

Route::get('/hello', function (): string {
    return 'Hello World!';
})->name('learning.hello');

Route::get()はGETでアクセスされたURLの処理を登録します。
/helloへ来たら、functionで定義した無名関数が動き、returnの文字列を返します。
: stringは、この関数が文字列を返すことを示すPHPの型宣言です。

Ubuntuの別ターミナルでも同じプロジェクトへ移動し、開発用サーバーを起動します。

php artisan serve --host=127.0.0.1 --port=8000

起動済みなら重ねて起動しません。
ブラウザーでhttp://127.0.0.1:8000/helloを開きます。
画面に次の文字が表示されれば、ルートを通って応答が返っています。

Hello World!

端末でも応答を確かめられます。

curl -i http://127.0.0.1:8000/hello

今回の確認ではHTTP 200とHello World!が返りました。
この段階は本文の文字列を返す例で、HTMLの見出しはまだ作っていません。

Bladeで見出しのある画面にする

次はHTMLと表示するデータを分けます。
routes/web.phpに別のURLを追加します。

Route::view('/hello/view', 'learning.hello', ['message' => 'Hello World!'])
    ->name('learning.hello.view');

learning.helloというビューへ、messageという名前で文字列を渡す定義です。
保存先のビューをArtisanで作成できます。

php artisan make:view learning.hello --no-interaction

作成されたresources/views/learning/hello.blade.phpを、次の内容にします。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>LaravelでHello World</title>
</head>
<body>
    <h1>{{ $message }}</h1>
    <p>Bladeで表示しています。</p>
</body>
</html>

{{ $message }}の部分がHello World!に置き換わります。
h1はHTMLの見出しです。
ブラウザーでhttp://127.0.0.1:8000/hello/viewを開くと、大きな見出しと「Bladeで表示しています。
」という文章が表示されます。

ルートから文字列を直接返した375px幅の実画面
Bladeで見出しと補足文を表示した375px幅の実画面

このBladeには@viteや共通レイアウトを使っていないため、サンプルの表示自体にnpmのビルドは必要ありません。
既存のツール画面はViteを使うので、その画面を確認するときは別途ビルド済み資材が必要です。

同じHello Worldでも、表示が違う理由

/helloは文字列を直接返し、/hello/viewはBladeで組み立てたHTMLを返します。
見出しの大きさや補足文の有無が違うのは、URLに対応する処理と返す内容が違うためです。

開くパス 返す内容 画面での見え方
/hello Hello World!という文字列 見出しタグのない文字
/hello/view h1とpを含むHTML 大きな見出しと補足文
/hello/vie このサンプルにはルート定義なし 通常は404

localhostと127.0.0.1はホスト部分で、/hello/viewはパス部分です。
今回の表示差を確認するときは、ホストを127.0.0.1にそろえて二つのパスを比較します。
localhostが接続できない場合は名前解決やIPv4/IPv6の違いなどを別に確認し、パスの綴りの問題と混同しないようにします。

変更して、ファイルの役割を確かめる

ルートで渡す文字列をHello Laravel!へ変更すると、見出しの文字が変わります。
Bladeのh1をpへ変えると、データは同じままでHTMLの構造が変わります。

うまく表示されない場合は、次を確認します。

症状 確認する場所
接続できない 開発サーバーのターミナルとポート番号
404になる URLの綴りとroutes/web.phpの定義
ビューが見つからない learning.helloと実ファイルの場所
PHPのエラーになる 括弧・引用符・行末のセミコロン

ルートが登録されているかは、プロジェクト内で次のコマンドを実行すると確認できます。

php artisan route:list --path=hello --no-interaction

helloとhello/viewがGETのルートとして表示されます。
実際の一覧ではHEADも含まれます。

まとめ

今回は同じ文字列を、ルートから直接返す方法と、BladeでHTMLへ埋め込む方法で表示しました。
URLとの対応はroutes/web.php、HTMLの構造はBladeに置けることを確認できます。
表示が違うときは、まず開いたパスと、そのルートが返す内容を照合してみてください。

参考: Laravel 13のルーティング、ビュー