artisanコマンドを利用してできること

Tag:

artisanコマンドは、Laravelの開発をサポートしてくれる便利なコマンドです。ここでは、artisanコマンドを利用してできることを紹介します。

バージョン5.1上で実行しています。

便利な機能

利用可能なArtisanコマンドを表示
php artisan list

artisan_list

各Artisanコマンドのヘルプ表示
php artisan help コマンド

コマンドの説明と使用できる引数、オプションを確認できます。

artisan_help

.envにアプリケーションキーを設定
ランダムな英数字文字列を設定してくれます。

php artisan key:generate
インタラクティブにEloquentモデルを操作
php artisan tinker
PHPのビルトインサーバを立ち上げ
PHPのビルトインサーバを立ち上げてくれます。

php artisan serve

デフォルトで8000ポートが利用されます。別のポートを指定するには–portオプションを利用します。

メンテナンスモードに移行
ユーザがアクセス出来ないようにメンテナンスモードに移行することができます。

メンテナンスモードに移行

php artisan down

メンテナンスモードを解除

php artisan up

メンテナンスモードのチェックは、デフォルトでグローバルミドルウェアに登録されている「\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode」にて行われます。メンテナンスモードである場合、503のステータスコードと共に、HttpException例外が投げられるようです。

class CheckForMaintenanceMode
{
    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance()) {
            throw new HttpException(503);
        }

        return $next($request);
    }
}

※参考
https://readouble.com/laravel/5.2/ja/configuration.html#maintenance-mode

クラスのコンパイルファイルを生成・削除
クラスのコンパイルファイル(bootstrap/cache/compiled.php)を生成すると、オートロードを高速化できます。

生成

Debugモードがfalseのときに下記コマンドを実行すると生成されます。

php artisan optimize

Debugモードがtrueのときでも下記コマンドで生成できます。

php artisan optimize --force

削除

クラスのコンパイルファイルは下記コマンドで削除できます。

php artisan clear-compiled

ルーティング関連

ルーティング一覧を表示
php artisan route:list

artisan_route

ルートキャッシュの作成・削除
ルートキャッシュは開発終わりなどに作成すればよいかと思います。

作成

php artisan route:cache

削除

php artisan route:clear

ファイル生成

マイグレーション(Migration)ファイルを生成
マイグレーションファイルとは、データベースのテーブルを作成・変更するファイルのことです。

コマンド

php artisan make:migration マイグレーションファイル名

ファイル生成場所

database/migrations配下

デフォルトで「usersテーブル」と「password_resetsテーブル」を生成するマイグレーションファイルが存在します。

サンプル1

テーブル作成のマイグレーションファイルを生成したい場合、「–create=テーブル名」オプションを付けます。

php artisan make:migration create_posts_table --create=posts

上記コマンドを実行すると「database/migrations/2016_05_21_115202_create_posts_table.php」が生成されました。

2016_05_21_115202_create_posts_table.php
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('posts');
    }
}

サンプル2

既存テーブルに変更を行うマイグレーションファイルを生成したい場合、「–table=テーブル名」オプションを付けます。

php artisan make:migration add_clum_posts_table --table=posts

上記コマンドを実行すると「database/migrations/2016_05_21_120037_add_clum_posts_table.php」が生成されました。

2016_05_21_120037_add_clum_posts_table.php
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddClumPostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
        });
    }
}
シーダー(Seeder)クラスを生成
シーダークラスは、データベースに初期値やテストデータを挿入するためのクラスです。

コマンド

php artisan make:seeder シーダーファイル名

ファイル生成場所

/database/seeds配下

サンプル

php artisan make:seeder insPost_100

上記コマンドを実行すると「/database/seeds/insPost_100.php」が生成されました。

insPost_100.php
<?php

use Illuminate\Database\Seeder;

class insPost_100 extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}
モデル(Eloquent model)クラスを生成
モデルクラスは、Eloquentの機能を継承したクラスです。ビジネスロジックを記述します。

コマンド

php artisan make:model モデルクラス名

ファイル生成場所

app配下

デフォルトでUserモデルが存在します。

サンプル

php artisan make:model Post

上記コマンドを実行すると「app/Post.php」が生成されました。

Post.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
}

-mオプションを利用するとマイグレーションファイルも同時に生成してくれます。

php artisan make:model モデルクラス名 -m
ポリシー(policy)クラスを生成
ポリシークラスでは、対象リソースに対する許可ロジックを記述します。

コマンド

php artisan make:policy ポリシークラス

ファイル生成場所

app/Policies配下

サンプル

php artisan make:policy PostPolicy

上記コマンドを実行すると「app/Policies/PostPolicy.php」が生成されました。

PostPolicy.php
<?php

namespace App\Policies;

use Illuminate\Auth\Access\HandlesAuthorization;

class PostPolicy
{
    use HandlesAuthorization;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
}
コントローラ(resource controller)クラスを生成

コマンド

php artisan make:controller コントローラクラス名

ファイル生成場所

app/Http/Controllers配下

デフォルトで「AuthController」「PasswordController」が存在します。

サンプル

php artisan make:controller PostController

上記コマンドを実行すると「app/Http/Controllers/PostController.php」が生成されました。

PostController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

すでに7つのメソッドを用意してくれています。このメソッドについては、「Laravel : リソースフルコントローラー | DN-Web64」にて取り上げてます。

もしメソッドを用意してほしくなければ、「–plain」オプションをつけて実行します。

php artisan make:controller --plain コントローラクラス名
※Laravel5.2の場合
「--resource」オプションをつけたときだけメソッドを用意してくれます。
ミドルウェア(middleware)クラスを生成

コマンド

php artisan make:middleware ミドルウェアクラス名

ファイル生成場所

app/Http/Middleware配下

デフォルトで「Authenticate」「EncryptCookies」「RedirectIfAuthenticated」「VerifyCsrfToken」が存在します。

サンプル

php artisan make:middleware xxxx

上記コマンドを実行すると「app/Http/Middleware/xxxx.php」が生成されました。

xxxx.php
<?php

namespace App\Http\Middleware;

use Closure;

class xxxx
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}
プロバイダー(service provider)クラスを生成

コマンド

php artisan make:provider プロバイダークラス名

ファイル生成場所

app/Providers配下

サンプル

php artisan make:provider xxxxProvider

上記コマンドを実行すると「app/Providers/xxxxProvider.php」が生成されました。

xxxxProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class xxxxProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
リクエスト(request)クラスを生成

コマンド

php artisan make:request リクエストクラス名

ファイル生成場所

app/Http/Requests配下

サンプル

php artisan make:reques xxxxRequest

上記コマンドを実行すると「app/Http/Requests/xxxxRequest.php」が生成されました。

xxxxRequest.php
<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class xxxxRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
        ];
    }
}

テスト(test)クラスを生成

コマンド

php artisan make:test テストクラス名

ファイル生成場所

tests配下

サンプル

php artisan make:test xxxxTest

上記コマンドを実行すると「tests/xxxxTest.php」が生成されました。

xxxxTest.php
<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class xxxxTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->assertTrue(true);
    }
}

カスタムコマンド用のクラスを生成

コマンド

php artisan make:console カスタムコマンドクラス名

ファイル生成場所

app/Console/Commands配下

サンプル

php artisan make:console TestCommand

上記コマンドを実行すると「app/Console/Commands/TestCommand.php」が生成されました。

TestCommand.php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}

14行目
$signatureプロパティにコマンド名を記述します。
次のように引数やオプションも指定できます。

// 任意の引数…
protected $signature = 'email:send {user?}';

// 任意の引数とデフォルト値…
protected $signature = 'email:send {user=foo}';

// 引数とオプション(true or false)
protected $signature = 'email:send {user} {--queue}';

// 引数とオプション(ユーザー指定)
protected $signature = 'email:send {user} {--queue=}';
21行目
$descriptionプロパティにコマンドの説明を記述します。
説明は、次のようにhelpコマンド実行時に表示されます。

php artisan help コマンド名
38行目
コマンドの処理を記述します。
引数やオプションの値の取得は、次のようにします。

// 特定の引数を取得
$userId = $this->argument('user');

// 全引数を取得
$arguments = $this->argument();

// 特定のオプションを取得
$queueName = $this->option('queue');

// 全オプションを取得
$options = $this->option();

コマンド登録

「app/Console/Kernel.php」ファイルのcommandsプロパティにクラス名を追加します。

protected $commands = [
    Commands\TestCommand::class
];

※参考
https://readouble.com/laravel/5.2/ja/artisan.html

マイグレーション・シーダー関連

マイグレーションの実行
php artisan migrate

デフォルトの状態で実行してみます。
artisan_migrate

下記テーブルが作成されました。
・migrations
・password_resets
・users

migrationsテーブル内には下記のように実行記録が挿入されていました。
artisan_migrate1

どのmigrationが適用されたか確認
php artisan migrate:status

artisan_migrate_status

最後のマイグレーションをロールバック
php artisan migrate:rollback

デフォルトの状態でマイグレーション実行後、ロールバックを行ってみます。
artisan_migrate_rollback
下記テーブルが削除されました。
・password_resets
・users

migrationsテーブル内の実行記録も削除され、ステータス情報も「N」になりました。
artisan_migrate_rollback_status

全マイグレーションをロールバック
php artisan migrate:reset
全マイグレーションをロールバックし、再度マイグレーションを実行
php artisan migrate:refresh

テーブルに入力されたデータだけ削除された状態になります。

シーダーの実行
php artisan db:seed

※エラーが出た場合に確認すること。
「php artisan make:seeder XXX」でファイルを作成した場合、オートローダー処理が行われるが、それ以外の場合(手作りした、他人が作成した)、「composer dump-autoload」をしておく必要がある。

スポンサーリンク