この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-06-11 07:12:00

タイトル: Silex
SEOタイトル: Silex とは(Symfony2 ベースのマイクロフレームワーク・2018 EOL・移行先)

この記事の要点
  • Silex は Symfony2 のコンポーネントを使った PHP マイクロフレームワーク。2011 年登場、Sinatra/Flask 風 API が特徴
  • 2018 年 6 月で EOL。公式に「Symfony 4.0 を使え」と宣言され、現在は新規採用非推奨
  • 直接の後継: Symfony 4.0+(Flex で薄く構成可能)
  • 別の代替: Slim Framework(同コンセプト)/ Laravel Lumen(Laravel 派生)/ Mezzio(旧 Zend Expressive、PSR-15)
  • 移行作業の中心はルート定義の書換Pimple DI から Symfony DI への置換

Silex とは

Silex は Fabien Potencier(Symfony の作者)が 2011 年に発表したPHP マイクロフレームワークです。Python の Flask、Ruby の Sinatra に強く影響を受けたルートとクロージャだけで API を組めるシンプルさで人気を博しました。

内部はSymfony2 のコンポーネントと DI コンテナPimpleで構成され、軽量ながら HttpFoundation / Routing / EventDispatcher 等の本格的な部品を持っていました。

典型的な Silex コード

<?php
// index.php
require_once __DIR__ . '/vendor/autoload.php';

$app = new Silex\Application();

// ルート(GET)
$app->get('/hello/{name}', function ($name) use ($app) {
    return 'Hello ' . $app->escape($name);
});

// POST
$app->post('/api/users', function (Symfony\Component\HttpFoundation\Request $request) {
    $data = json_decode($request->getContent(), true);
    return $app->json(['id' => 123, 'name' => $data['name']], 201);
});

// ミドルウェア
$app->before(function ($request) {
    // 認証チェック等
});

// サービス登録(Pimple)
$app['db'] = function () {
    return new PDO('mysql:host=localhost;dbname=app', 'user', 'pass');
};

$app->run();

EOL(End of Life)

Silex は2018 年 6 月 1 日に正式に EOL(開発終了)を迎えました。公式アナウンスは以下の通り:

  • セキュリティアップデート提供終了
  • 後継としてSymfony 4.0 を Flex で軽量構成することを推奨
  • GitHub リポジトリはアーカイブ状態

現在の代替候補

代替系譜特徴
Symfony 4.0+(Flex 構成)本家後継必要なバンドルだけ入れて軽量化、Silex に最も近い
Slim Framework 4独立同じマイクロ思想、PSR-7/15 完全準拠
Laravel LumenLaravel 派生Laravel API 互換、現在は Laravel 本体に統合進行中で位置付け曖昧
Mezzio(旧 Zend Expressive)LaminasPSR-15 ミドルウェアファースト
Flight独立超軽量、学習用

Silex → Symfony 4 への移行

公式が推奨する最短ルート。中心はルート定義の置換DI コンテナの置換です:

# 新規 Symfony プロジェクト
composer create-project symfony/skeleton:^4.4 new_app
cd new_app

# 必要なバンドルだけ追加
composer require annotations          # @Route アノテーション
composer require twig                 # テンプレ(不要なら省略)
composer require doctrine/orm         # ORM(不要なら省略)

# コントローラ生成
php bin/console make:controller HelloController
// src/Controller/HelloController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HelloController
{
    /**
     * @Route(&quot;/hello/{name}&quot;, methods={&quot;GET&quot;})
     */
    public function hello(string $name): Response
    {
        return new Response('Hello ' . htmlspecialchars($name));
    }
}

Silex → Slim 4 への移行

マイクロフレームワーク同士で思想が最も近い移行先:

<?php
use Slim\Factory\AppFactory;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/hello/{name}', function (
    ServerRequestInterface $req,
    ResponseInterface $res,
    array $args
): ResponseInterface {
    $res->getBody()->write('Hello ' . htmlspecialchars($args['name']));
    return $res;
});

$app->post('/api/users', function ($req, $res) {
    $data = json_decode((string) $req->getBody(), true);
    $res->getBody()->write(json_encode(['id' => 123, 'name' => $data['name']]));
    return $res->withHeader('Content-Type', 'application/json')->withStatus(201);
});

$app->run();

DI コンテナの移行(Pimple → 各種)

移行先DI コンテナ
Symfony 4+symfony/dependency-injection(PSR-11)
Slim 4PHP-DI / Pimple / 任意の PSR-11 コンテナ
MezzioLaminas ServiceManager / PHP-DI / Pimple
// Silex (Pimple)
$app['db'] = function () { return new PDO(...); };
$pdo = $app['db'];

// Slim 4 + PHP-DI
$container = new DI\Container();
$container->set('db', function () { return new PDO(...); });
AppFactory::setContainer($container);
$app = AppFactory::create();
// 取得
$pdo = $app->getContainer()->get('db');

// Symfony 4+ (yaml で定義)
# config/services.yaml
services:
    PDO:
        factory: ['App\Factory\PdoFactory', 'create']
# コンストラクタインジェクション
public function __construct(private PDO $pdo) {}

移行戦略の選び方

あなたの状況推奨
Symfony の知識を活かしたいSymfony 4+ Flex 構成
マイクロのままがいいSlim 4
チーム人材確保が最優先Laravel(マイクロを諦める)
大規模化予定Symfony 5/6(フル構成)
標準準拠が重要(PSR-7/15)Slim 4 / Mezzio

EOL コードベースの運用

すぐ移行できない場合の最低限の防衛策:

  • PHP は最新 LTS に上げる(Silex 自体は PHP 7.x までは動く可能性)
  • 依存パッケージを composer audit で脆弱性チェック
  • 外部公開部分に WAF / Cloudflare を入れる
  • 移行計画を必ず立てる(先送りすると技術的負債が雪だるま式)

FAQ

Q: Silex は今でもインストールできる?
A: Composer で silex/silex はまだ取得可能。ただし PHP 8 では各所で警告・エラーが出る。新規採用は絶対避けるべき

Q: Symfony は重そう。マイクロのままがいい
A: Symfony 4+ は symfony/skeleton で最小構成から始められる。必要なバンドルだけ追加すれば Silex 並みに軽量。

Q: 移行に何ヶ月かかる?
A: 規模次第。小規模 API(10 ルート、コード 1000 行)なら 1-2 週間、中規模(50 ルート、外部連携あり)なら 2-3 ヶ月が目安。テストが無いと倍以上