Symfonyで複数ドメイン対応のルーティングを実現する方法!初心者でもできる設定ガイド
生徒
「先生、1つのSymfonyアプリで複数のドメインを使うことってできますか?」
先生
「はい、Symfonyでは複数のドメインに対応したルーティング設定が可能ですよ。」
生徒
「なんだか難しそうですが、初心者でも設定できますか?」
先生
「大丈夫です!わかりやすく丁寧に説明していきますので、一緒に学んでいきましょう。」
1. Symfonyで複数ドメインを使うとは?
Symfony(シンフォニー)では、ひとつのアプリケーションで複数のドメインを使い分けることができます。たとえば、以下のような使い方です:
https://shop.example.com→ 商品ページを表示https://admin.example.com→ 管理画面を表示
これを実現するためには、ルーティングという仕組みを使って、どのドメインからのアクセスかを見分けて、それぞれの処理へ振り分ける必要があります。
ルーティングとは、URLとプログラムの処理(コントローラ)を結びつけるしくみのことです。
2. ルーティングに複数ドメインを指定する方法
Symfonyでは、ルーティング設定ファイル(routes.yamlなど)で、ホスト(ドメイン名)を指定することができます。
基本の記述方法
以下のように、ドメインごとに異なるルートを作成することができます。
# config/routes.yaml
shop_homepage:
path: /
host: shop.example.com
controller: App\Controller\ShopController::index
admin_homepage:
path: /
host: admin.example.com
controller: App\Controller\AdminController::index
この設定により、shop.example.comにアクセスした場合はShopControllerが動き、admin.example.comではAdminControllerが動くようになります。
3. ホスト(host)とは?
hostとは、アクセスしてきたドメイン名を指します。つまり、「どこの住所(URL)から来たのか?」を判定するためのものです。
Symfonyではこのhostをルーティングに指定することで、「このURLのときはこの処理をしてね」と設定できます。
4. ローカル環境で複数ドメインを動かすには?
開発中に複数ドメインをローカルで試したいときは、hostsファイルを編集して、ダミーのドメイン名を作成する必要があります。
たとえば、下記のようにhostsファイルに記述します。
127.0.0.1 shop.local
127.0.0.1 admin.local
そして、Symfonyのwebサーバーを起動する際に、これらのドメインでアクセスできるようにします。
5. 同じコントローラを複数のドメインで使い分けたいときは?
同じ処理をしているけど、ドメインだけで振り分けたいというケースもありますよね。そういうときは、hostにワイルドカードやプレースホルダを使うことができます。
multi_domain:
path: /
host: "{subdomain}.example.com"
controller: App\Controller\CommonController::index
requirements:
subdomain: shop|admin
このようにすることで、shop.example.comとadmin.example.comのどちらでも同じ処理が使えます。中で$request->getHost()を使えば、どちらから来たかも判定できます。
6. コントローラ内でホストを判定するには?
ルーティングだけでなく、コントローラの中でも「どのドメインからアクセスされたか?」を判断することができます。
SymfonyのRequestオブジェクトを使うことで、アクセス元のホストを取得できます。
// src/Controller/CommonController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class CommonController extends AbstractController
{
public function index(Request $request): Response
{
$host = $request->getHost();
if ($host === 'shop.example.com') {
return new Response('ショップサイトにようこそ');
}
if ($host === 'admin.example.com') {
return new Response('管理画面にようこそ');
}
return new Response('不明なドメインです');
}
}
このように書けば、アクセス元のドメインに応じて表示内容を切り替えることができます。
まとめ
Symfonyで複数ドメインに対応したルーティングを実現する方法について学んできましたが、振り返ってみると、Symfonyが持つ柔軟で拡張性の高いルーティング機能が、実際のWeb開発の場面でどれほど役立つかがよく理解できます。とくに、複数のドメインをひとつのアプリケーションで運用したいケースは、ネットショップと管理画面のように機能が異なるサイトをまとめて扱いたい場合にとても有効な方法です。Symfonyでは「host」を使うことでドメイン名による振り分けが簡単に実現でき、初心者でも理解しやすい構造になっています。
また、複数ドメインをローカル環境で動かすためには、hostsファイルの設定が欠かせませんが、この作業もWeb開発では基本的なステップのひとつであり、特別難しいものではありません。Symfonyのルーティング設定と組み合わせることで、実際のサービス運用と近い形で環境を再現でき、学習の効率も大きく高まります。さらに、コントローラ内でRequestオブジェクトを使ってホスト名を判定する方法も紹介しましたが、これは複雑なドメイン管理を行う際に非常に役立ちます。ドメインごとに処理や画面を変えたい場面は多く、Symfonyが用意している基本機能だけでも十分に対応できます。
そして、ワイルドカードやプレースホルダを使った柔軟な設定は、より高度なルーティング設計にも応用できます。例えばshop.example.comやadmin.example.comのように複数のサブドメインをまとめて扱いたい場合でも、要件に合わせて簡単に設定できます。複数ドメインをまとめて運用する仕組みを知ることは、Symfonyに限らずWebアプリケーションの理解にもつながり、初心者が一歩先のレベルへ進むための大きな学びになります。
複数ドメイン対応の理解を深めるサンプルコード
以下は、コントローラ内でアクセスしてきたドメインによって処理を分岐するサンプルです。アプリの運用段階では、このようにドメインごとに異なる動きをさせたい場面が非常によくあります。
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class DomainController extends AbstractController
{
public function index(Request $request): Response
{
$domain = $request->getHost();
if ($domain === 'shop.local') {
return new Response('ショップページを表示しています');
}
if ($domain === 'admin.local') {
return new Response('管理画面を開いています');
}
return new Response('不明なドメインからのアクセスです');
}
}
このようなコードを実際に書いて試すことで、複数ドメインを扱うときの流れや考え方がより明確になり、自分自身で応用できる力が自然と身に付きます。Symfonyは設定ファイルとコントローラがシンプルに連携しているため、複数ドメインの扱いや振り分け処理も整理しやすく、Webアプリケーション開発における理解を深める良い題材となります。
複数ドメイン対応というと難しいイメージがありますが、Symfonyのルーティング機能を正しく理解すれば、意外と簡単に実現できます。ドメインやURLと処理を関連付ける考え方は、Web全般の基礎でもあるので、今回の内容は今後の学習にも必ず役立ちます。ぜひ何度もコードを書いて試し、自分の手で動かす体験を積み重ねてください。
生徒
「複数のドメインをひとつのSymfonyアプリで扱えるなんて驚きでした!思ったより簡単に設定できるんですね。」
先生
「そうでしょう?hostを指定するだけで振り分けられるので、とても便利なんですよ。開発の幅も大きく広がります。」
生徒
「コントローラでドメインを判定する方法も理解できました。あと、hostsファイルを使えばローカルで練習できるのも嬉しいです。」
先生
「その調子です。複数ドメインを扱う経験はWeb開発の良い勉強になりますし、実際の仕事でもとても役立ちますよ。」
生徒
「はい!自分でもルーティング設定をいろいろ試してみようと思います!」