コマンドラインモジュールの作成方法
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
今回の記事では、Magento2でのコマンドラインモジュールの作成方法を解説していきたいと思います。 コマンドラインモジュールとは、php bin/magento で動作するモジュールのことを言います。例えば、
php bin/magento cache:clean
php bin/magento setup:upgrade
などMagento2には便利なコマンドがデフォルトで多数用意されています。今回は解説を交えながら、Hello Worldを返す簡単なコマンドラインモジュールを作成していきたいと思います。
今回は以下のようなステップで解説していきます。
- モジュールの基本ファイルの作成
- Commandファイルの作成
- di.xmlファイルの作成
- モジュールの有効化
- オプション設定
- まとめ
1.モジュールの基本ファイルの作成
モジュール作成の際は、以下の三点が必須となります。今回は以下のファイルの作成方法は割愛させていただきます。詳しい内容が知りたいという方は公式ドキュメント該当ページをご確認ください。
- composer.json
- registration.php
- /etc/module.xml
2.Commandファイルの作成
Symfony\Component\Console\Command\Commandクラスを継承させた、 Test > Console > Command > HelloCommand.phpファイルを作成します。 このファイルで、コマンド名やコマンド詳細、オプションなどの設定を行なっていきます。 今回は以下のように記述しました。
<?php namespace Test\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; class HelloCommand extends Command { const INPUT_SAY_WORD = 'say_word'; protected function configure() { $this->setName('say:hello_world'); $this->setDescription('return Hello World'); } protected function execute(InputInterface $input, OutputInterface $output) { $message = 'Hello World'; $output->writeln($message); } }
- $this->setName :コマンド名を設定します
- $this->setDescription :コマンドの説明を設定します
- $this->setDefinition :コマンドにオプション設定を加えることができます
$inputを利用して、argumentsやoptionsの値を受け取ることができます。また、$outputを利用して、ディスプレイへの表示をすることができます。
3. di.xmlファイルの作成
先程作成したクラスを、Magentoのコマンドを管理しているクラスが認識できるよう、di.xmlで定義を行います。
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Framework\Console\CommandList"> <arguments> <argument name="commands" xsi:type="array"> <item name="hello" xsi:type="object">Test\Console\Command\HelloCommand</item> </argument> </arguments> </type> </config>
4.モジュールの有効化
作成したモジュールを有効化していきます。
php bin/magento module:enable Test_Console
モジュールの有効化ができましたら、以下のコマンドを実行して、作成したコマンドが使用できるか確認してみましょう。
php bin/magento list
コマンドリストで確認ができたら、実際に実行してみましょう。 Hello Worldと表示されていることが確認できると思います。
$$$:/var/www/src# php bin/magento say:hello_world Hello World
5.オプション設定
簡単なコマンドラインの作成は上記の手順で完了ですが、OptionやArgumentを利用することで、より柔軟なコマンドを作成することができるようになります。
そこで、今回は今までのコードを少しいじり、Hello Worldと返すコマンドを、オプションから入力を受け取りその入力値をそのまま返すコマンドを作成したいと思います。
<?php namespace Test\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption; class HelloCommand extends Command { const INPUT_SAY_WORD = 'say_word'; protected function configure() { $this->setName('say:hello_world'); $this->setDescription('return Hello World'); $this->addOption( self::INPUT_SAY_WORD, 's', InputOption::VALUE_OPTIONAL, 'You can use words you want to say', 'Hello World' ); } protected function execute(InputInterface $input, OutputInterface $output) { $message = $input->getOption(self::INPUT_SAY_WORD); $output->writeln($message); }
オプションを設定して、もう一度コマンドを実行してみましょう。オプションに入力した値がディスプレイに表示されていると思います。
$$$:/var/www/src# php bin/magento say:hello_world --say_word='Hello AAAA' Hello AAAA
addOptionは以下の引数を必要とします。
- オプション名 コマンドオプションの名前になります
- 短縮名 (=NULL) 短縮コマンドを指定します (--help --> -h)
- 入力値指定 (=NULL) 入力値は下記のように指定します。
- 説明 オプションの概要を記述します。
- デフォルト値(=NULL) デフォルトの値を設定します。
オプションに対する入力値を第三引数で指定します
- VALUE_NONE 入力値を必要としない時
- VALUE_REQUIRED 入力値を必須とする時
- VALUE_OPTIONAL 任意の値
- VALUE_IS_ARRAY 配列
6.まとめ
今回はコマンドラインで使用できるモジュールの作成方法を解説していきました。便利なコマンドを作成しておくことで、開発がよりスムーズに行えるようになると思います。
また、コマンドラインではOptionの他に引数を指定しないArgumentという選択肢もあるので、作成したいコマンドラインモジュールに応じて、適宜使用してみてください。
モジュールのソースコードは下記リンクを参照してください。