LoginSignup
4
1

More than 3 years have passed since last update.

既存のLaravel artisanコマンドを組み合わせて独自のコマンドを作る方法

Last updated at Posted at 2019-10-03

Laravel artisanコマンドは例えば migrate コマンドあたりが有名だと思います。

$ artisan migrate

実はこのコマンドと同様に使えるコマンドを独自で実装することができます。
その実装方法と、特に既存のコマンドを組み合わせた独自コマンドを作る方法について説明します。

コマンドの作り方

以下のように artisan make コマンドを用いて作成できます。

$ artisan make:command NewCommand

これでひな形ができるので、必要な箇所を書き換えれば終わりです。

既存コマンドの呼び出し方

私が作ったコマンドの例ですと、migrate した後に即座に cache clear をするものです。
このコマンドの目的はmigrate してDBの状態が変わった後に、それがキャッシュしたままだとエラーが起こるような設計にしている場合、即座にcache削除をしたいのですが、
artisan migrate コマンドを打った直後に artisan cache:clear を打つという人力オペレーションだと辛いので同時に実行してくれるラッパーコマンドが欲しかったです。

<?php

namespace App\Console\Commands;


use Illuminate\Console\Command;

class MigrateAndClearCache extends Command
{
    // ここがサブコマンドの名前になり、$ artisan migrate-and-cache-clear とすれば実行できます。 
    protected $signature = 'migrate-and-cache-clear';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'migrate and cache:clear db_cache_memcached';

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {
        $this->call('migrate');
        // cache clear をするキャッシュを引数で指定しています。これは $ artisan cache:clear db_cache_memcached とやったのと同じです
        $this->call('cache:clear', ['db_cache_memcached']);
    }
}

ちなみにキャッシュサーバに名前をつけたり分離する方法についてはこちらの記事で紹介しています。https://qiita.com/yamotuki/items/b90af273e2e8e09aa3d2

コマンドリストでもみれます

root@5e3732562350:/var/www# artisan list  | grep migrate
  migrate                               Run the database migrations
  migrate-and-cache-clear               migrate and cache:clear db_cache_memcached
   以下略

補足

他のコマンドの呼び出し方法については MigrationCommand 内の handle() の実装を参考にしました。

vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php
        if ($this->option('seed') && ! $this->option('pretend')) {
            $this->call('db:seed', ['--force' => true]);
        }
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1