CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
2024/06/21
CakePHP4でコマンドプログラムを作成する
CakePHP4にもコマンドプログラムが用意されている
CakePHP4では、画面で見る処理だけではなく、コマンドラインからコマンドを入力して実行する処理も用意されています。
cronを使って定期的に自動処理を実行したい場合などに便利です。
CakePHP4でコマンドの処理を作成する方法を 4記事にわたって紹介します。
今回はその 1回目で、コマンドプロジェクトを作成する基本を解説します。
- CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
- CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
- CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
- Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP3.6以降はシェル(Shell)は非推奨に
ちなみに、この記事の最後に書いていますが、CakePHP3.6以降はシェル(Shell)は非推奨となり、コマンド(Command)を利用することとなりました。
そのため、この記事では「コマンド」についての内容になります。(シェルについては検証していません。)
Bakeコマンドを実行しコマンドプログラムのテンプレートを生成
まず初めに、下記のコマンドを実行し、コマンドプログラムのテンプレートを生成します。
|
1 |
$ bin/cake bake command hello |
コマンドを実行すると下記の 2ファイルが生成されます。
/src/Command/HelloCommand.php
/tests/TestCase\Command/HelloCommandTest.php
このうち、コマンドプログラムである「/src/Command/HelloCommand.php」を使用していきます。
コマンドプログラム「HelloCommand.php」の中身
/src/Command/HelloCommand.phpの中身は下記のようになっています。
必要最低限の内容になっています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php declare(strict_types=1); namespace App\Command; use Cake\Command\Command; use Cake\Console\Arguments; use Cake\Console\ConsoleIo; use Cake\Console\ConsoleOptionParser; /** * Hello command. */ class HelloCommand extends Command { /** * Hook method for defining this command's option parser. * * @see https://book.cakephp.org/4/en/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined * @return \Cake\Console\ConsoleOptionParser The built parser. */ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser { $parser = parent::buildOptionParser($parser); return $parser; } /** * Implement this method with your command's logic. * * @param \Cake\Console\Arguments $args The command arguments. * @param \Cake\Console\ConsoleIo $io The console io * @return null|void|int The exit code or null for success */ public function execute(Arguments $args, ConsoleIo $io) { } } |
「buildOptionParser()」は引数(パラメータ)の付与時に使用
「buildOptionParser()」は、コマンドに引数(パラメータ)を付与して実行する際に、引数を受け取る処理に使用します。
次々回の下記の記事で紹介していますので、そちらを参照してください。
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
コマンドプログラムの本体は「execute()」メソッド内に記述
コマンドプログラムを実行すると「execute()」メソッドの中の処理が実行されますので、この中に処理を記述していきます。
「execute()」メソッド内に処理を記述
定番の「Hello world.」を表示する処理を「execute()」内に記述します。
|
1 2 3 4 |
public function execute(Arguments $args, ConsoleIo $io) { $io->out('Hello world.'); } |
「HelloCommand」のプログラムを実行
コマンドプログラムを実行するコマンドは下記になります。
|
1 |
$ bin/cake hello |
「Hello world.」とコンソール画面に表示されれば成功です。
「$io->out()」以外に「print_r()」「echo」も使える
ちなみに、規約上は「$io->out()」で画面に出力処理を行いますが、「print_r()」「echo」でも画面表示できますので、デバッグの時などはこれらを使うのもありかと思います。
|
1 2 3 4 5 6 |
public function execute(Arguments $args, ConsoleIo $io) { $io->out('Hello world.'); print_r("Hello world. \n"); echo "Hello world. \n"; } |
複数の単語からなるコマンドプログラムの場合の記述方法
今回は「HelloCommand.php」ですが、複数の単語からなるコマンドの場合は下記のようになります。
先ほどと同じように bakeコマンドを利用して、コマンドプログラムのテンプレートファイルを生成します。
|
1 |
$ bin/cake bake command SayHello |
「SayHelloCommand.php」と言うコマンドファイルが作成されます。
このファイルを実行する際のコマンドは、下記の記述(キャメルケース・camelCase)が、規約上の正解なのだろうと思います。
|
1 |
$ bin/cake sayHello |
Cookbookの記事内では、「HelloCommand.php」の時に「bin/cake hello」となっていましたので、コマンドで実行する際の記述は 1単語目の 1文字目は小文字が規約上の正解なのだろうと思います。
ただ、下記でも動作します。
|
1 |
$ bin/cake SayHello |
コマンドのファイル名も Class名も「SayHello」と「S」は大文字(パスカルケース・PascalCase)となっていますので、こちらの方が正しいのではないか、とすら思います。
キャメルケース、パスカルケース、スネークケース、ケバブケースのコマンドでの動作確認
ということで、規約上はキャメルケースで記述することが正しいであろうと思われますが、パスカルケースやスネークケース、ケバブケースなどの記述方法でコマンドとして認識されるのか、実験をしてみました。
ちょっと意外な感じがする結果もありますが、以下の通りの結果となりました。
コマンドとして実行される記述方法
|
1 2 3 4 5 6 7 8 |
$ bin/cake sayHello OK $ bin/cake SayHello OK $ bin/cake Say-hello OK $ bin/cake Say_hello OK $ bin/cake say-hello OK $ bin/cake say_hello OK |
コマンドとして認識されない記述方法
|
1 2 3 4 5 6 7 |
$ bin/cake sayhello NG $ bin/cake Say-Hello NG $ bin/cake Say_Hello NG $ bin/cake say-Hello NG $ bin/cake say_Hello NG |
参考サイトとしては、下記の Cookbookとなります。
https://book.cakephp.org/4/ja/console-commands/commands.html
CakePHP3.6 以降、シェルは非推奨になった
CakePHP3.6 以降、シェルは非推奨となりました。
https://book.cakephp.org/2/ja/console-and-shells.html
https://book.cakephp.org/3/ja/console-and-shells.html
https://book.cakephp.org/4/ja/console-commands/shells.html
CakePHP2のころは「/app/Console/Command」フォルダ内に「HelloShell.php」と言うファイル名でシェルと言うプログラムを作成していました。
CakePHP3では、「src/Shell」にはシェル「HelloShell.php」を作成し、「src/Command」にはコマンド「HelloCommand.php」を作成する仕様になりました。
そして、CakePHP3.6で「シェル」の方が非推奨となりました。
シェルは、非推奨ながら CakePHP5までは削除されないようですが、CakePHP4、CakePHP5で作成するならば、コマンドで実装するべきものでしょう。
諸行無常と言うか、栄枯盛衰と言うか、フレームワークの機能も改廃が進んでいきますね。
CakePHP4の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
-
CakePHPを学ぶ際にはオブジェクト指向を学ぼう
CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。
-
-
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。
-
-
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4でテンプレートやレイアウトファイルをデフォルトから変更する場合は「render()」を使用するが、記述場所はできるだけコントローラー内の最後の方に書く方がいい。
-
-
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説
コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。
-
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4系、5系ではAuthenticationを使用してログイン認証を行う。その認証でID、PASS以外の削除フラグなどの条件を加えたいときの対応方法について解説。
-
-
CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。
-
-
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。