ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Phalcon とは
Phalcon は他の PHP フレームワークと異なり、PHP の C 拡張 (.so / .dll) として実装されている全部入り MVC フレームワーク。Composer で読み込む通常のフレームワークと違い、PHP 起動時に拡張としてロードされるため、起動コストが極めて低く、ベンチマークでは Laravel / Symfony を大きく上回る性能を出します。
主な特徴
| 項目 | 内容 |
|---|---|
| 言語 | Phalcon 4 まで: C 直書き / Phalcon 5: Zephir (PHP 風) で記述 → C にコンパイル |
| 配布形式 | PHP 拡張 (.so / .dll)、PECL / GitHub Release |
| 性能 | リクエスト/秒で Laravel の 2-5 倍 |
| メモリ | Composer 依存ベースのフレームワークより大幅に少ない |
| 機能 | MVC、DI、ORM、Volt テンプレート、ルーター、Session、Form、ACL |
| 仕様準拠 | PSR-3 / PSR-4 / PSR-7 / PSR-11 / PSR-16 / PSR-17 |
| ライセンス | BSD 3-Clause |
インストール
Linux (PECL)
# 前提: PHP 7.4 / 8.0 / 8.1 / 8.2 / 8.3 (Phalcon 5+ 対応)
sudo pecl install phalcon
# php.ini に追加
echo "extension=phalcon" | sudo tee /etc/php/8.3/cli/conf.d/50-phalcon.ini
echo "extension=phalcon" | sudo tee /etc/php/8.3/fpm/conf.d/50-phalcon.ini
# 確認
php -m | grep phalcon
php -r 'echo Phalcon\Version::get();'
Ubuntu / Debian (APT)
# 公式リポジトリを追加
curl -s "https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh" | sudo bash
sudo apt install php-phalcon
sudo systemctl restart php8.3-fpm
Windows
- GitHub Releases から
php_phalcon.dllをダウンロード (PHP バージョンと TS/NTS, x64/x86 一致が必須) php.iniにextension=php_phalcon.dll追記
Docker
FROM php:8.3-fpm
RUN apt-get update && apt-get install -y autoconf gcc make libpcre3-dev \
&& pecl install phalcon \
&& docker-php-ext-enable phalcon
Hello World
<?php
use Phalcon\Mvc\Micro;
$app = new Micro();
$app->get('/', function () {
echo 'Hello Phalcon!';
});
$app->get('/users/{id:[0-9]+}', function ($id) {
echo 'User ID: ' . (int) $id;
});
$app->handle($_SERVER['REQUEST_URI']);
フル MVC アプリの骨格
<?php
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Url;
use Phalcon\Db\Adapter\Pdo\Mysql;
$di = new FactoryDefault();
$di->set('view', function () {
$view = new View();
$view->setViewsDir(__DIR__ . '/app/views/');
return $view;
});
$di->set('url', function () {
$url = new Url();
$url->setBaseUri('/');
return $url;
});
$di->set('db', function () {
return new Mysql([
'host' => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'mydb',
]);
});
$app = new Application($di);
echo $app->handle($_SERVER['REQUEST_URI'])->getContent();
ORM (Phalcon\Mvc\Model)
<?php
use Phalcon\Mvc\Model;
class User extends Model
{
public $id;
public $name;
public $email;
}
// 検索
$users = User::find();
$user = User::findFirst(1);
$user = User::findFirst(['email = :em:', 'bind' => ['em' => 'a@b.com']]);
// 作成
$u = new User();
$u->name = 'Taro';
$u->email = 'taro@example.com';
if (!$u->save()) {
foreach ($u->getMessages() as $m) echo $m, "\n";
}
// 更新 / 削除
$u->name = 'Jiro';
$u->update();
$u->delete();
Volt テンプレートエンジン
{# layouts/main.volt #}
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title></head>
<body>
{% block content %}{% endblock %}
</body>
</html>
{# users/index.volt #}
{% extends 'layouts/main.volt' %}
{% block content %}
<h1>ユーザ一覧</h1>
<ul>
{% for u in users %}
<li>{{ u.name }} ({{ u.email }})</li>
{% else %}
<li>ユーザがいません</li>
{% endfor %}
</ul>
{% endblock %}
Volt は Twig 互換に近い構文。コンパイル後はネイティブ PHPになるため高速。
DI コンテナ
use Phalcon\Di;
$di = new Di();
// シングルトン
$di->setShared('mailer', function () {
return new Mailer(['host' => 'smtp.example.com']);
});
// ファクトリ
$di->set('logger', function () {
return new Logger('/var/log/app.log');
});
// 取得
$mailer = $di->get('mailer');
$mailer->send('to@example.com', 'Hi');
Devtools (CLI ツール)
# インストール
composer global require phalcon/devtools
# プロジェクト雛形作成
phalcon project myapp
# モデル生成
phalcon model users
phalcon all-models
# コントローラ生成
phalcon controller UserController
# マイグレーション
phalcon migration generate
phalcon migration run
性能比較 (参考値)
| フレームワーク | 相対 RPS | メモリ |
|---|---|---|
| 素の PHP | 1.0x | 最小 |
| Phalcon 5 | 0.7-0.9x | 小 |
| Slim 4 | 0.4-0.6x | 小 |
| Lumen | 0.3-0.5x | 中 |
| Symfony 6 | 0.2-0.3x | 大 |
| Laravel 11 | 0.15-0.25x | 大 |
※ 実測はキャッシュ (OPcache, JIT) / DB / アプリ複雑度に大きく依存。Phalcon は同等構成で 2-5 倍と言われます。
欠点 / 注意点
- 共有レンタルサーバで使えない: PHP 拡張のインストール権限が必要
- デバッグが難しい: 内部が C で書かれているため、Xdebug ステップインで深く追えない
- PECL / GitHub のビルドが PHP マイナーバージョンと厳密に対応: PHP 8.4 リリース直後は対応版待ち
- エコシステム: Laravel / Symfony 比でパッケージ数が圧倒的に少ない
- 学習リソース: 日本語情報少、英語公式ドキュメント主体
2026 年時点の活発度
- GitHub phalcon/cphalcon はメンテ継続中
- メジャー: Phalcon 5 (Zephir リライト版) が安定版
- コミュニティは Laravel に押されているが、性能特化案件で根強い支持
FAQ
Q: 新規プロジェクトで Phalcon を選ぶべき?
A: 一般的な Web アプリなら Laravel / Symfony 推奨。Phalcon が活きるのはRPS 重視 / 低メモリ要件 / 既存 Phalcon 資産ありのケース。
Q: Composer のパッケージは使える?
A: 使えます。Phalcon コア機能は拡張、追加ライブラリ (例: Guzzle / Carbon) は Composer で導入する併用パターンが一般的。
Q: Laravel から移行する価値はある?
A: 性能ボトルネックがフレームワーク起動コストにある場合のみ。多くの場合 DB / N+1 改善や OPcache / JIT 有効化で十分。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?