Symfony4でアプリケーション開発はじめ2ヶ月ほど立ちました。今後Symfony Flexを中心に開発をすすめることになりそうなので、Symfony Flexを使用したアプリケーションの方法をまとめました。最終的に/echo
でアクセスすると{'message': 'echo!'}
を返すAPIサーバを構築します。はじめに、公式リファレンスでSymfony Flexの説明を確認します。正しい意味は原文より拾ってください。
概要
Symfony Flex is the new way to install and manage Symfony applications. Flex is not a new Symfony version, but a tool that replaces and improves the Symfony Installer and the Symfony Standard Edition.
Symfony FlexはSymfonyアプリケーションを設置・管理するための新たな方法です。FlexはSymfonyの新規バージョンではないですが、SymfonyインストーラーとSymfonyスタンダードエディションの改善とその代わりになるツールです。
Symfony Flex automates the most common tasks of Symfony applications, like installing and removing bundles and other Composer dependencies. Symfony Flex works for Symfony 3.3 and higher. Starting from Symfony 4.0, Flex should be used by default, but it is still optional.
Symfony FlexはSymfonyアプリケーションでの共通のタスクを自動化します。例えば、インストール・バンドルの削除・composerの依存などです。Symfony Flexは3.3かそれ以上のバージョンで動作します。Symfony 4.0からは、Flexは基本的に使われるべきですが、まだオプションとなります。
と言った内容が書かれています。Flexを通してプロジェクトを管理して問題なさそうです。
Symfony Flexアプリケーションの雛形の作成方法
composer create-project symfony/skeleton’ [プロジェクト名]
を実行することにより、Symfony Flexの雛形が作成されます。
composer create-project symfony/skeleton .
上記コマンドを元にDockerを使用して環境を構築します。
Docker環境の用意
今回は開発環境を想定しているため、以下のDockerfileを用意し、別途用意するdocker-compose.ymlファイルより起動を行います。
FROM php:7.2
RUN apt-get update
RUN apt-get install -y git zip unzip libzip-dev
RUN docker-php-ext-install -j$(nproc) zip
# composerのインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER 1
# composerの参照を日本に設定
RUN composer config -g repos.packagist composer https://packagist.jp
WORKDIR /var/www/html
EXPOSE 80
# CMD tail -f /dev/null
CMD ["php", "-S", "0.0.0.0:80", "-t", "./public", "./public/index.php"]
version: '3'
services:
app:
build: .
volumes:
- ./echo-api/:/var/www/html
ports:
- "80:80"
restart: always
上記の構成ファイルをを元にdocker-compose up
で環境の起動を行います。
Docker環境内でSymfonyプロジェクトの初期化
開発用のDockerが用意できました。次にdocker環境に入り、プロジェクトの初期化を行います。
docker exec -it {container id} bash
コマンドでDockerコンテナに入り、雛形を作成します。
composer create-project symfony/skeleton .
インストールが始まり、最終的に以下のディレクトリが生成されます。
ライブラリの追加
引き続きルーティング処理を使用できるようにするために'sensio/framework-extra-bundle'のインストールを行います。
composer require sensio/framework-extra-bundle
はじめ、routing
のライブラリをインストールし、動かそうとしたのですが、追加設定が必要でした。そのため、symfonyでアノテーションルーティングを追加しすぐに使用したい場合はsensio/framework-extra-bundle
が適しているかと思います。
echo apiの作成
/echo
にアクセスすると{'message': 'echo!'}
を返すAPIを用意します。src/Controller/EchoController.php
にファイルを作成し以下ファイルを作成します。
<?php namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Request;
/**
* Class EchoControllerTest
* @package App\Tests\Controller
*/
class EchoControllerTest extends WebTestCase
{
public function test_echo_index()
{
$client = $this->createClient();
$client->request(Request::METHOD_GET, '/echo');
$this->assertEquals($client->getResponse()->getContent(), '{"message":"echo!"}');
}
}
テストの実行
テストを実行し成功することを確認します。
php bin/phpunit
またブラウザhttp://127.0.0.1/echoからも確認を行い、表示されていることを確認します。
まとめ
- Symfony Flexを使用したマイクロフレームワークの開発の流れをデモアプリを元に紹介しました。
- 簡単なecho apiサーバを構築し簡易的なテストも実行しました。
- 作成した環境はdocker化しているため、どんな環境でも手軽に構築が可能です。
Symfony Flexを用いてマイクロフレームワークベースの簡易なプロジェクトを構成できました。アプリケーションを構築するにはデータベースとのやりとりも必要になってくるため、必要に応じて同じようにライブラリを追加することで、拡張することができます。