ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Silex とは
Silex は Fabien Potencier(Symfony の作者)が 2011 年に発表したPHP マイクロフレームワークです。Python の Flask、Ruby の Sinatra に強く影響を受けたルートとクロージャだけで API を組めるシンプルさで人気を博しました。
内部はSymfony2 のコンポーネントと DI コンテナPimpleで構成され、軽量ながら HttpFoundation / Routing / EventDispatcher 等の本格的な部品を持っていました。
典型的な Silex コード
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 Lumen | Laravel 派生 | Laravel API 互換、現在は Laravel 本体に統合進行中で位置付け曖昧 |
| Mezzio(旧 Zend Expressive) | Laminas | PSR-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("/hello/{name}", methods={"GET"})
*/
public function hello(string $name): Response
{
return new Response('Hello ' . htmlspecialchars($name));
}
}
Silex → Slim 4 への移行
マイクロフレームワーク同士で思想が最も近い移行先:
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 4 | PHP-DI / Pimple / 任意の PSR-11 コンテナ |
| Mezzio | Laminas 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 ヶ月が目安。テストが無いと倍以上。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?