mcpField
W
webman

webman

github.com/zjkal開発1251 回インストール13 週間前に更新
リポジトリ

webman について

PHP 開発者向けに webman フレームワークでの開発を案内するスキルです。常駐ワーカープロセスのモデルを重視し、構成、コマンド、規約、ライフサイクル上の注意点を扱います。

主な機能

  1. 01常駐ワーカーのメモリ動作の説明
  2. 02アプリケーションと設定の構成案内
  3. 03起動、リロード、再起動コマンドの提示
  4. 04PHP コントローラーとレスポンスの規約
  5. 05リクエスト状態の漏えいとメモリ増加の防止

活用シーン

  1. 01webman アプリケーションの作成や保守
  2. 02変更内容に応じたリロードと再起動の選択
  3. 03ワーカー間でのリクエストデータ漏えいの防止
  4. 04ライフサイクルやメモリ管理問題の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zjkal/webman-skill --skill webman

インストール後、Claude Code で/webmanを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
.gitignore
README.en.md
README.md
references/
custom-process.md
database-redis.md
coroutine.md
middleware.md
routing-controller.md
plugin.md
memory-lifecycle.md

詳細

webman フレームワーク開発

webman は、workerman を基盤とする、高性能でプロセスのメモリに常駐する PHP フレームワークです。 PHP-FPM(リクエストごとに起動し、レスポンス後に終了)とは異なり、webman を正しく使うには、常駐プロセスモデルを理解することから始める必要があります。

中核となる考え方:メモリへの常駐

起動後、ワーカーはメモリに常駐し、数千件のリクエストを処理します。 これに伴う重要なルールは次のとおりです。

  1. exit / die は絶対に使わないでください:プロセス全体のワーカーを終了させ、そのプロセスのすべての接続を切断します。
  2. 静的プロパティ/グローバル変数はリクエスト間で保持されます:前のリクエストで書き込まれたデータが、次のリクエストに「漏れる」ことがあります。リクエストスコープのデータは、ローカル変数、$request 属性、またはコルーチンでは support\Context に保存してください。
  3. シングルトンはリクエスト間で共有されます:シングルトンにリクエストの状態を保存しないでください。増え続けるだけの配列プロパティはメモリリークになります。
  4. コードの変更にはリロード/再起動が必要です(php start.php reload)。デバッグモードでは、問題の診断に status / connections が役立ちます。
  5. コントローラーはデフォルトでリクエストごとに新規作成されます(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() を使う

リファレンス(必要に応じて参照)

コメント