【カスタムコマンド作成機能】

はじめに

SOCKET-MANAGER Framework は、ステートマシンベースのソケット通信アプリケーション開発を効率化するための PHP フレームワークです。
本ドキュメントでは、フレームワークの大きな特徴である カスタムコマンド作成機能について詳しく解説します。

開発環境に依存しないビルトインコマンドに加え、プロジェクト固有の処理を CLI コマンドとして追加できるため、開発効率の向上チーム内の共通タスクの自動化に役立ちます。

ビルトインコマンドの概要

SOCKET-MANAGER Framework には、用途別に分類された 3 種類のビルトインコマンドが用意されています。
これらはプロジェクト環境に依存せず、どのアプリケーションでも共通して利用できます。

● craft(SocketManager ライブラリ用)

ソケット通信アプリ開発向け。
ステートマシンを使った複雑なシーケンス構築や IPC(プロセス間通信)を伴う処理の自動生成をサポート。

● runtime(RuntimeManager ライブラリ用)

常駐型アプリケーション向け。
ステートマシンによる高度な状態遷移処理を組み込んだランタイムユニットを生成。

● simple(SimpleSocket ライブラリ用)

単純な送受信や IPC を含む軽量ソケット通信アプリ向け。
TCP/UDP のメイン処理クラスを素早く生成。

ビルトインコマンドの Usage

プロジェクトルートで以下を実行すると、利用可能なコマンド一覧(Usage)が表示されます。
php worker
                    

ビルトインコマンドのみの場合は以下のように表示されます。
SOCKET-MANAGER Framework 1.X.X

Usage:
  command [arguments]

 main
  Empty...
 craft
  craft:init <初期化クラス名>                     初期化クラスの生成
  craft:parameter <UNITパラメータクラス名>        UNITパラメータクラスの生成
  craft:protocol <プロトコルUNIT定義のクラス名>   プロトコルUNIT定義のクラスとステータス名Enumの生成
  craft:command <コマンドUNIT定義のクラス名>      コマンドUNIT定義のクラスとキュー/ステータス名Enumの生成
  craft:main <メイン処理のクラス名>               メイン処理クラスの生成
  craft:setting <設定ファイル名>                  設定ファイルの生成
  craft:locale <メッセージファイル名>             メッセージファイルの生成
 runtime
  runtime:init <初期化クラス名>                   初期化クラスの生成
  runtime:parameter <UNITパラメータクラス名>      UNITパラメータクラスの生成
  runtime:units <ランタイムUNIT定義のクラス名>    ランタイムUNIT定義のクラスとキュー/ステータス名Enumの生成
  runtime:main <メイン処理のクラス名>             メイン処理クラスの生成
 simple
  simple:tcp-server <メイン処理のクラス名>        TCPサーバー用メイン処理クラスの生成
  simple:tcp-client <メイン処理のクラス名>        TCPクライアント用メイン処理クラスの生成
  simple:udp <メイン処理のクラス名>               UDP通信用メイン処理クラスの生成
                    

カスタムコマンドの追加表示

カスタムコマンドを追加すると、Usage の最後に custom カテゴリが自動的に追加されます。

例:sample というカスタムコマンドを追加した場合
 custom
  custom:sample <カスタム名> => サンプルコマンド
                    

commands ディレクトリが存在しない場合は、custom カテゴリ自体が表示されません。

カスタムコマンドの作成方法

カスタムコマンドは、プロジェクト内の以下のディレクトリ構造で定義します。
/commands
  /<コマンド名>
    command.php
    params.php
    template.php.tpl
                    

この 3 ファイルを配置するだけで、SOCKET-MANAGER Framework が自動的にコマンドを認識し、Usage に追加します。

コマンド定義ファイル

コマンドの基本情報を定義します。
<?php

return [
    'name'        => 'controller',
    'description' => 'Create a new controller class',
    'template'    => 'template.php.tpl',
    'output'      => 'app/Controllers/<%= name %>Controller.php',
];
                    

● 主な項目

項目 説明
name コマンド名(custom:controller のように使用される)
description Usage に表示される説明文
template 使用するテンプレートファイル
output 生成ファイルの出力パス(テンプレート変数が利用可能)

テンプレート変数の定義

テンプレート内で <%= namespace %> のように使用される変数を定義します。
<?php

return [
    'namespace' => 'App\\Controllers',
    'baseClass' => 'BaseController',
];
                    

● テンプレート変数の補足

  • <%= name %> はコマンド実行時に指定した <カスタム名> が自動で入ります。
  • その他の変数は params.php で定義した値が使用されます。

出力テンプレート

生成されるファイルのテンプレートです。
<?php

namespace <%= namespace %>;

class <%= name %>Controller extends <%= baseClass %>
{
    public function __construct()
    {
        // ...
    }
}
                    

テンプレートエンジンが <%= ... %> を置換し、最終的な PHP クラスファイルが生成されます。

カスタムコマンドの実行例

以下のように実行します。
php worker custom:controller User
                    

生成されるファイル例

app/Controllers/UserController.php
                    

内容はテンプレートに基づいて自動生成されます。

カスタムコマンドの活用例

  • プロジェクト固有の スキャフォールディング(scaffolding) を自動化
  • REST API 用の Controller/Service/Repository 生成
  • IPC を伴う ステートマシンユニットの雛形生成
  • チーム開発での 共通コード規約の強制
  • 大規模プロジェクトでの 開発効率向上人的ミス削減

カスタムコマンドの仕組みを理解したあとは、実際のサーバー開発に必要な▶フレームワークとしての特徴(コマンド一覧)をご覧いただくと、craft / runtime / simple の各コマンドがどのように連携するかが分かりやすくなります。

また、フレームワーク全体の構成や主要機能については▶フレームワークのご紹介にまとめていますので、必要に応じて参照してください。

おわりに

SOCKET-MANAGER Framework のカスタムコマンド機能は、「環境特有の処理を CLI コマンドとして自動生成できる」という強力な拡張ポイントです。
  • ステートマシンベースのアプリ開発
  • IPC を含むソケット通信処理
  • REST API や常駐アプリのコード生成
  • プロジェクト固有のスキャフォールディング
これらを一貫した構造で自動化できるため、開発者体験(DX)を大きく向上させます。