【メイン処理クラス実装】

はじめに

このページでは、REST-API サーバー開発環境におけるメイン処理クラスの実装方法について解説します。
メイン処理クラスは、サーバーの初期化・設定ファイルの読み込み・イベント処理クラスやコンテキストクラスの紐付けなど、REST-API サーバー全体の中核となる役割を担います。

メイン処理クラスはスキャフォールディングで自動生成できます。
▶スキャフォールディング

生成されたメイン処理クラスは、REST-API サーバーの起動コマンドとして利用され、設定ファイルや各種クラスの指定を一元管理します。

スキャフォールディング(生成方法)

メイン処理クラスは以下のコマンドで生成できます。
php worker custom:main <カスタム名>
                    
app/MainClass/<カスタム名>.php
                    

生成されるクラスの内容は以下の通りです。
<?php
/**
 * メイン処理クラスのファイル
 * 
 * SocketManagerの実行
 */

namespace App\MainClass;

/**
 * メイン処理クラス
 * 
 * メイン処理の初期化と実行
 */
class <カスタム名> extends MainForRestApi
{
    /**
     * @var string $identifer サーバー識別子
     */
    protected string $identifer = 'app:<カスタム名> {port?} {keep_alive?}';

    /**
     * @var string $description コマンド説明
     */
    protected string $description = 'サーバーの説明';

    /**
     * @var array $setting_files 設定ファイル指定
     */
    protected array $setting_files = [
        'cors'      => 'cors',
        'parameter' => null,
        'parser'    => null,
        'routing'   => null
    ];

    /**
     * @var array $classes 設定クラス群
     */
    protected array $classes = [
        'context'  => null,
        'event'    => null,
        'parallel' => null
    ];

    /**
     * ログライター
     *
     * @param string $p_level ログレベル
     * @param array $p_param ログ内容(['Json data' => $json] など)
     */
    public function logWriter(string $p_level, array $p_param)
    {
        /**
         * ここにログ出力処理を実装します
         */
    }
}
                    

生成されたクラスは MainForRestApi を継承することで REST-API サーバーのメイン処理クラスとして認識されます。

その他スキャフォールディングの詳細は ▶スキャフォールディング を参照してください。

サーバー識別子(identifier)

メイン処理クラスの $identifer プロパティには、サーバー起動コマンドのフォーマットが定義されています。
protected string $identifer = 'app:<カスタム名> {port?} {keep_alive?}';
                    

● サーバーアプリケーション名

app:<カスタム名> の部分がサーバーアプリケーション名であり、必ず app: を付ける必要があります

● コマンドパラメータ

{port?} {keep_alive?} の部分がパラメータ名で、デフォルトで定義される可変パラメータです。
パラメータ名は自由にカスタマイズできます。

例えば、ホスト名を追加したい場合は以下のようにします。
protected string $identifer = 'app:<カスタム名> {host} {port?} {keep_alive?}';
                    

この環境では $setting_files['parameter'] で指定した設定ファイルと連動し、以下のパラメータが利用できます。
  • host — ホスト名
  • port — ポート番号
  • receive_buffer_size — 受信バッファサイズ(バイト数)
  • limit_request_size — リクエスト制限サイズ(バイト数)
  • limit_body_size — ボディ部制限サイズ(バイト数)
  • limit_connection — 同時接続制限数
  • keep_alive — KeepAlive フラグ
  • cycle_interval — 周期インターバル時間(μs)
  • alive_interval — アライブチェックタイムアウト(s)

CLI 引数で指定した値は $setting_files['parameter'] で指定した設定ファイルより優先されます。

パラメータの詳細については ▶基本パラメータ設定 ページを参照してください。

コマンド説明文(description)

$description プロパティには、サーバーコマンドの説明文を設定します。
Usage 表示時にサーバー識別子も含めて `main` カテゴリでこの説明文が表示されます。
protected string $description = 'テスト用のサーバー';
                    
> php worker

SOCKET-MANAGER Framework 1.X.X

Usage:
  command [arguments]

 main
  app:<カスタム名>                               テスト用のサーバー
                    

設定ファイル指定(setting_files)

$setting_files プロパティでは、サーバーで使用する各設定ファイル名を指定します。

  • cors — CORS 設定ファイル。設定すればプリフライトリクエストが有効化され、null 指定の場合はプリフライトを拒否します。(▶CORS 設定
  • parameter — null 指定の場合は setting/parameter.php(デフォルト設定)が適用されます。(▶基本パラメータ設定
  • parser — null 指定の場合は setting/parser.php(デフォルト設定)が適用されます。(▶パーサー設定
  • routing — null 指定の場合は setting/routing.php(デフォルト設定)が適用されます。(▶ルーティング設定

いずれも php worker custom:setting-* コマンドで生成できます。

クラス名指定(classes)

$classes プロパティでは、サーバーで使用する各クラス名を指定します。



ログライター(logWriter メソッド)

logWriter メソッドは、UNIT 内やフレームワーク内部から呼び出されるログ出力処理を定義します。
システムログと統合され、時系列で出力されます。

フレームワークで使用されるログレベル:
  • debug
  • info
  • notice
  • warning
  • error
$ctx->logWriter('debug', ['Jsonレスポンスデータ' => $json]);
                    

※ メソッドが未定義の場合はログ出力されません。
※ サンプルサーバーでは logs/sample 配下に出力されます。

おわりに

メイン処理クラスは、REST-API サーバー全体の初期化・設定・クラス紐付けを担う重要なクラスです。
スキャフォールディングを活用することで、メイン処理クラスの作成を効率化できます。

生成可能なクラス一覧については以下をご覧ください。
▶スキャフォールディング