Laravelでドメインルートを使う方法!マルチドメイン対応を初心者向けに解説
生徒
「Laravelで複数のドメインを使い分けて、それぞれ違うサイトを表示したいんですが、どうしたらいいですか?」
先生
「それはマルチドメイン対応という機能を使います。Laravelのルーティングでドメインごとにルートを分けることができますよ。」
生徒
「マルチドメインって何ですか?ドメインって何かもよく分かりません…」
先生
「ドメインとはインターネット上の住所のようなもので、例えば example.com や myblog.net などがあります。マルチドメイン対応は、ひとつのLaravelアプリで複数のドメインを使い分けて、それぞれ違う内容のページを表示する仕組みです。」
先生
「今回はLaravelでドメインルートを使ってマルチドメイン対応を設定する方法をわかりやすく解説しますね!」
1. ドメインルートとは?
Laravelのドメインルートとは、「どのドメインにアクセスされたか」に応じて表示するページや処理を切り替えるための仕組みです。通常は /home や /about など URL のパス部分でルートを分けますが、マルチドメインの場合は “ドメイン名そのもの” を使って振り分けます。
たとえば、example.com では企業サイト、myblog.net ではブログサイトを表示したいといったケースで活躍します。ひとつのLaravelアプリの中で複数のサイトを動かせるため、管理がしやすく、コードの重複も減らせるメリットがあります。
イメージしやすいように、簡単な例を見てみましょう。
// それぞれのドメインに対応したページを用意する例
Route::domain('example.com')->group(function () {
Route::get('/', function () {
return '企業サイトのトップページ';
});
});
Route::domain('myblog.net')->group(function () {
Route::get('/', function () {
return 'ブログサイトのトップページ';
});
});
このように、同じ /(トップページ)でもドメインが違えば別の内容を返せます。プログラミング未経験の方は「同じ住所の部屋番号が違うと別の部屋につながる」というイメージを持つと理解しやすいでしょう。Laravel のドメインルートは、この仕組みをアプリの中で簡単に実現できる便利な機能です。
2. Laravelでドメインルートを使う基本的な方法
Laravelでは、特定のドメインだけに適用されるルートを設定したいときに、domain() メソッドを使います。このメソッドを使うことで、「このドメインからアクセスされたときはこのページを見せる」というように、ドメインごとにまったく別のルート構成を組み立てることができます。
設定はとてもシンプルで、routes/web.php で対象となるドメイン名を指定し、その中に通常のルートをまとめるだけです。初心者でも迷わない書き方なので、まずは次の例を見てみましょう。
// example.com 用のルート設定
Route::domain('example.com')->group(function () {
Route::get('/', function () {
return view('welcome_example'); // example.com 用トップページ
});
Route::get('/info', function () {
return 'Exampleドメイン専用のお知らせページ';
});
});
// myblog.net 用のルート設定
Route::domain('myblog.net')->group(function () {
Route::get('/', function () {
return view('welcome_blog'); // myblog.net 用トップページ
});
Route::get('/articles', function () {
return 'ブログ記事一覧ページ';
});
});
このように、同じ Laravel アプリでもドメインが違えば別のページ構成を持たせることができます。同じ / というルートでも、どのドメインからアクセスされたかによって表示内容が変わるため、まるで別アプリを動かしているように見える仕組みになります。
プログラミングに慣れていない方は、「マンションは同じでも、部屋番号によって住んでいる人や部屋の中身が違う」という例えをイメージすると理解しやすいでしょう。Laravel のドメインルートは、それをアプリで実現するイメージです。
3. なぜマルチドメイン対応が便利?
マルチドメイン対応が便利と言われる一番の理由は、「ひとつのLaravelアプリで複数のサイトをまとめて管理できる」ことです。たとえば会社のメインサイトは example.com、採用サイトは recruit.example.com、ブログは myblog.net のように分けたい場合でも、Laravelのドメインルートを使えば、ひとつのプロジェクトの中で役割ごとにサイトを切り分けられます。
別々のアプリとして作ってしまうと、認証処理や共通のヘッダー・フッター、問い合わせ処理などをそれぞれのプロジェクトで重複して実装しなければなりません。マルチドメイン対応にしておけば、共通部分はひとつにまとめ、ドメインごとに変えたい部分だけを分ければよいので、コードの再利用がしやすく、保守の手間もぐっと減らせます。
また、ドメインごとにデザインや内容を変えたいときにも柔軟に対応できます。企業サイトは落ち着いたデザイン、ブログはカジュアルなデザイン、といったように、ルートやビューを分けておくだけで、ユーザーに見せたい雰囲気をドメインごとに変えやすくなります。キャンペーン用ドメインを追加したいときも、新しいLaravelプロジェクトを一から作るのではなく、既存アプリにドメインルートを足すだけで対応できます。
プログラミング未経験の方は、「同じ建物の中に、会社用の受付フロア・ショップフロア・イベントフロアがある」というイメージをすると分かりやすいかもしれません。建物の土台(Laravelアプリ)はひとつですが、フロア(ドメイン)ごとに役割を変えて案内できるのが、マルチドメイン対応の大きな魅力です。
4. 複数ドメインにまたがるルートの共通部分の使い方
マルチドメイン対応をするときでも、「どのドメインからアクセスされても同じ内容を見せたいページ」は必ず出てきます。たとえばお問い合わせページや利用規約、ログイン画面などは、企業サイトから見てもブログサイトから見ても同じページで問題ないケースが多いはずです。
このような「共通で使いたいページ」は、あえてドメインを指定せず、通常のルートとして定義しておくのがポイントです。一方で、「このドメインだけ特別に見せたいページ」だけを domain() を使って分けるようにすると、Laravelのルーティング設定がすっきりまとまりやすくなります。
// すべてのドメインで共通のページ
Route::get('/contact', function () {
return view('contact'); // 共通のお問い合わせページ
});
Route::get('/terms', function () {
return view('terms'); // 共通の利用規約
});
// example.com だけで表示したいページ
Route::domain('example.com')->group(function () {
Route::get('/special', function () {
return 'Example.com だけの特別ページ';
});
});
このサンプルでは、/contact と /terms はドメイン指定をしていないため、example.com/contact からでも myblog.net/contact からでも同じビューが表示されます。一方、/special は example.com のドメインルート内で定義しているため、example.com/special からしかアクセスできません。
プログラミング未経験の方は、「どの入口から来ても案内する共通の受付」と「この入口から来た人にだけ案内する特別ルーム」があるイメージを持つと理解しやすいでしょう。共通ルートは通常どおり定義し、ドメインごとに変えたい部分だけを domain() で分けることで、マルチドメイン対応のLaravelアプリでもシンプルで管理しやすいルーティング設計にできます。
5. localhostで複数ドメインを試す方法
実際にマルチドメイン対応を学ぶうえで、「ローカル環境でも複数ドメインを切り替えて動作確認したい」という場面はよくあります。専用のサーバーがなくても、パソコンの hosts ファイルを少し編集するだけで、本物のドメインのようにアクセスを切り替えられます。
仕組みはとてもシンプルで、「特定の名前(ドメイン)を自分のパソコンのIPアドレスへ向けるだけ」です。こうするとブラウザは、普段の localhost と同じ場所を参照するにもかかわらず、ドメイン名に応じて別のLaravelルートを動かせるようになります。
Windowsなら C:\Windows\System32\drivers\etc\hosts、Mac/Linuxなら /etc/hosts を管理者権限で開き、次のように追記します。
127.0.0.1 example.test
127.0.0.1 myblog.test
127.0.0.1 admin.example.test
この設定を保存すると、http://example.test や http://myblog.test と入力するだけで、Laravelのドメインルートに応じたページが表示されます。ブラウザ上では本物のドメインと同じ扱いになるため、実際の運用に近い状態でテストできるのが大きなメリットです。
プログラミングに慣れていない方は、「同じ家の玄関に、呼び名の違う表札をつけて試すイメージ」と考えると理解しやすいでしょう。どの表札を使って呼んだかによって、案内される部屋(ページ)が変わる、という感覚です。
6. ドメインルート設定の注意点
- 本番環境のサーバーでも複数ドメインの設定が必要(DNS設定やWebサーバーのバーチャルホストなど)
- SSL(https)証明書も各ドメインごとに準備する必要がある
- ドメインの切り替えに伴い、セッションや認証の扱いも注意が必要
- Laravelの環境変数(.envファイル)でドメイン設定を管理すると拡張性が高い
7. ポイントのおさらい
- ドメインルートはLaravelの
domain()メソッドで設定 - 複数ドメインで異なるページを同じLaravelアプリで管理できる
- ローカル環境で複数ドメインを試すにはhostsファイルを編集
- 本番環境ではDNSやサーバー設定も必要になる
- 共通ルートはドメイン指定なしで設定可能でコードがすっきり
まとめ
Laravelでマルチドメイン対応を行うためのドメインルート設定は、複数のサービスやブランドを一つのアプリケーションで運用したい場合に非常に有効な仕組みです。特に、企業サイトとブログ、オンラインショップのように用途がはっきり分かれた複数サイトをまとめて管理したい場面では、ドメインルートを活用することで効率的かつ整理されたプロジェクト構成を保つことができます。今回の記事では、ドメインルートの概念から、実際にLaravelでどのようにコードを書くのか、そして複数ドメインをローカル環境で検証する方法までを順序立てて紹介しました。ドメイン名ごとにルートを分けられるという仕組みは一見複雑に感じるかもしれませんが、Laravelのルートグループ機能と組み合わせることで非常に直感的な設計が可能になります。
また、ドメインルートを使う場面では、Webサーバーの設定やDNSの設定などLaravel以外の知識も必要になってきます。しかし、Laravel側で行うコードの記述自体はとてもシンプルで、domainメソッドにドメイン名を渡し、その中にルートを定義するだけで特定のドメイン向けの処理を細かく切り分けられる点が大きな魅力です。複数のドメインが並行して運用されるプロジェクトでは、ビューのテンプレートやコントローラもそれぞれに用意するケースが多く、ディレクトリ構成の工夫と合わせることで大規模なプロジェクトでも見通しの良い設計が可能になります。
さらに便利な点として、共通ルートを通常通り定義すればすべてのドメインでアクセスできるため、重複コードを書かなくて済むところがあります。特に、お問い合わせフォームや会社情報など複数サイトで共通するページを持つ企業では、この仕組みが大きなメリットになります。一方で、特定ドメインのみで表示したいページについてはドメインルート内に限定してルートを配置することで、意図しないアクセスや混乱を防ぐことができます。このように、ドメインルートは「共通化」と「独立化」を柔軟に組み合わせられる優れた仕組みとして、実務でも広く使われています。
また、ローカル環境で複数ドメインを試せる点も大切なポイントです。hostsファイルに任意のドメイン名を設定すれば、まるで本番環境のように複数ドメインの挙動を確認でき、開発段階での動作確認がとても楽になります。これはLaravelに限らずWebアプリケーション開発全般で役立つ知識であり、今後他のフレームワークを触る際にも活かせる汎用性の高い方法です。
下に、練習用としてシンプルにまとめたドメインルート設定のサンプルコードを載せておくので、まずはこのコードを参考に手を動かしながら学習を進めることをおすすめします。
ドメインルート練習用サンプルコード
Route::domain('service.example.com')->group(function () {
Route::get('/', function () {
return view('service_top');
});
});
Route::domain('store.example.com')->group(function () {
Route::get('/', function () {
return view('store_top');
});
});
Route::get('/info', function () {
return view('info_page');
}); // どのドメインでもアクセス可能な共通ルート
生徒
「先生、ドメインルートの使い方がだいぶわかりました!複数のドメインをまとめて管理できるのは便利ですね。」
先生
「その理解はすごく良いですね。Laravelのルーティングは柔軟なので、複数ドメインの設計にはとても向いていますよ。慣れてくると、ひとつのアプリで複数のサービスを自然に扱えるようになります。」
生徒
「hostsファイルを使ったローカル環境での確認方法も初めて知りました。これを使えばテストもしやすいですね。」
先生
「そうなんです。開発の段階で複数ドメインを再現できるのはとても大事なことです。本番環境のサーバー設定とも結びついて理解できるようになると、さらに深い知識として身につきますよ。」
生徒
「共通ルートとドメイン専用ルートを分けられるところも、実務で役立ちそうですね。整理しやすくていい仕組みだと思いました!」
先生
「その通りです。これからLaravelの認証やミドルウェアを学ぶと、マルチドメインの設計がさらに幅広く応用できるようになりますよ。」