カテゴリ: Symfony 更新日: 2025/12/22

Symfonyで複数ドメイン対応のルーティングを実現する方法!初心者でもできる設定ガイド

Symfonyで複数ドメインに対応したルーティングを行う方法
Symfonyで複数ドメインに対応したルーティングを行う方法

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

生徒

「先生、1つのSymfonyアプリで複数のドメインを使うことってできますか?」

先生

「はい、Symfonyでは複数のドメインに対応したルーティング設定が可能ですよ。」

生徒

「なんだか難しそうですが、初心者でも設定できますか?」

先生

「大丈夫です!わかりやすく丁寧に説明していきますので、一緒に学んでいきましょう。」

1. Symfonyで複数ドメインを使うとは?

1. Symfonyで複数ドメインを使うとは?
1. Symfonyで複数ドメインを使うとは?

Symfony(シンフォニー)では、ひとつのアプリケーションで複数のドメインを使い分けることができます。たとえば、以下のような使い方です:

  • https://shop.example.com → 商品ページを表示
  • https://admin.example.com → 管理画面を表示

これを実現するためには、ルーティングという仕組みを使って、どのドメインからのアクセスかを見分けて、それぞれの処理へ振り分ける必要があります。

ルーティングとは、URLとプログラムの処理(コントローラ)を結びつけるしくみのことです。

2. ルーティングに複数ドメインを指定する方法

2. ルーティングに複数ドメインを指定する方法
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)とは?

3. ホスト(host)とは?
3. ホスト(host)とは?

hostとは、アクセスしてきたドメイン名を指します。つまり、「どこの住所(URL)から来たのか?」を判定するためのものです。

Symfonyではこのhostをルーティングに指定することで、「このURLのときはこの処理をしてね」と設定できます。

4. ローカル環境で複数ドメインを動かすには?

4. ローカル環境で複数ドメインを動かすには?
4. ローカル環境で複数ドメインを動かすには?

開発中に複数ドメインをローカルで試したいときは、hostsファイルを編集して、ダミーのドメイン名を作成する必要があります。

たとえば、下記のようにhostsファイルに記述します。


127.0.0.1 shop.local
127.0.0.1 admin.local

そして、Symfonyのwebサーバーを起動する際に、これらのドメインでアクセスできるようにします。

5. 同じコントローラを複数のドメインで使い分けたいときは?

5. 同じコントローラを複数のドメインで使い分けたいときは?
5. 同じコントローラを複数のドメインで使い分けたいときは?

同じ処理をしているけど、ドメインだけで振り分けたいというケースもありますよね。そういうときは、hostにワイルドカードやプレースホルダを使うことができます。


multi_domain:
  path: /
  host: "{subdomain}.example.com"
  controller: App\Controller\CommonController::index
  requirements:
    subdomain: shop|admin

このようにすることで、shop.example.comadmin.example.comのどちらでも同じ処理が使えます。中で$request->getHost()を使えば、どちらから来たかも判定できます。

6. コントローラ内でホストを判定するには?

6. コントローラ内でホストを判定するには?
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開発の良い勉強になりますし、実際の仕事でもとても役立ちますよ。」

生徒

「はい!自分でもルーティング設定をいろいろ試してみようと思います!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Symfonyで複数のドメインを使うことはできますか?

はい、Symfonyではひとつのアプリケーションで複数のドメインを使い分けることができます。shop.example.comやadmin.example.comなど、それぞれに異なる処理を割り当てることが可能です。
関連記事:
カテゴリの一覧へ
新着記事
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でルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)