Resource
すべてを URI で扱う
ページ、API、内部処理を ResourceObject として表現。GET / POST / PUT / DELETE の統一インターフェイスで、何を扱っているのかがコードから追えます。
Resource Oriented PHP Framework
Webの原則を、アプリケーションの内側まで。
一つの ResourceObject が、Web API・HTML・コンソール・AIの道具・ドキュメントになる。 書く場所は一つ。出口ごとに、作り直さない。
Core idea
Because Everything is a Resource.
GET app://self/article?id=42
→ HTML ・ JSON(HAL) ・ CLI ・ Tool Use ・ OpenAPI
同じ URI から、表現だけが変わる。
Why it all connects
BEAR.Sundayは、Webの原則(REST)をアプリケーション全体の設計制約にするPHPフレームワークです。 リンクや埋め込みで「リソース間の関係」を宣言すると、意図(What)と実行(How)が分かれます。 だから次のものが、後付けの機能ではなく構造から生まれます。
Web原則から見る関係を宣言する(URI・リンク・埋め込み)
↓ What(意図)と How(実行)を分離
埋め込みは関係の宣言。実行戦略はModuleで差し替え。
URI・型・スキーマが、そのままツール定義になる。
同じ状態から HTML・JSON・CLI・ドキュメント。
意味はリソースに残り、詳細は外側で替える。
Architecture
BEAR.Sundayは、フルスタックの便利箱ではなく、アプリケーションの形を保つフレームワークです。 ライブラリは選べる。制約は揺れない。その分、コードの意味が長く残ります。
Resource
ページ、API、内部処理を ResourceObject として表現。GET / POST / PUT / DELETE の統一インターフェイスで、何を扱っているのかがコードから追えます。
DI
Ray.Di によるコンパイル時の依存解決で、実行時のサービスロケータやグローバル状態に頼らない構造を保ちます。
AOP
ログ、キャッシュ、トランザクションなどを Ray.Aop で分離。ビジネスロジックの輪郭を曖昧にしません。
Value
BEAR.Sundayの価値は、便利機能の多さではなく、設計制約が長く効き続けることにあります。 Resource、context-agnostic DI、AOP、CDN中心のRead Modelが、開発、利用体験、ビジネス継続性へ 同じ構造から価値を届けます。
もたらす価値を見るResource、DI、AOP、Contextが責務を分け、実行モード分岐や暗黙の依存を追わずにビジネスロジックへ集中できます。
本質的に静的なRead ModelをCDN、ETag、304へ接続し、速く安定した応答を届けます。
後方互換性、標準技術、CDN中心設計により、移行、保守、運用の継続コストを下げます。
Technical features
BEAR.Sundayは、抽象的な設計思想だけのフレームワークではありません。 実行時性能、キャッシュ、並列実行、ドキュメント生成まで、技術的な特徴がアプリケーションの構造に直結します。
contextは組み立て時だけ使われ、生成後のオブジェクトはAPP_DEBUGや実行モードを参照しません。
TTLだけに頼らず、変更イベントからサーバーとCDNの依存キャッシュ、ETagを連鎖的に無効化します。
PHPが生成したHTTP表現をCDNにmaterializeし、変更がない限りCDNから配信し続けます。
複数アプリケーションをnamespaceとDI bindingで統合し、通信境界を作らずに独立性を保ちます。
BEAR.Sundayで作ったリソースはpackageとして取り込み、他のPHPアプリケーションからURIで呼び出せます。
URIがWhatを表し、HowをModuleへ隠蔽するため、埋め込みリソースの並列実行へコード変更なしで移行できます。
ApiDoc HTML、OpenAPI 3.1、JSON Schema、llms.txtへ接続し、実装から読めるドキュメントを生成できます。
AI-ready architecture
AIエージェントが設計を読み、変更し、レビューする時代には、暗黙の規約よりも 宣言性、明示性、トレーサビリティが価値になります。BEAR.Sundayはそれを アプリケーションの構造として持ちます。
AI時代の価値を読む入力、リンク、表現、キャッシュ方針を属性やスキーマで宣言。AI は暗黙の分岐を推測するより、宣言された意味を読み取れます。
ResourceObject の onGet / onPost、コンストラクタ注入、context module の束縛が、アプリケーションの実際の境界を明示します。
URI、HAL リンク、JSON Schema、OpenAPI、llms.txt が同じ意味モデルにつながり、変更理由と影響範囲を追跡しやすくします。
Traceable by design
URI、リンク、埋め込み、スキーマ、context module。アプリケーションの意味を 複数の場所に散らさず、たどれる単位として保ちます。
request
GET app://self/user?id=1
resource
User::onGet(int $id): static
representation
HAL / HTML / JSON / CLI
documentation
OpenAPI 3.1 / JSON Schema / llms.txt
<?php
namespace MyVendor\Project\Resource\Page;
use BEAR\Resource\Annotation\Link;
use BEAR\Resource\ResourceObject;
final class Profile extends ResourceObject
{
#[Link(rel: 'orders', href: 'app://self/orders?user_id={id}')]
public function onGet(int $id): static
{
$this->body = [
'id' => $id,
'name' => 'BEAR.Sunday',
];
return $this;
}
}Start small
Composerで雛形を作り、最初の Page Resource を書く。Webでもコンソールでも同じ意味を持つ 小さな単位から、長く育つアプリケーションを始められます。
Quick start
VENDOR=MyVendor PACKAGE=MyProject \
composer create-project bear/skeleton my-project
cd my-project
php bin/page.php get /hello