BEAR.Sundayとは
BEAR.Sundayは、クリーンなオブジェクト指向設計と、Webの基本原則に沿ったリソース指向アーキテクチャを組み合わせたPHPのアプリケーションフレームワークです。 このフレームワークは標準への準拠、長期的な視点、高効率性、柔軟性、自己記述性に加え、シンプルさを重視します。
フレームワーク
BEAR.Sundayは3つのフレームワークで構成されています。
Ray.Diは依存性逆転の原則に基づいてオブジェクトの依存をインターフェイスで結びます。
Ray.Aopはアスペクト指向プログラミングで本質的関心と横断的関心を結びます。
BEAR.Resourceはアプリケーションのデータや機能をリソースとしてREST制約で結びます。
フレームワークは、アプリケーション全体に適用される制約と設計原則です。一貫性のある設計と実装を促進し、高品質でクリーンなアプリケーションの構築を支援します。
ライブラリ
BEAR.Sundayはフルスタックフレームワークとは異なり、認証やデータベースなどの特定のタスクのための独自のライブラリは提供しません。その代わりに、高品質なサードパーティ製のライブラリを使用することを推奨します。
このアプローチは2つの設計思想に基づいています。1つ目は「フレームワークは変わらないがライブラリは変わる」という考え方です。フレームワークがアプリケーションの基盤として安定した構造を提供し続ける一方で、ライブラリは時間の経過とともに進化し、アプリケーションの特定のニーズを満たします。
2つ目は「ライブラリを選択する権利と責任はアプリケーションアーキテクトにある」というものです。アプリケーションアーキテクトは、アプリケーションの要件、制約、および目的に最も適したライブラリを選択する能力と責任を持ちます。
BEAR.Sundayは、フレームワークとライブラリの違いを”不易流行”(変わらぬ基本原則と時代とともに進化する要素)として明確に区別し、アプリケーション制約としてのフレームワークの役割を重視します。
アーキテクチャ
BEAR.Sundayは、従来のMVC(Model-View-Controller)アーキテクチャとは異なり、リソース指向アーキテクチャ(ROA)を採用しています。このアーキテクチャでは、アプリケーションの設計において、データとビジネスロジックを統一してリソースとして扱い、それらに対するリンクと操作を中心に設計を行います。リソース指向アーキテクチャはREST APIの設計で広く使用されていますが、BEAR.SundayはそれをWebアプリケーション全体の設計にも適用しています。
長期的な視点
BEAR.Sundayは、アプリケーションの長期的な維持を念頭に置いて設計されています。
-
制約: DI、AOP、RESTの制約に従った一貫したアプリケーション制約は、時間の経過とともに変わることはありません。
-
永遠の1.x: 2015年の最初のリリース以来、BEAR.Sundayは後方互換性のない変更を導入することなく、継続的に進化してきました。開発者はフレームワークの定期的な互換性破壊への対応とそのテストが必要という将来の技術負債を心配する必要がありません。
-
標準準拠: HTTP標準、JsonSchemaなどの標準に従い、DIはGoogle Guice、AOPはJavaのAop Allianceに基づいています。
接続性
BEAR.Sundayのリソースには、Webアプリケーション以外からも同じリソースとしてアクセスできます。
-
HTTPクライアント: HTTPで全てのリソースにアクセスできます。MVCのモデルやコントローラーと違い、BEAR.Sundayのリソースはクライアントから直接アクセス可能な設計です。
-
CLIツール: リソースはコマンドラインツールとしても使えます。Homebrewで配布でき、PHPやBEAR.Sundayを知らなくても、通常のUNIXコマンドとして扱えます。アプリケーション本体のバージョン管理から独立しているため、CLIツールとしての安定性を保てます。
-
composerパッケージ: composerでvendor下にインストールしたアプリケーションのリソースを直接呼び出せます。マイクロサービスにしなくても、複数のアプリケーションを協調させて動かせます。
-
多言語フレームワーク: BEAR.Thriftを使えば、PHP以外の言語や異なるバージョンのPHPとも連携できます。
Webキャッシュ
コンテンツの有効期限で古さを許容するTTLキャッシュと違い、リソースの状態が変わった瞬間にキャッシュを無効化します。
-
分散キャッシュ: キャッシュをクライアント、CDN、サーバーサイドに保存することで、CPUコストとネットワークコストの両方を削減します。
-
同一性確認: ETagを使用してキャッシュされたコンテンツの同一性を確認し、コンテンツの変更があった場合にのみ再取得することで、ネットワーク効率を向上させます。
-
耐障害性: イベントドリブンコンテンツの採用により、キャッシュに有効期限を設けないCDNキャッシュを基本としたシステムは、PHPやDBがダウンした場合でもコンテンツを提供し続けることができます。
パフォーマンス
アプリケーションの起動は、DIコンテナを実行時に操作しません。依存の解決はコンパイル時に終わっており、起動時に生成するのはルートオブジェクト1つだけです。このオブジェクトはリクエストをまたいで再利用されます。
Because Everything is a Resource
「全てがリソース」のBEAR.Sundayは、Webの本質であるリソースを中心に設計されたPHPのWebアプリケーションフレームワークです。その真の価値は、オブジェクト指向原則とREST原則に基づいた優れた制約をアプリケーション全体の制約として提供することにあります。
この制約は、開発者に一貫性のある設計と実装を促し、長期的な視点に立ったアプリケーションの品質を高めます。同時に、この制約は開発者に自由をもたらし、アプリケーション構築における創造性を引き出します。