【カスタムコマンド作成機能】
はじめに
SOCKET-MANAGER Framework は、ステートマシンベースのソケット通信アプリケーション開発を効率化するための PHP フレームワークです。
本ドキュメントでは、フレームワークの大きな特徴である カスタムコマンド作成機能について詳しく解説します。
開発環境に依存しないビルトインコマンドに加え、プロジェクト固有の処理を CLI コマンドとして追加できるため、開発効率の向上や チーム内の共通タスクの自動化に役立ちます。
本ドキュメントでは、フレームワークの大きな特徴である カスタムコマンド作成機能について詳しく解説します。
開発環境に依存しないビルトインコマンドに加え、プロジェクト固有の処理を CLI コマンドとして追加できるため、開発効率の向上や チーム内の共通タスクの自動化に役立ちます。
ビルトインコマンドの概要
SOCKET-MANAGER Framework には、用途別に分類された 3 種類のビルトインコマンドが用意されています。
これらはプロジェクト環境に依存せず、どのアプリケーションでも共通して利用できます。
ステートマシンを使った複雑なシーケンス構築や IPC(プロセス間通信)を伴う処理の自動生成をサポート。
ステートマシンによる高度な状態遷移処理を組み込んだランタイムユニットを生成。
TCP/UDP のメイン処理クラスを素早く生成。
これらはプロジェクト環境に依存せず、どのアプリケーションでも共通して利用できます。
● 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 カテゴリ自体が表示されません。
カスタムコマンドの作成方法
カスタムコマンドは、プロジェクト内の以下のディレクトリ構造で定義します。
この 3 ファイルを配置するだけで、SOCKET-MANAGER Framework が自動的にコマンドを認識し、Usage に追加します。
/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 や常駐アプリのコード生成
- プロジェクト固有のスキャフォールディング