Introduction

Symfony is a reusable set of standalone, decoupled and cohesive PHP components that solve common web development problems.

Symfony は、一般的な Web 開発の問題を解決する、再利用可能なスタンドアロンの、分離された、まとまりのある PHP コンポーネントのセットです。

Instead of using these low-level components, you can use the ready-to-be-used Symfony full-stack web framework, which is based on these components... or you can create your very own framework. This tutorial is about the latter.

これらの低レベルのコンポーネントを使用する代わりに、これらのコンポーネントに基づく、すぐに使用できる Symfony フルスタック Web フレームワークを使用できます... または、独自のフレームワークを作成することもできます。このチュートリアルは後者についてです。

Why would you Like to Create your Own Framework?

Why would you like to create your own framework in the first place? If you look around, everybody will tell you that it's a bad thing to reinvent the wheel and that you'd better choose an existing framework and forget about creating your own altogether. Most of the time, they are right but there are a few good reasons to start creating your own framework:

そもそも、なぜ独自のフレームワークを作成したいのですか?周りを見回すと、車輪を再発明するのは悪いことであり、既存のフレームワークを選択し、独自のフレームワークを作成することは完全に忘れたほうがよいと、誰もが言うでしょう。ほとんどの場合、それらは正しいですが、独自のフレームワークの作成を開始する正当な理由がいくつかあります。
  • To learn more about the low level architecture of modern web frameworks in general and about the Symfony full-stack framework internals in particular;
    一般的な最新の Web フレームワークの低レベル アーキテクチャ、特に Symfony のフルスタック フレームワークの内部構造について詳しく学ぶ。
  • To create a framework tailored to your very specific needs (just be sure first that your needs are really specific);
    非常に具体的なニーズに合わせたフレームワークを作成するには (まず、ニーズが本当に具体的であることを確認してください)。
  • To experiment creating a framework for fun (in a learn-and-throw-away approach);
    楽しみのためのフレームワークの作成を実験する (学習して捨てるアプローチで)。
  • To refactor an old/existing application that needs a good dose of recent web development best practices;
    最近の Web 開発のベスト プラクティスを十分に活用する必要がある古い/既存のアプリケーションをリファクタリングする。
  • To prove the world that you can actually create a framework on your own (... but with little effort).
    自分でフレームワークを実際に作成できることを世界に証明するため (...しかし、ほとんど労力はかかりません)。

This tutorial will gently guide you through the creation of a web framework, one step at a time. At each step, you will have a fully-working framework that you can use as is or as a start for your very own. It will start with a simple framework and more features will be added with time. Eventually, you will have a fully-featured full-stack web framework.

このチュートリアルでは、Web フレームワークの作成を 1 ステップずつ丁寧に説明します。各ステップで、完全に機能するフレームワークができあがります。このフレームワークをそのまま使用することも、独自の開始点として使用することもできます。シンプルなフレームワークから始まり、時間とともにより多くの機能が追加されます。最終的には、完全な機能を備えたフルスタック Web フレームワークが完成します。

And each step will be the occasion to learn more about some of the Symfony Components.

各ステップは、いくつかの SymfonyComponents についてさらに学ぶ機会になります。

Many modern web frameworks advertise themselves as being MVC frameworks. This tutorial won't talk about the MVC pattern, as the Symfony Components are able to create any type of frameworks, not just the ones that follow the MVC architecture. Anyway, if you have a look at the MVC semantics, this book is about how to create the Controller part of a framework. For the Model and the View, it really depends on your personal taste and you can use any existing third-party libraries (Doctrine, Propel or plain-old PDO for the Model; PHP or Twig for the View).

多くの最新の Web フレームワークは、MVC フレームワークであると宣伝しています。 Symfony コンポーネントは、MVCarchitecture に従うフレームワークだけでなく、あらゆるタイプのフレームワークを作成できるため、このチュートリアルでは MVC パターンについては説明しません。いずれにせよ、MVC のセマンティクスを見れば、この本はフレームワークのコントローラー部分を作成する方法について書かれています。 Model と theView については、個人の好みに大きく依存し、既存のサードパーティ ライブラリ (Model には Doctrine、Propel または単純な古い PDO、View には PHP または Twig) を使用できます。

When creating a framework, following the MVC pattern is not the right goal. The main goal should be the Separation of Concerns; this is probably the only design pattern that you should really care about. The fundamental principles of the Symfony Components are focused on the HTTP specification. As such, the framework that you are going to create should be more accurately labelled as a HTTP framework or Request/Response framework.

フレームワークを作成するとき、MVC パターンに従うことは正しい目標ではありません。主な目標は、懸念事項の分離であるべきです。これはおそらく、本当に気にかけるべき唯一の設計パターンです。 Symfony コンポーネントの基本原則は、HTTP 仕様に焦点を当てています。そのため、これから作成するフレームワークは、HTTP フレームワークまたは要求/応答フレームワークとしてより正確にラベル付けする必要があります。

Before You Start

Reading about how to create a framework is not enough. You will have to follow along and actually type all the examples included in this tutorial. For that, you need a recent version of PHP (7.4 or later is good enough), a web server (like Apache, nginx or PHP's built-in web server), a good knowledge of PHP and an understanding of Object Oriented Programming.

フレームワークの作成方法について読むだけでは十分ではありません。このチュートリアルに含まれるすべての例を実際に入力する必要があります。そのためには、最新バージョンの PHP (7.4 以降で十分)、Web サーバー (Apache、nginx、または PHP の組み込み Web サーバーなど)、PHP の十分な知識、およびオブジェクト指向プログラミングの理解が必要です。

Ready to go? Read on!

準備はいいですか?読む!

Bootstrapping

Before you can even think of creating the first framework, you need to think about some conventions: where you will store the code, how you will name the classes, how you will reference external dependencies, etc.

最初のフレームワークの作成を考える前に、いくつかの規則について考える必要があります: コードを格納する場所、クラスに名前を付ける方法、外部依存関係を参照する方法などです。

To store your new framework, create a directory somewhere on your machine:

新しいフレームワークを保存するには、マシンのどこかにディレクトリを作成します。
1
2
$ mkdir framework
$ cd framework

Dependency Management

To install the Symfony Components that you need for your framework, you are going to use Composer, a project dependency manager for PHP. If you don't have it yet, download and install Composer now.

フレームワークに必要な Symfony コンポーネントをインストールするには、PHP のプロジェクト依存関係マネージャーである Composer を使用します。 ityet をお持ちでない場合は、今すぐ Composer をダウンロードしてインストールしてください。

Our Project

Instead of creating our framework from scratch, we are going to write the same "application" over and over again, adding one abstraction at a time. Let's start with the simplest web application we can think of in PHP:

フレームワークをゼロから作成する代わりに、一度に 1 つの抽象化を追加しながら、同じ「アプリケーション」を何度も作成します。 PHP で考えられる最も単純な Web アプリケーションから始めましょう。
1
2
3
4
// framework/index.php
$name = $_GET['name'];

printf('Hello %s', $name);

You can use the Symfony Local Web Server to test this great application in a browser (http://localhost:8000/index.php?name=Fabien):

Symfony Local Web Server を使用して、この優れたアプリケーションをブラウザーでテストできます (http://localhost:8000/index.php?name=Fabien):
1
$ symfony server:start

In the next chapter, we are going to introduce the HttpFoundation Component and see what it brings us.

次の章では、HttpFoundation コンポーネントを紹介し、それがもたらすものを見ていきます。