OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

Symfonyの基本動作についてまとめた

こんにちは!社員飲み会の準備で忙しい@mrtryです。

オトバンクでは、2週間に1回ペースで社内飲み会をしていまして、 私は料理好きということもあり、ケータリングの準備をお手伝いしております。 今回は、スモークチキンを準備しようと思い、この記事を書きつつ、燻製しています。 スモークチキンとビールを飲みたいと思った方は、こちらからご連絡いただければと思います!

それはさておき、今年新卒で入社した私ですが、学生の頃そこまでプログラミングをがっつり取り組んだことがありませんでした。 フレームワークも入社して初めて触ったばかりで、弊社で利用しているSymfonyについても理解できてないことが多い状態です。 この状況を打開すべく、Symfonyに関する勉強に力を入れ、更にブログを毎週書くことにしました! 基礎的なことから勉強したことをまとめて書いていくので、同じ初心者の方にはお役に立てるかもしれません!

今回は、基礎中の基礎からということで、Symfonyの基本動作について書きたいと思います。

Symfonyは、その動作から「Request/Response フレームワーク」と言われています。
説明のために、HTTPについて、簡単に復習していこうと思います。

HTTPの基本動作

HTTPとは、2台のコンピュータ間で、情報をやりとりするプロトコルです。
その動作は、以下のようになっています。

f:id:symmt9302:20160811145354p:plain

  1. クライアント側から「この情報をください」と「リクエスト」をサーバに送る
  2. それを受け取ったサーバがリクエストを元に処理を行う
  3. その処理結果を「レスポンス」としてクライアントに返す

これが、HTTPの基本動作です。
「相手に話しかけて、返事が返ってくる」という解釈をすると、
自然言語と一緒で理解しやすいですね!

Symfonyの基本動作

次に、Symfonyの基本動作を見ていきます。
Symfonyの基本動作は、HTTPの基本動作を元として設計されています。

f:id:symmt9302:20160809080152j:plain

  1. 「リクエストオブジェクト」を受け取る
  2. 「カーネル」に渡し、処理を行う
  3. その処理結果を「レスポンスオブジェクト」として返す

このように、SymfonyはHTTPと同じような振る舞いをします。
この設計から、Symfonyは「Request/Response フレームワーク」といわれています。

実際のプログラムでの対応

Symfonyの基本動作がわかったところで、実際のプログラムでは、どこが対応しているのかを確認してみます。

symfonyのデモアプリケーションを例として、基本動作とプログラムの対応を確認します。 symfony installerには、デモアプリケーションとしてブログを作成してくれるコマンドがあります。 任意のディレクトリにて、symfony demoを実行してみましょう。 実行すると、symfony_demoというディレクトリが作成されるかと思います。 動いているものを確認したければ、ビルドインサーバが入っているので、 php bin/console server:startと実行すれば、http://127.0.0.1:8000にて、デモのブログの確認できます。

作成されたsymfony_demoに移動し、web/app_dev.phpを見てみましょう。

<?php
...

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

...

/**
 * @var Composer\Autoload\ClassLoader $loader
 */
$loader = require __DIR__.'/../app/autoload.php';
Debug::enable();

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();

// リクエストを受け取る
$request = Request::createFromGlobals();

// リクエストをカーネルに渡して、処理した結果を受け取る
$response = $kernel->handle($request);

// レスポンスを返す
$response->send();

「リクエストを受け取り、処理行い、レスポンスを返す」という振る舞いが見て取れます。
振る舞いがそのままコードに表現されていて、わかりやすいですね!

おわりに

今回は、Symfonyの基本動作について紹介しました。
HTTPの振る舞いがそのままSymfonyに反映されていて、動きがイメージがしやすい、という印象でした。

次回は、カーネルが受け取ったリクエストがどのように処理されるかを書きたいと思います。

参考