LoginSignup
3
7

More than 5 years have passed since last update.

Laravelで自作コマンドを作るときのTips

Posted at

はじめに

最近LaravelでartisanのCommand作ってパッケージ化するというようなことがあったのでその際に得たTipsをまとめて見たいと思います。

継承元

今回はmake:controllerのように新しくファイルを作成するようなコマンドを作りたかったのでIlluminate/Console/GeneratorCommandを継承して作りました。

GeneratorCommandはディレクトリ生成したり、ファイルの存在判定のメソッドが定義されていたりするのでここを継承すると楽にファイル操作関連のコマンドを作れます。

テンプレート

ファイル生成するときはテンプレートがあると楽です。
make:controllerなどであればIlluminate/Routing/Console/stubs以下にあるstubでコントローラーファイルの雛形を用意しておき、コマンド実行時にNamespaceやClassをstr_replaceで置き換えるみたいなことをやっています。
自作するときも生成したいファイルの雛形作っておけばある程度自由度高くできるので使いやすいなと思いました。

ServiceProvider

普通にlaravelでコマンド作るときはapp/Console/Kernelに追加しておけば勝手に登録してくれますがパッケージ化したい場合などはServiceProviderで登録するのがいいかと思います。

registerメソッドでこんな感じで登録します。

/**
 * Register the application services.
 *
 * @return void
 */
public function register()
{
    $this->registerMakeHogeCommand();
}

/**
 * Register the make:hoge Command
 */
private function registerMakeHogeCommand()
{
    $this->app->singleton('command.make.hoge', function ($app) {
        return new MakeHogeCommand();
    });

    $this->commands('command.make.hoge');
}

Illuminate/Foundation/Providers/ArtisanServiceProviderとか見るとわかりやすいと思います。

設定ファイル

これは別にコマンドに限った話ではありませんがパッケージの設定ファイルだけlaravelのconfigに組み込みたいときはServiceProviderにこんな感じで書いて、

/**
 * Bootstrap the application services.
 *
 * @return void
 */
public function boot()
{
    $this->publishes([
        __DIR__.'/config_path/make_hoge_config.php' => config_path('make_hoge_config.php'),
    ]);
}

php artisan vendor:publishコマンドをたたいて貰えればlaravleのconfigに組み込めます。

オプション

コマンドのオプションですがコマンドのsignatureプロパティに{--option=default}を付け足したりして指定できます。参考→https://readouble.com/laravel/5.3/ja/artisan.html
ショートカットで使いたい場合は{--o|option=default}で、単にオプションの指定があったかどうかboolで受け取りたい場合は{--o|option}みたいな感じです。
入力を配列で受け取りたい場合は{--o|option=*}php artisan -o option1 -o option2 commandみたいな感じで受け取れます。
他のパッケージのコードとか見てるとphp artisan -o option1,option2 command
で受け取って,でexplodeするみたいなやり方をしてるものもありました。

まとめ

というわけで紹介みたいになってしまいましたがこんな感じです。
既存のコマンドとか見ると参考になると思います。

3
7
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
3
7