blackops / framework
BlackOps PHP Framework.
Requires
- php: >=8.5
- doctrine/dbal: ^4.4
- doctrine/migrations: ^3.9
- monolog/monolog: ^3.10
- nikic/fast-route: ^1.3
- nyholm/psr7: ^1.8
- psr/clock: ^1.0
- psr/container: ^2.0
- psr/http-factory: ^1.0
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^3.0
- symfony/config: ^7.4
- symfony/console: ^7.4
- symfony/dependency-injection: ^7.4
- symfony/stopwatch: ^7.4
- symfony/uid: ^7.4
- symfony/validator: ^7.4
Requires (Dev)
- carthage-software/mago: 1.42.0
- deptrac/deptrac: 4.6.2
- phpunit/phpunit: 13.2.2
README
BlackOpsは、PHP 8.5向けのHeadless Operation Frameworkです。同期HTTP実行とPostgreSQLを使ったDeferred実行を同じOperation Modelで扱い、Lifecycle Journal、Retry、Outcome、Retention、Project CLIを提供します。
Repository mainではNamed Doctrine DBAL Connection、Constructor Injection、#[Transactional]付きOperation/Service、Nested Required、#[AfterCommit]を利用できます。Latest Stable 1.1.0にはまだ収録されていません。
Status
Latest StableはFramework/Skeleton 1.1.0です。BlackOpsはExperimentalであり、1.x Minor間のBackward CompatibilityとProduction Readinessを保証しません。破壊的変更と移行手順はCHANGELOGとUpgrade Guideで確認してください。
Documentation WebsiteはLocal/CI Buildと公開Artifact境界まで検証済みです。公開は現在延期しているため、Cloudflare Pages ProjectとCredentialは設定せず、公開Hostも提供していません。Credential-gated Workflowは将来の公開経路として維持しています。
利用者向けの機能差と制約はCurrent Statusを参照してください。
Installation
公開済みSkeletonからApplicationを作成します。
composer create-project blackops/skeleton my-app 1.1.0
cd my-app
blackops new専用Installerは提供していません。Composer標準のcreate-projectが公式の作成方法です。
このCommandが作成するのはStable 1.1.0のApplicationです。StableにはHeader AuthenticationとPhase 13のDatabase/Transaction Journeyが未収録で、POST /ordersも含まれません。
Repository main Preview Quickstart
以下はStable 1.1.0で作成したmy-app向けではありません。利用者向けQuickstartの「Repository main Preview」でFramework SourceとQuickstartをLocal Path Repositoryとして準備してから、生成したblackops-preview DirectoryでDocker Image、Artifact、Databaseを明示的に準備します。
docker compose build app http docker compose run --rm app composer install docker compose run --rm app php blackops operation:list docker compose run --rm app php blackops build:compile docker compose run --rm app php blackops database:migrate docker compose up -d
確認用Endpoint:
curl -H 'X-Sample-Token: local-example' http://127.0.0.1:8080/welcome curl -X POST -H 'Content-Type: application/json' \ -H 'X-Sample-Token: local-example' \ -d '{"reference":"order-001"}' \ http://127.0.0.1:8080/orders curl -X POST -H 'Content-Type: application/json' \ -H 'X-Sample-Token: local-example' \ -d '{"reportName":"weekly","recipientEmail":"reports@example.com"}' \ http://127.0.0.1:8080/reports curl -X POST -H 'Content-Type: application/json' \ -H 'X-Sample-Token: local-example' \ -d '{"reference":"incident-demo-001","sensitiveNote":"private diagnostic note"}' \ http://127.0.0.1:8080/failures
/failuresのSafe 500が返すOperation IDは、Docker-only Quickstartではdocker compose run --rm app php blackops operation:inspect <id> [--json]へ渡します。PostgreSQLはHostへPublishせず、ViewerはCLI ContainerのLoopback限定なので、このDocker構成からHost BrowserへViewerを公開できません。ViewerはConsumer E2EのようにViewerとHTTP Clientを同じCLI Container/Local Network Namespaceへ置いて検証します。
Browserでphp blackops operation:viewerを使うには、Application/PHP CLI/PostgreSQL/Browserが同じLocal Network Namespaceから到達可能なNative Runtimeが必要です。Non-loopback Bindへ緩めません。Application/Framework相関Logはvar/log/application.jsonlで同じIDを使い、Sensitive ValueとActor IDをSafe Projectionします。
Stableとmain Previewの準備方法、利用可能なEndpointの差は利用者向けQuickstartを参照してください。
Full-stack Reference Application
BlackOps Boardは、Repository mainだけで提供するLocal Full-stack Reference Applicationです。QuickstartがFrameworkの最短ContractをHTTPとWorkerで確認するのに対し、BlackOps BoardはApplication-owned Authentication、SvelteKit Same-origin BFF、DBAL Domain Repository、Inline Post/Comment、Deferred Digest、Accessible Product UIまでを一つのBrowser Journeyで示します。
Community Board Guideは、空のLocal StateからSetup、Seed、通常Login、Inline/Deferred Journeyを再現し、BrowserからPostgreSQL/Workerまでの責任境界を説明します。公開Demo CredentialはLocal/Test Fixtureであり、Stable 1.1.0 Skeletonには含まれません。Community BoardとDocumentation Websiteは外部Hostingしていません。
Project CLI
Project Rootに置く薄いblackops EntrypointからFramework所有Generatorを利用できます。
php blackops make:operation Billing/CreateInvoice --type=billing.invoice.create php blackops make:migration CreateOrdersTable php blackops build:compile php blackops database:migrate --dry-run
Framework UpdateはProject Rootのblackopsや生成済みSourceを書き換えません。更新後のCommandとStubは、その後に新規生成するFileへ反映されます。
Development
Frameworkの開発CommandはWSL2内のRepository Rootで、Docker Composeを通して実行します。
docker compose build app docker compose run --rm app composer install docker compose run --rm app mago format --check src tests examples docker compose run --rm app mago lint docker compose run --rm app mago analyze docker compose run --rm app vendor/bin/phpunit docker compose run --rm app vendor/bin/deptrac
同じ品質GateはGitHub Actions CIでmainへのPushとPull Requestごとに実行されます。詳細な環境構築はDevelopment Setupを参照してください。
Documentation
- Framework利用者向けDocumentation
- Installation
- First Typed Self-handled Operation
- Local Runtime
- Framework実装者向けInternals
- Documentation Website Delivery
- Application Bootstrap
- Project Generators and Framework Updates
- Database Migrations
- Data Retention
