Laravelアプリケーションを開発するとき、職人コマンドを使用してさまざまなタスクを実行します。職人コマンドは、Laravel Frameworkによって提供される非常に強力なコマンドラインツールです。開発者は、データベースの移行、キュー処理、タイミングタスクなど、多くのタスクの実行を簡素化するのに役立ちます。
ただし、長期にわたる職人のコマンドを実行している場合、バックグラウンドで同時に実行されている複数のコマンドがある場合があります。これらのプロセスを区別するために、特にHTOPやPSコマンドなどのプロセス監視ツールを使用する場合は、各プロセスで簡単に認識できる動的プロセスタイトルを設定できるようにする必要があります。幸いなことに、PHPのCLI_GET_PROCESS_TITLE関数を介してこれを達成できます。
この記事では、 CLI_GET_Process_Title関数に基づいてLaravel Artisanコマンドに動的プロセスタイトルを追加する方法を調べて、コマンドラインインターフェイスでさまざまなプロセスを表示および識別しやすくします。
CLI_GET_PROCESS_TITLEは、現在のPHPプロセスのタイトルを取得するPHP関数です。オペレーティングシステムの現在のプロセスの表示名を表す文字列を返します。このタイトルを変更することにより、プロセスにコマンドラインインターフェイスにより記述的な名前を表示することができます。これにより、プロセスをより適切に管理および監視することができます。
デフォルトでは、PHPプロセスのタイトルは通常「PHP」または同様の汎用識別子ですが、 CLI_GET_Process_Titleを使用すると、現在実行中のLaravel Artisanコマンドなど、より認識可能な名前に変更できます。
Laravelの職人コマンドの動的プロセスタイトルを設定するには、コマンドの実行中にプロセスタイトルを変更する必要があります。これが簡単なステップガイドです:
まず、カスタム職人コマンドを作成する必要があります。実行して、新しい職人コマンドを作成できます。
<span><span>php artisan make:</span><span><span class="hljs-built_in">command</span></span><span> SetProcessTitleCommand
</span></span>
これにより、App/Console/Commands Directoryで新しいコマンドクラスファイルsetProcessTitleCommand.phpが生成されます。
次に、コマンドクラスでCLI_SET_PROCESS_TITLE関数を使用してプロセスタイトルを設定する必要があります。 setProcessTitleCommand.phpファイルを開き、ハンドルメソッドにコードを追加して、プロセスタイトルを動的に設定します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">namespace</span></span><span> </span><span><span class="hljs-title class_">App</span></span><span>\</span><span><span class="hljs-title class_">Console</span></span><span>\</span><span><span class="hljs-title class_">Commands</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">Illuminate</span></span><span>\</span><span><span class="hljs-title">Console</span></span><span>\</span><span><span class="hljs-title">Command</span></span><span>;
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">SetProcessTitleCommand</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">Command</span></span><span>
{
</span><span><span class="hljs-comment">// コマンドの名前</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$signature</span></span><span> = </span><span><span class="hljs-string">'set:process-title {title}'</span></span><span>;
</span><span><span class="hljs-comment">// コマンドの説明</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$description</span></span><span> = </span><span><span class="hljs-string">'現在のプロセスのタイトルを設定します'</span></span><span>;
</span><span><span class="hljs-comment">// コマンドを実行する方法</span></span><span>
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// コマンドラインパラメーターを取得します</span></span><span>
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">argument</span></span><span>(</span><span><span class="hljs-string">'title'</span></span><span>);
</span><span><span class="hljs-comment">// 使用cli_set_process_titleプロセスタイトルを設定します</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">info</span></span><span>(</span><span><span class="hljs-string">"プロセスタイトルはに設定されています: <span class="hljs-subst">$title</span></span></span><span>");
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">error</span></span><span>(</span><span><span class="hljs-string">'現在PHPバージョンはサポートされていませんcli_set_process_title関数'</span></span><span>);
}
}
}
</span></span>
上記のコードでは、次のことを行いました。
新しい職人コマンドセット:プロセスタイトルが作成されます。これは、コマンドラインパラメータータイトルを受け入れます。これは、プロセスに設定したいタイトルです。
ハンドルメソッドでは、 CLI_SET_PROCESS_TITLEを使用して、プロセスタイトルを動的に設定します。
CLI_SET_PROCESS_TITLE関数が使用できない場合(たとえば、PHP環境はこの機能をサポートしていません)、ユーザーは現在の環境が関数をサポートしていないことを促されます。
次に、この新しいコマンドをApp/Console/kernel.phpファイルに登録する必要があります。 $コマンド配列に新しいコマンドへの参照を追加します。
<span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$commands</span></span><span> = [
</span><span><span class="hljs-title class_">Commands\SetProcessTitleCommand</span></span><span>::</span><span><span class="hljs-variable language_">class</span></span><span>,
];
</span></span>
これで、次のコマンドを実行して、プロセスタイトルの設定をテストできます。
<span><span>php artisan </span><span><span class="hljs-built_in">set</span></span><span>:process-title </span><span><span class="hljs-string">"My Custom Process Title"</span></span><span>
</span></span>
すべてが正常に機能する場合は、システムのPSコマンドまたは同様のツールを使用してプロセスタイトルを表示できます。プロセスのタイトルが「私のカスタムプロセスタイトル」に正常に設定されていることを確認できるはずです。
プロセスタイトルを長期にわたるコマンドで動的に更新する必要がある場合は、コマンドの実行中に定期的にCLI_SET_PROCESS_TITLEを呼び出すことができます。たとえば、タスクキューを処理する場合、現在処理されているタスクに基づいてプロセスタイトルを動的に更新することができます。
長い実行コマンドを実行するときにプロセスタイトルを動的に更新する方法を示す例を示します。
<span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-variable">$tasks</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getTasks</span></span><span>(); </span><span><span class="hljs-comment">// 一連のタスクを取得したとします</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$tasks</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$task</span></span><span>) {
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-string">"タスクを処理します <span class="hljs-subst">$index</span></span></span><span> / " . </span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$tasks</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
}
</span><span><span class="hljs-comment">// タスクを処理します</span></span><span>
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">processTask</span></span><span>(</span><span><span class="hljs-variable">$task</span></span><span>);
</span><span><span class="hljs-comment">// 効果を表示します,ここで各タスクの処理時間をシミュレートしましょう</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}
}
</span></span>
上記のコードでは、コマンドは一連のタスクを通過し、各タスクが処理されるとプロセスタイトルを動的に更新します。このようにして、コマンドラインで現在のプロセスのステータスをリアルタイムで確認できます。
CLI_GET_PROCESS_TITLEおよびCLI_SET_PROCESS_TITLE関数を介して、Laravel Artisanコマンドの動的プロセスタイトルを設定できます。これは、特に開発環境と生産環境で長期にわたるコマンドを使用する場合、コマンドラインで複数のバックグラウンドプロセスを実行する場合、さまざまなプロセスを区別するのに非常に役立ちます。
CLI_SET_PROCESS_TITLE機能はすべてのPHPバージョンではサポートされていませんが、プロセス管理と監視が必要な開発者にとって非常に便利なツールです。この記事が、Laravelプロジェクトでこの機能を実装し、作業効率とシステム管理の経験を改善するのに役立つことを願っています。