Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
BEAR.Sunday — リソース指向 PHP アプリケーションフレームワーク
Search
Akihito Koriyama
August 06, 2026
Programming
54
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BEAR.Sunday — リソース指向 PHP アプリケーションフレームワーク
Kimi K3生成によるBEAR.Sundayスライド
Akihito Koriyama
August 06, 2026
More Decks by Akihito Koriyama
See All by Akihito Koriyama
存在論的プログラミング: 時間と存在を記述する
koriym
5
1.2k
Be Framework: 生命システムとしての存在理解
koriym
0
190
新世界の理解
koriym
0
260
AI Centric
koriym
0
810
app-state-diagram
koriym
0
180
OOP, Double Dispatch and Visitor Pattern
koriym
3
220
BEAR.Sunday 2014-2024
koriym
0
110
イベント駆動コンテンツ (a.k.a Webアプリケーションの効率を再定義するBEAR.Sundayの分散キャッシングフレームワーク)
koriym
5
9.9k
Unconf: RWA読書会
koriym
0
700
Other Decks in Programming
See All in Programming
Foundry Localでエージェント開発
seosoft
0
190
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
170
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
200
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
150
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
970
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
6.7k
Heart of Swift Concurrency
koher
0
450
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
100
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
180
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
180
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
310
Jetpack Compose メカニズム
skydoves
0
330
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Thoughts on Productivity
jonyablonski
76
5.4k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Accessibility Awareness
sabderemane
1
210
Design in an AI World
tapps
1
310
Transcript
PHP · RESOURCE-ORIENTED FRAMEWORK BEAR.Sunday リソース指向アーキテクチャ(ROA)の PHP フレームワーク クリーンなオブジェクト指向設計と REST
の原則を組み合わせ、Web の根本原則を アプリケーション全体の制約にする。 Everything is a Resource. Ray.Di 依存性注入 Ray.Aop アスペクト指向 BEAR.Resource REST リソース 公式ドキュメントに基づく技術紹介 · 2026-08
0 1 · フ レ ームワ ー ク 概 要
BEAR.Sunday とは 3 つの小さな専門フレームワークを土台に、データとビジネスロジックを「リソース」として統一する PHP アプリケーションフレー ムワーク。アプリ全体に及ぶ制約が、長期的な品質と一貫性をもたらします。 Ray.Di Ray.Aop BEAR.Resource 依存性注入(DI) アスペクト指向(AOP) REST リソース 依存関係逆転の原則でオブジェクトの依存をイ 本質的関心と横断的関心をアスペクト指向で接 REST 制約でアプリのデータと機能を、リンク ンターフェース化。Google Guice の設計思想を 続。Java AOP Alliance に準拠。 可能で操作可能なリソースとして接続。 採用。 “ フレームワークは残り、ライブラリは変わる。BEAR.Sunday は認証や DB といった専用ライブラリを内蔵せず、良質なサードパーティ 製ライブラリを選ぶ権利と責任をアプリケーションアーキテクトに委ねます。フレームワークはあくまでアプリケーションの制約として 存在します。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 02 / 17
02 · 設計思想 長期メンテナンスのための設計 01 Eternal 1.x —— 後方互換を決して壊さない 2015
年の初版以来、後方互換性を壊す変更を一度も導入せず進化を続けています。古くなったコードは deprecated 属性を付けるだけで削除 せず、新機能は常に「追加」の形で導入。互換性修正や回帰テストが不要になり、技術的負債が将来に持ち越されません。 02 標準を採用し、独自ルールを排する HTTP・JsonSchema・HAL・vnd.error+json などの標準技術を積極採用。DI は Google Guice、AOP は Java AOP Alliance に準拠し、フレー ムワーク固有のバリデーションルールや独自規約を可能な限り排除しています。 03 制約は自由をもたらす DI・AOP・REST が課す一貫した制約は時間を経ても変わらず、開発者を一貫した設計・実装に導き、アプリケーションの品質を長期的に高 めます。継承より合成、すべては注入——創造性はアプリケーション側に残されます。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 03 / 17
03 · アーキテクチャ リソース指向アーキテクチャ:Everything is a Resource URI アプリ内のすべてのリソースに URI
を付与。URI は識別子であると同時 ResourceObject Renderer(注入) に、リソース間のリンクを表現します。 onGet / onPost / onPut… リソース状態を リソース状態のみを設定 状態表現に変換 統一インターフェース code · headers · body GET / POST / PUT / PATCH / DELETE / OPTIONS でリソースを操作。リ ソースの種類によらない共通インターフェースです。 ハイパーメディア JSON 各リソースはハイパーリンクで affordance(利用可能な操作)を提示し、 HTML クライアントをアプリ内で導きます。 コードは同一のまま、コンテキストで Renderer の束縛を切り替えるとリソースの表現 状態と表現の分離 形式が変わります。 リソースクラスは状態のみを管理。注入された Renderer が状態を JSON・HTML などの表現に変換し、ドメインロジックと表現ロジックを 疎結合に保ちます。 ROA は通常 REST API 設計に使われますが、BEAR.Sunday はそれを Web アプリケ ーション全体に拡張しています。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 04 / 17
03 · アーキテクチャ 従来の MVC との違い 観点 リクエスト処理 入力の取得 従来の
MVC BEAR.Sunday の ROA コントローラがリクエストオブジェクトを受け取り、一連の処理 リソースは単一責任の原則に従い、リクエストメソッドで自身の状態 を制御してレスポンスを返す を宣言するだけ。表現には関与しない コントローラがリクエストオブジェクトから手動で値を取り出す 必要な変数をメソッド引数として宣言的に定義し、JsonSchema で検 証・文書化 リソース間の関係 コントローラとモデルの関係に制約がない リソース同士は URI とハイパーリンクで明示的に合成。包含関係や木 構造を宣言的に定義し情報隠蔽を保つ 外部アクセス モデルやコントローラは HTTP 経由で直接アクセスできない すべてのリソースに HTTP で直接アクセスできる 制約が増えるほど自由度は上がる——一貫したインターフェースがリソースをテスト可能・リンク可能・キャッシュ可能にします。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 05 / 17
03 · アーキテクチャ 実行メカニズム:コンパイル → リクエスト → レスポンス 0 Compile
コンパイル 1 Request リクエスト 2 Response レスポンス コンテキストに応じて DI / AOP でアプリケ HTTP リクエストがルータでリソースリク ーションオブジェクト $app を構築 エストに変換される router · resource · transfer をオブジェクト onGet / onPost がリソース状態を設定 される グラフとして接続 #[Embed] / #[Link] で他リソースを合成可能 Transfer が表現をクライアントへ シリアライズされ、各リクエストで再利用 される メソッドの前後で AOP によるログ・認証な リソースに Renderer を注入 状態が HTML / JSON などに表現 転送 どを実行 リソースのメソッドは状態だけに関心を持ち、表現には関与しません。AOP のアスペクトも自分が束縛されていることを知らない——各層はインターフェ ースにのみ依存し、完全に分離されています。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 06 / 17
04 · 依存性注入 Ray.Di:コンパイル時に解決する DI Guice の系譜 Google Guice の設計思想を採用し、その機能のほぼすべてを
モジュール内の束縛 DSL カバー // クラス束縛 コンパイル時解決 依存解決はコンパイル時に完了。実行時のコンテナ参照が なく、実行時解決型の DI コンテナより高速 $this->bind($iface)->to($class); // ファクトリ / インスタンス束縛 $this->bind($iface)->toProvider($prov); コンテキスト束縛 束縛をコンテキストで切り替え、テスト時に別実装を注入 可能 $this->bind($iface)->toInstance($obj); // 名前付き束縛とシングルトン $this->bind($iface) ->annotatedWith($anno) Attribute 設定 PHP Attribute による設定でコードの自己記述性を向上 ->to($class); $this->bind($iface)->to($class) 可視化 オブジェクトの依存関係をグラフとして可視化できる ->in(Scope::SINGLETON); 依存は責務ごとに横方向へ分割され、さらに縦方向の依存ツリーを形成。そ れぞれ独立して開発・テストできます。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 07 / 17
0 4 · ア スペ ク ト 指 向 Ray.Aop:横断的関心の分離
関心の分離 ビジネスロジックと、ログ・キャッシュ・トランザクション・セ キュリティなどの横断的関心を分離 インターセプタ:メソッド呼び出しの前と後 class MyInterceptor 宣言的な束縛 implements MethodInterceptor PHP Attribute でインターセプタをクラスとメソッドに束縛。 { Java AOP Alliance に準拠 public function invoke( MethodInvocation $invocation Matcher による探索 条件に合うクラスとメソッドを「検索」して束縛。コ ){ // メソッド呼び出しの前 … ンテキストで柔軟に切り替え可能 $result = $invocation->proceed(); 横断的な制約 // メソッド呼び出しの後 … AOP は秩序を破る特権ではなく、アプリケーションに横断的 return $result; な制約を確立するパラダイム } } 組み込み Matcher インターセプタはメソッド・引数・インスタンスを検査し、横断的ロジックを any · annotatedWith · subclassesOf · startsWith · logicalOr · logicalAnd · logicalNot 実行してから元のメソッドに委譲。1 つのインターセプタを多数のメソッドに 適用できます。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 08 / 17
0 4 · コ ン テ キス ト コンテキスト文字列:グローバルなモード定数は存在しない コンテキスト文字列(例)
prod-hal-api-app モジュールのインストール順(右から左へ解析。後にインストールされたモジュールが先の束縛を上書き可能) AppModule ApiModule 振る舞いはコンテキストが決める コンパイル時にのみ存在 HalModule ProdModule ← 最も優先度が高い 各セグメントが DI モジュールに対応し、環境に応じた if 分岐ではなく束縛の組み合わせがアプリの振る舞いを決定 コンテキストはオブジェクトグラフの構築にのみ使われ、アプリケーションコードは自分がどのコンテキストで動いているかを 知る術も必要もない APP_DEBUG / APP_MODE は存在しない 組み込みコンテキスト 振る舞いの変更 = インターフェースから実装への束縛の変更。コード自体は変えない api · cli · hal · prod は組み合わせ可能。src/Module/ に同名モジュールを置けばカスタムが優先される 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 09 / 17
05 · パフォーマンスとスケーラビリティ イベント駆動の CDN 分散キャッシュ クライアント CDN エッジキャッシュ(Fastly 等)
オリジン BEAR.Sunday リソース変更イベント → 即時パージ + ETag 更新 変更がなければ ETag で素早く同一性を確認し、304 Not Modified を返してネットワーク負荷を最小化 TTL を超えて セマンティックな無効化 生存時間に頼らず、リソース状態の変更イベントで CDN とサーバー側のキ GET / PUT などのメソッドに意味的な役割を持たせ、依存リソース ャッシュを即時無効化 のキャッシュを協調的に無効化。一貫性と鮮度を保証 Donut Caching + ESI 高い障害耐性 CDN エッジで部分的に更新。ページ全体を再キャッシュせず必要な部分 コンテンツは CDN に永続保存。PHP や DB がダウンしてもサービ だけ動的に刷新 スは継続し、単一障害点を排除 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 10 / 17
05 · パフォーマンスとスケーラビリティ 実行時最適化と透過的並列実行 実行時最適化 コンパイル時 DI 透過的並列実行 依存解決はコンパイル時に完了し、実行時のコンテナ 参照はゼロ
単一ルートオブジェクト アプリ全体が 1 つのルートオブジェクト変数 コンパイル済み依存グラフと opcache で高速ブートストラッ プ Swoole app://self/user は「ユーザー情報が欲しい」とい う意図だけを表し、MySQL か Redis かはアプリから隠蔽 として生成され、リクエスト間で再利用 php-fpm URI は意図を表す What / How の分離 #[Embed] で埋め込まれた複数リソースを並列取 得。アプリコードの変更は不要 3 段階の選択肢 ext-parallel(スレッドプール)/ Swoole(コルーチ ン)/ mysqli(DB クエリのみ) 永続ワーカーによりブートは初回の一度だけ。コルーチンコン テキストによるリクエスト分離で、スーパーグローバルに頼らず安全に並 行処理 標準的な PHP で開発・デバッグし、本番では設定変更だけで並列実行に切 り替え——10 年前に書いたリソースクラスも、モジュールを追加するだけで 並列化の恩恵を受けられます。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 11 / 17
06 · 接続性 1 つのリソース、多彩なアクセス方法 一度作ったリソースは、コードを変えずに Web・コンソール・他アプリ・他言語からアクセスできます。 HTTP クライアント MVC
のモデルやコントローラと異なり、すべてのリソースに HTTP で直接アクセスできます。 コンソールアクセス ソースコードを変えずにコンソールからリソースへ直接アクセス。同一リソースを Web とコマンドラインの両方 で利用。 BEAR.CLI リソースを独立した UNIX コマンドとして配布し、Homebrew 経由でインストール可能に。 Composer パッケージ vendor ディレクトリの他の BEAR.Sunday アプリのリソースを直接呼び出し。マイクロサービスなしで複数アプ リが連携。 BEAR.Thrift 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 他言語・他の PHP バージョンと効率的に相互運用。異なる PHP バージョンの共存も可能です。 12 / 17
07 · 開発者体験 開発者体験:テストしやすく、自己文書化され、観測できる なぜテストしやすいのか アプリケーションがドキュメントになる ステートレスなリソース コードから ApiDoc HTML・OpenAPI
3.1・JSON Schema・llms.txt 各リソースは独立しており、REST リクエストは無状 態。隔離したテストが書きやすい を自動生成。ALPS プロファイルを SSOT(信頼できる唯一の情報 源)とすれば、同じ文書が開発者・アーキテクト・AI それぞれに届 状態を直接検証 状態と表現が分離しているため、HTML 表現のリソースでも状 態を直接アサートできる ハイパーメディアテスト きます。 可視化とデバッグ リンクをたどる API テストが可能。PHP と HTTP で 同じテストコードを共有 開発中は HTML 上でリソースの範囲を表示し、状態をモニタリン グ。PHP コードとテンプレートをオンラインエディタで編集して即 時反映できます。 コンテキスト注入 テスト用コンテキストで別実装を束縛。コードを変えずにテ ストダブルを注入 セキュリティ分析に適した構造 エンドポイントは ResourceObject、入力は JsonSchema で宣言、依 存はコンストラクタ注入で明示。隠れた魔法がないため、SAST / DAST / 汚染解析 / AI 監査が完全なデータフローを追跡できます。 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 13 / 17
08 · 品質と互換性 コード品質と互換性の約束 非循環依存の原則(ADP):依存は一方向で循環しない。各層は上位の存在を知らない ray/aop ray/di bear/resource bear/sunday bear/package
各パッケージは独立して更新可能。システム全体をロックするバージョン番号も、オブジェクト間に横断依存を持つプロキシ機構も存在しません コード品質の基準 互換性の約束 テストカバレッジ 100%、型カバレッジはほぼ 100% セマンティックバージョニング(Semver)に準拠し、破壊的なメジ Psalm と PHPStan の最も厳しいレベルで静的解析を適用 本質的にイミュータブルなシステムで、テストのたびの初期化も不要。 Swoole などの非同期エンジンの力を解放します ャーアップグレードは行わない composer update はいつでも実行可能。マイナーアップグレードで アプリコードの変更は不要 PHP のメジャーアップグレード(例:5.6 → 7.0)でも、アプリケー ションコードの互換性は壊れない 現在のサポート対象は PHP 8.1 – 8.4(8.4 が現在の安定版) 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 14 / 17
09 · クイックスタート 3 ステップで最初のリソースを作る 1 Composer でプロジェクトスケルトンを作成 VENDOR=MyVendor PACKAGE=MyProject
composer create-project bear/skeleton my-project 2 ページリソース src/Resource/Page/Hello.php を作成 class Hello extends ResourceObject { public function onGet(string $name = 'BEAR.Sunday'): static { $this->body = ['greeting' => 'Hello ' . $name]; return $this; } } 3 コンソールと Web の両方から同じリソースにアクセス php bin/page.php get '/hello?name=World' 200 OK · application/hal+json php -S 127.0.0.1:8080 -t public { "greeting": "Hello World", curl -i 127.0.0.1:8080/hello "_links": { "self": { "href": "/hello?name=World" } } } 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 15 / 17
10 · 価値 変わらない制約がもたらす、3 者への価値 開発者にとって ユーザーにとって ビジネスにとって 時間を経ても変わらない堅牢な制約で、コアなビ 実行時最適化と
CDN キャッシュ戦略による、高 一貫した構造が持続可能な開発プロセスを促進し、 ジネスロジックに集中できる 速でレスポンシブな体験 開発コストを削減 一貫したガイドラインと構造で、チームのコード 単一障害点を最小化し、安定したサービスを享受 後方互換の維持が技術的継続性を高め、保守コスト は疎結合かつ統一される できる を削減 ライブラリを内蔵しない方針が、コンポーネント 優れた接続性で、他言語・他システムとの連携が DI / AOP で最小限のコード変更のままビジネスの成 選定の柔軟さと自由をもたらす 容易 長に拡張できる DI + ROA でテストが書きやすい 高いパフォーマンスと可用性が満足度とロイヤルテ ィを向上 「優れた制約は変わらない。」—— BEAR.Sunday 公式ドキュメント 出典:BEAR.Sunday 公式ドキュメント(2026-08-07 参照) 16 / 17
Everything is a Resource. Web の原則と精神に基づき、明確な制約で柔軟かつ堅牢なアプリケーションを構築する。 リ ソ ース と
リ ン ク 公式ドキュメント・マニュアル フレームワークリポジトリ DI / AOP bearsunday.github.io github.com/bearsunday/BEAR.Sunday ray-di/Ray.Di · ray-di/Ray.Aop AI 可読ドキュメント bearsunday.github.io/llms-full.txt 本プレゼンテーションは BEAR.Sunday 公式ドキュメント(llms-full.txt)に基づき作成 · 2026-08-07 参照 · 技術紹介目的