世界を旅して暮らしたい放浪エンジニアブログ

LaravelにTraitのジェネレーターを導入

LaravelでTraitを利用したい場合に、makeコマンドがなかったので用意しました。手動で作っても良いのですが複数人で開発する場合、ルールを統一して便利ツールとして利用していきたいですね。

[ 目次 ]

はじめに

こんばんは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回はLaravelプロジェクトでTraitを利用する際に、makeコマンドでTraitをジェネレートできるようにしたいと思います。
デフォルトでは、Traitは用意されていません。
ググってみたところcomposerも見当たらず、Laravel 5.5 Trait Generator を参考にすることにしました。

※ Model内で発生する共通処理をTraitに切り出したいと思ってます。

■ 環境

ライブラリ バージョン
PHP ^7.1.3
Laravel 5.6.*

Comanndを作成

make:traitコマンドでTraitを作成できるようにCommandクラスを用意します。

$ php artisan make:command TraitMakeCommand

TraitMakeCommand.phpapp/Console/Commands ディレクトリに作成されたと思います。
内容を以下のように修正してください。

<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class TraitMakeCommand extends GeneratorCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $name = 'make:trait';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new trait';

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return __DIR__.'/stubs/trait.stub';
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.'\Traits';
    }
}

Traitのスタブを用意

既に、TraitMakeCommand.php内にも記載しましたが、/stubs/trait.stubファイルを用意します。このファイルはTraitクラスを作成するときのテンプレートのようなものです。
以下のような内容でファイルを作成してください。

<?php
namespace DummyNamespace;
trait DummyClass
{
    //
}

Traitを作成

まず、Commandとして登録されているか php artisan list コマンドを利用して確認してみましょう。

$ php artisan list | grep make

make
  make:auth                            Scaffold basic login and registration views and routes
  make:command                         Create a new Artisan command
  make:controller                      Create a new controller class
  make:event                           Create a new event class
  make:exception                       Create a new custom exception class
  make:factory                         Create a new model factory
  make:helper                          Create a new helper
  make:job                             Create a new job class
  make:listener                        Create a new event listener class
  make:mail                            Create a new email class
  make:middleware                      Create a new middleware class
  make:migration                       Create a new migration file
  make:model                           Create a new Eloquent model class
  make:notification                    Create a new notification class
  make:policy                          Create a new policy class
  make:provider                        Create a new service provider class
  make:request                         Create a new form request class
  make:resource                        Create a new resource
  make:rule                            Create a new validation rule
  make:seeder                          Create a new seeder class
  make:test                            Create a new test class
  make:trait                           Create a new trait

一番下に追加されましたか??
続いて UserTrait を作成してみましょう。

$ php artisan make:trait UserTrait

app/Traits/UserTrait.phpが作成されます。
作成直後の内容は以下です。

<?php

namespace App\Traits;

trait UserTrait
{
    //
}

これで無事Traitが作成できました。

最後に

Traitの作成方法は如何でしたか?
複数のクラスから共通利用したい処理で、親子関係にしたくない処理などTraitとして用意すると便利ですよね。

参考記事

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts