BackEnd

LaravelのArtisanコマンドを自作する

投稿日:

はじめに

Laravelの artisan コマンドは、実際にはバッチの開発などで使う機会が多いと思いますが、コンソール向きのコマンドも、Laravelから用意された機能を組み合わせることで、開発しやすくなっています。
今回は、 artisan コマンドを使用した、コンソール向きのコマンドの作成方法を紹介します。

コマンドの作成方法

コマンドを作成するには、下記コマンドを実行します。

$ php artisan make:command CommandName

app>Console>Commands 配下に、コマンド用のクラスが作成されます。

コマンドの実装

コマンドを生成すると、以下のコードが生成されます。

$signature にコマンド名を指定します。実際にコマンドを実行する際は、 $ php artisan command:name となります。
また、 $description には、コマンドの説明を書きます。ここに書いた説明は、 $ php artisan list コマンドを実行した時に表示されます。

__construct() メソッドは、主にコンストラクタインジェクションとして活用することができます。今回は説明を省略しますが、コマンドのロジックは、Service化しておくことで、取り回しの良いコードになると思います。
handle() メソッドに、実際にコマンドが実行された時の処理を書きます。コマンドの引数やオプションも、このメソッド内で受け取ります。
以降、 handle() メソッド内での、コマンドの実装方法について、紹介したいと思います。

文字列出力

シンプルにコンソールに出力するには、以下のように実装します。

この他にも、出力したい内容別にメソッドが用意されており、それぞれ表示色が異なります。
状況に応じて、 info , comment , question , error なども使い分けましょう。
表示色のサンプルです。

引数

コマンドに引数を設定するには、 $signature プロパティを次のようにします。

引数を取得するには、 handle() メソッドで、次のようにします。

実際のコマンド実行は、次のようになります。

$signature を次のようにすると、配列として引数を受け取ることができます。

オプション

オプションを指定し、値を取得するには、 $signature プロパティを次のようにします。

オプションにデフォルト値を設定する場合は、上記の = に続けてデフォルト値を記載します。
また、bool値の取得であれば、 = は不要です。

オプションの値を取得するには、 handle() ソメッドで、次のようにします。

実際のコマンド実行は次のようになります。

入力を使用した対話型

対話型のコマンドを作成することも可能です。

ask()メソッド

ユーザに入力を要求することができます。

実行結果は次のようになります。

secret()メソッド

ask() と似ていますが、入力内容がコンソールに表示されません。

confirm()メソッド

Y/Nで確認を取りたい時に使用します。

実行結果は次のようになります。

プログレスバー

時間のかかる処理を実行するときは、プログレスバーで進捗を表示することができます。

注意点としては、プログレスバーの後は改行されないため、 echo PHP_EOL で改行コードを出力する必要があります。
実行結果は次のようになります。

テーブル

テーブルを出力できることも可能です。例えば、DBのレコードを一覧表示する時に使用できます。

実行結果は次のようになります。

サンプル実装

「国立図書館デジタルコレクション書誌情報」をダウンロードし、テーブルに格納するコマンドのサンプルコードです。
ダウンロードにはGuzzleHttp、ExcelデータのインポートにはLaravel Excelを使用しています。

BooksImport.php

ImportBooks.php

$ php artisan import:books コマンドで実行できます。

さいごに

いかがでしたか。 artisan コマンドは、よくコンソールで使用される機能が揃っているので、ちょっとした手作業を自動化する際に、使い勝手が良さそうですね。

おすすめ書籍

PHPフレームワークLaravel入門 第2版 PHPフレームワーク Laravel実践開発 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 よくわかるPHPの教科書 【PHP7対応版】

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Vue.js入門その4〜TODOアプリにサーバーサイドを追加してみる〜

1 はじめに2 準備2.1 今回作成したいもの2.2 環境構築3 サーバーサイド3.1 DB3.2 メモ:rails generateで余分なファイルを生成しない3.3 作成したファイル4 ビューの作 ...

laravel logo

Laravel N+1検出ツールの紹介

1 はじめに2 インストール3 設定4 通知方法の追加5 テスト6 検知結果6.1 画面上アラート6.2 コンソール6.3 ログファイル7 ちなみに8 さいごに9 おすすめ書籍 はじめに DB利用した ...

laravel logo

LaravelのFacade(ファサード)とは? 何気なく使用していた裏側の仕組みを解説!

1 はじめに1.1 Facadeを使用しているクラス2 Facadeの仕組み3 Facadeの作成3.1 サンプルコードに必要な実装3.2 Serviceの作成3.3 Facadeクラスの作成3.4 ...

PHPerだけどKotlinを勉強したって良いよね その2〜コンストラクタ編〜

1 はじめに2 コンストラクタ2.1 プライマリコンストラクタ2.2 セカンダリコンストラクタ2.3 ニックネームのみを入力した人2.4 ニックネームと email を入力した人2.5 Faceboo ...

laravel logo

Server-Side Eventsを触ってみた

1 はじめに2 Server-Side Events(SSE) とは3 実装してみる3.1 動作の流れ3.2 Laravel側3.3 React側4 Chat GPTのレスポンス5 さいごに6 おすす ...

フォロー

blog-page_side_responsive

2020年6月
 123456
78910111213
14151617181920
21222324252627
282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。