[Laravel 6] Artisan command list customize


Laravel(ラベルはArtisan)には便利なCLIツールがあります.
本番環境に開発および導入する場合、すべてのコマンドは必要ありません.そのため、本番環境で必要なコマンドのみを保存および削除したいと思います.
そこで、Artisanのcommand listを必要なコマンドから削除する方法、または操作に必要なコマンドだけを保持する方法について理解しました.
Artisanのデフォルトコマンドの登録セクションには、次のものがあります.config/app.phpIlluminate\Foundation\Providers\ConsoleSupportServiceProvider::classです

ConsoleSupportServiceProvider.phpの内容から見ると
$providersには、他のサービスプロバイダもあります.
このうちArisanServiceProviderは、デフォルトコマンドを登録するproviderです.MigrationServiceProviderはmigrateコマンドの登録プロバイダです.
まず、ConsoleSupportServiceProviderを上書きするproviderを作成し、すべてのArtisanコマンドを除外します.
$ php artisan make:provider MyConsoleSupportServiceProvider
Provider created successfully.
生成されたproviderを開き、ServiceProviderではなくConsoleSupportServiceProviderに入れ、レジスタとbootコードを削除します.
$providersを空にします.
<?php

namespace App\Providers;

use Illuminate\Foundation\Providers\ConsoleSupportServiceProvider;

class MyConsoleSupportServiceProvider extends ConsoleSupportServiceProvider
{
	protected $providers = [];
}
次いで、MyConsoleSupportServiceProviderを消去し、config/app.phpのプロバイダに追加する.
'providers' => [
    ...
    
    //Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
    App\Providers\MyConsoleSupportServiceProvider::class,

    ...
]
Artisanを実行します.
$ php artisan list
次のセクションを除き、ほとんどのコマンドが失われています.

ただし、開発環境では、これらのコマンドはすべて必要であり、本番環境から削除したいだけなので、providerを再変更する必要があります.ConsoleSupportServiceProviderで$providerにプロバイダを登録する部分はAggregateServiceProviderのレジスタメソッドである.
この方法を変更して、ConsoleSupportServiceProviderからコマンドを削除します.production
<?php

namespace App\Providers;

use Illuminate\Foundation\Providers\ConsoleSupportServiceProvider;

class MyConsoleSupportServiceProvider extends ConsoleSupportServiceProvider
{
    public function register()
    {
        if ($this->app->environment() == 'production') {
            $this->providers = [];
        }
        parent::register();
    }
}
次に、MyConsoleSupportServiceProvider.phpキャッシュファイルを削除します.bootstrap/cache/service.phpコマンドを実行して、コマンドが追加されたことを確認します.php artisan listファイルから.envに変更し、コマンドを再実行すると、コマンドが失われる可能性があります.
次に、必要なデフォルトコマンドを追加します.
デフォルトコマンドはArisanServiceProvider$上書きするプロバイダを作成して、コマンドに必要なコマンドのみを使用します.
$ php artisan make:provider MyArtisanCommandServiceProvider 
Provider created successfully.
生成されたAPP_ENV=productionでは、ArisanServiceProviderを拡張し、$コマンドに必要なコンテンツのみを追加します.
テストとしていくつか追加しました.MyArtisanCommandServiceProvider
<?php

namespace App\Providers;

use Illuminate\Foundation\Providers\ArtisanServiceProvider;

class MyArtisanCommandServiceProvider extends ArtisanServiceProvider
{
    /**
     * The commands to be registered.
     *
     * @var array
     */
    protected $commands = [
        'CacheClear' => 'command.cache.clear',
        'ConfigCache' => 'command.config.cache',
        'ConfigClear' => 'command.config.clear',
        'Down' => 'command.down',
        'Up' => 'command.up',
    ];

    /**
     * The commands to be registered.
     *
     * @var array
     */
    protected $devCommands = [];
}
その後、MyConsoleSupportServiceProviderのプロバイダに他のプロバイダとともに追加します.MyArtisanCommandServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Database\MigrationServiceProvider;
use Illuminate\Foundation\Providers\ComposerServiceProvider;
use Illuminate\Foundation\Providers\ConsoleSupportServiceProvider;

class MyConsoleSupportServiceProvider extends ConsoleSupportServiceProvider
{
    public function register()
    {
        if ($this->app->environment() == 'production') {
            $this->providers = [
                MyArtisanCommandServiceProvider::class,
                MigrationServiceProvider::class,
                ComposerServiceProvider::class,
            ];
        }
        parent::register();
    }
}
最後にコマンドを実行すると、追加したコマンドのみが表示されます.
$ php artisan list

終了時...
実際、どれだけの人がArtisanコマンドを削除したいのか分かりませんが、それが可能かどうかを確認し、それが可能かどうかを知っています.
もしこれから関連する仕事があれば、私はこの文章を読んで参考にします.
ソース:https://github.com/wlgns5376/laravel6-artisan-customize