カテゴリ: Symfony 更新日: 2026/02/26

Symfonyでサービスを手動登録する方法を完全解説!services.yamlを初心者向けにやさしく理解

Symfonyでサービスを手動登録する方法(services.yaml)
Symfonyでサービスを手動登録する方法(services.yaml)

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

生徒

「Symfonyって、クラスを勝手に使ってくれるイメージがあるんですが、設定は何もしなくていいんですか?」

先生

「自動で使える場合もありますが、場合によっては自分でサービスとして登録する必要があります。」

生徒

「サービスって何ですか?あと、どうやって登録するんですか?」

先生

「Symfonyでは services.yaml という設定ファイルを使って、サービスを手動で登録できます。順番に見ていきましょう。」

1. Symfonyのサービスとは何か?

1. Symfonyのサービスとは何か?
1. Symfonyのサービスとは何か?

Symfonyにおけるサービスとは、アプリケーションの中で何度も使われる便利な部品のことです。たとえば、メールを送る処理、データベースに保存する処理、計算を行う処理などがサービスになります。

現実世界でたとえると、サービスは「道具箱に入っている道具」のような存在です。必要なときに取り出して、どこからでも同じように使えます。Symfonyでは、この道具を管理する仕組みが最初から用意されています。

2. 依存性注入(DI)を超かんたんに理解する

2. 依存性注入(DI)を超かんたんに理解する
2. 依存性注入(DI)を超かんたんに理解する

依存性注入とは、難しそうな言葉ですが考え方はシンプルです。クラスの中で新しく道具を作るのではなく、外から道具を渡してもらう仕組みです。

たとえば料理で包丁が必要な場合、自分で包丁を作るのではなく、キッチンから借りますよね。この「借りる」動作が依存性注入です。Symfonyでは、サービスとして登録されたクラスを自動で渡してくれます。

3. services.yamlとは何をするファイル?

3. services.yamlとは何をするファイル?
3. services.yamlとは何をするファイル?

services.yamlは、Symfonyでサービスを設定するための重要なファイルです。このファイルに「このクラスはサービスとして使います」と書いておくことで、Symfonyが管理してくれるようになります。

YAML(ヤムル)という形式で書かれており、インデント(字下げ)で構造を表現します。プログラミング未経験の方でも、箇条書き感覚で読めるのが特徴です。

4. 最小構成でサービスを手動登録してみよう

4. 最小構成でサービスを手動登録してみよう
4. 最小構成でサービスを手動登録してみよう

まずは、シンプルなクラスをサービスとして登録してみます。以下は、あいさつ文を返すだけのクラスです。


<?php
namespace App\Service;

class HelloService
{
    public function sayHello(): string
    {
        return 'こんにちは、Symfony!';
    }
}

このクラスを services.yaml に登録します。


services:
    App\Service\HelloService:
        public: true

これで、HelloServiceはSymfonyのサービスとして使えるようになります。

5. コントローラでサービスを使う方法

5. コントローラでサービスを使う方法
5. コントローラでサービスを使う方法

登録したサービスは、コントローラでそのまま受け取れます。以下は依存性注入を使った例です。


<?php
namespace App\Controller;

use App\Service\HelloService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class SampleController extends AbstractController
{
    public function index(HelloService $helloService): Response
    {
        return new Response($helloService->sayHello());
    }
}

Symfonyが自動でHelloServiceを用意してくれるため、自分で new する必要はありません。

6. 引数を持つサービスを登録する

6. 引数を持つサービスを登録する
6. 引数を持つサービスを登録する

サービスには設定値を渡すこともできます。たとえば、メッセージ内容を外から決めたい場合です。


<?php
namespace App\Service;

class MessageService
{
    private string $message;

    public function __construct(string $message)
    {
        $this->message = $message;
    }

    public function getMessage(): string
    {
        return $this->message;
    }
}

services:
    App\Service\MessageService:
        arguments:
            $message: '設定ファイルから渡されたメッセージ'

7. publicとprivateの違いを理解しよう

7. publicとprivateの違いを理解しよう
7. publicとprivateの違いを理解しよう

services.yamlでは、publicという設定があります。これは「外から直接使えるかどうか」を意味します。

初心者のうちは public: true を指定して問題ありませんが、実際の開発では private が推奨されます。Symfonyの内部から安全に管理するためです。

8. 自動登録との違いと手動登録のメリット

8. 自動登録との違いと手動登録のメリット
8. 自動登録との違いと手動登録のメリット

Symfonyは多くの場合、クラスを自動でサービス登録してくれます。しかし、細かい設定をしたい場合や、特別な初期値を渡したい場合は手動登録が必要です。

services.yamlを理解すると、Symfonyが「なぜ思った通りに動くのか」「なぜエラーになるのか」が見えるようになります。これは初心者にとって大きな一歩です。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)