webman について
PHP 開発者向けに webman フレームワークでの開発を案内するスキルです。常駐ワーカープロセスのモデルを重視し、構成、コマンド、規約、ライフサイクル上の注意点を扱います。
主な機能
- 01常駐ワーカーのメモリ動作の説明
- 02アプリケーションと設定の構成案内
- 03起動、リロード、再起動コマンドの提示
- 04PHP コントローラーとレスポンスの規約
- 05リクエスト状態の漏えいとメモリ増加の防止
活用シーン
- 01webman アプリケーションの作成や保守
- 02変更内容に応じたリロードと再起動の選択
- 03ワーカー間でのリクエストデータ漏えいの防止
- 04ライフサイクルやメモリ管理問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ zjkal/ webman-skill --skill webmanインストール後、Claude Code で/webmanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.gitignoreREADME.en.mdREADME.mdreferences/custom-process.mddatabase-redis.mdcoroutine.mdmiddleware.mdrouting-controller.mdplugin.mdmemory-lifecycle.md詳細
webman フレームワーク開発
webman は、workerman を基盤とする、高性能でプロセスのメモリに常駐する PHP フレームワークです。 PHP-FPM(リクエストごとに起動し、レスポンス後に終了)とは異なり、webman を正しく使うには、常駐プロセスモデルを理解することから始める必要があります。
中核となる考え方:メモリへの常駐
起動後、ワーカーはメモリに常駐し、数千件のリクエストを処理します。 これに伴う重要なルールは次のとおりです。
exit/dieは絶対に使わないでください:プロセス全体のワーカーを終了させ、そのプロセスのすべての接続を切断します。- 静的プロパティ/グローバル変数はリクエスト間で保持されます:前のリクエストで書き込まれたデータが、次のリクエストに「漏れる」ことがあります。リクエストスコープのデータは、ローカル変数、
$request属性、またはコルーチンではsupport\Contextに保存してください。 - シングルトンはリクエスト間で共有されます:シングルトンにリクエストの状態を保存しないでください。増え続けるだけの配列プロパティはメモリリークになります。
- コードの変更にはリロード/再起動が必要です(
php start.php reload)。デバッグモードでは、問題の診断にstatus/connectionsが役立ちます。 - コントローラーはデフォルトでリクエストごとに新規作成されます(
config/app.phpのcontroller_reuse => false)。再利用が有効な場合、コントローラーのプロパティもリクエスト間で保持されます。
プロジェクト構成
├── app/ # Application code
│ ├── controller/ # Controllers (optional; MVC or DDD as you prefer)
│ ├── model/ # Models
│ ├── middleware/ # Middleware
│ └── functions.php # Custom helpers
├── config/ # All configuration
│ ├── route.php # Routes
│ ├── process.php # Process definitions (HTTP, custom, timers)
│ ├── middleware.php # Middleware registration
│ ├── database.php # Database (illuminate/database)
│ ├── redis.php # Redis
│ └── plugin/ # Plugin config
├── plugin/ # Application plugins
├── public/ # Static assets (only web-accessible directory)
├── process/ # Custom process classes
├── support/ # Framework bridge code
└── start.php # Entry point
よく使うコマンド
composer create-project workerman/webman # create project
# Linux / macOS
php start.php start # foreground (debug)
php start.php start -d # daemon (production)
php start.php reload # graceful reload (code updates, keep connections)
php start.php restart -d # full restart (required after process.php, Timer, or resident data changes)
php start.php stop
php start.php status # process memory, request counts
php start.php connections # connection info
# Windows (no daemon / reload)
php windows.php
reload と restart の違い:reload はアプリケーションコード(app/ と config/ の大部分)のみを再読み込みします。config/process.php の変更や、onWorkerStart ですでに作成されたタイマー/接続は再読み込みされません。その場合は restart を使ってください。
コーディング規約
- PHP >= 8.0(webman v2 では 8.1 以上が必要)を使い、必ず
declare(strict_types=1)を宣言してください。 - コントローラーのシグネチャは
public function action(Request $request): Responseとし、support\Requestを使ってください。 - ヘルパー(
response()、json()、view()、redirect()など)を使ってWebman\Http\Responseを返してください。echoは使わないでください。 illuminate/database(Db::table()またはsupport\Modelを継承する Eloquent モデル)を優先してください。config('app.debug')で設定を読み込んでください。設定ファイルをincludeしないでください。error_logやechoではなく、support\Log(Log::info()/Log::channel('xx')->info())でログを記録してください。
やること/やってはいけないこと
| やってはいけないこと | やること |
|---|---|
リクエストを終了するために exit() / die() を使う | return response(...) を返すか、例外をスローする |
$_GET / $_POST / $_SESSION を使う | $request->get() / $request->post() / $request->session() を使う |
header() / setcookie() を使う | $response->header() / $response->cookie() を使う |
| 上限のない静的配列 | 上限付きキャッシュ(LRU)または Redis |
| シングルトンにリクエストデータを保存する | ローカル変数または support\Context(コルーチン) |
| アプリケーションコードでリクエストごとにタイマーを作成する | config/process.php でカスタムプロセスを使う |
| コルーチンでリクエスト状態に静的変数を使う | support\Context::set() / get() を使う |
リファレンス(必要に応じて参照)
- ルーティング、コントローラー、リクエスト/レスポンス API:references/routing-controller.md
- ミドルウェア(オンionモデル、CORS、認証):references/middleware.md
- データベース、Redis、キャッシュ、ページネーション、トランザクション:references/database-redis.md
- カスタムプロセス、WebSocket/TCP、タイマー:references/custom-process.md
- コルーチン(webman v2)、Context、並行処理、プール:references/coroutine.md
- ライフサイクル、メモリリーク、その予防:references/memory-lifecycle.md
- プラグイン開発(ライブラリプラグインとアプリケーションプラグイン):references/plugin.md
コメント
Markdown 対応