0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

laravel6 ジョブを使ってみる

Last updated at Posted at 2021-02-10

目的

  • laravel6のジョブを使って非同期処理を体験する

環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.11 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 6.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.21 for osx10.15 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

情報

  • jobの実行を体験することがメインなので非同期で実行される処理はログ出力のみとする。
  • 筆者はMacに直接構築したLaravel環境をもちいて本記事の検証を行った。
  • ログの出力はアプリ名ディレクトリ/storage/logs/laravel.logに出力されるものとする。
  • 実行するコマンドは特筆しない限り前のコマンドと同じディレクトリで実行するものとする。

条件

  • 下記または$ laravel newコマンドを実行してlaravel6のアプリが作成されていること。
  • 前述のlaravelアプリのローカルサーバを起動しブラウザからページを確認する事ができること。
  • 前述のlaravelアプリで$ php artisan migrateが実行できること。

概要

  1. ジョブの作成と記載
  2. ルーティング情報の記載
  3. 確認

詳細

  1. ジョブの作成と記載

    1. アプリ名ディレクトリで下記コマンドを実行してジョブクラスのファイルを作成する。

      $ php artisan make:job OutputLogJob
      
    2. 下記コマンドを実行して作成されたジョブクラスのファイルを開く。

      $ vi app/Jobs/OutputLogJob.php
      
    3. 下記のように処理を追記する。(ジョブとして動作させたい処理はジョブクラスのhandle()メソッド内部に記載する.)

      アプリ名ディレクトリ/app/Jobs/OutputLogJob.php
      <?php
      
      namespace App\Jobs;
      
      use Illuminate\Bus\Queueable;
      use Illuminate\Contracts\Queue\ShouldQueue;
      use Illuminate\Foundation\Bus\Dispatchable;
      use Illuminate\Queue\InteractsWithQueue;
      use Illuminate\Queue\SerializesModels;
      // 下記を追記
      use Illuminate\Support\Facades\Log;
      
      class OutputLogJob implements ShouldQueue
      {
          use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
      
          /**
           * Create a new job instance.
           *
           * @return void
           */
          public function __construct()
          {
              //
          }
      
          /**
           * Execute the job.
           *
           * @return void
           */
          public function handle()
          {
              // 下記を追記
              Log::info('これはジョブのテストです。');
          }
      }
      
  2. ルーティング情報の記載

    1. 下記コマンドを実行してルーティングファイルを開く。

      $ vi routes/web.php
      
    2. 下記のルーティング情報を追記する。

      アプリ名ディレクトリ/routes/web.php
      <?php
      
      /*
      |--------------------------------------------------------------------------
      | Web Routes
      |--------------------------------------------------------------------------
      |
      | Here is where you can register web routes for your application. These
      | routes are loaded by the RouteServiceProvider within a group which
      | contains the "web" middleware group. Now create something great!
      |
      */
      
      // 下記を追記
      use App\Jobs\OutputLogJob;
      
      Route::get('/', function () {
          return view('welcome');
      });
      
      Auth::routes();
      
      Route::get('/home', 'HomeController@index')->name('home');
      
      // 下記を追記
      Route::get('/output_log_job', function(){
          $job = new OutputLogJob;
          dispatch($job);
      
          return 'ジョブの実行完了';
      });
      // 上記までを追記
      
  3. 確認

    1. 下記コマンドを実行してローカルサーバを起動する。

      $ php artisan serve
      
    2. 下記にアクセスする。

    3. 下記のように表示される。

      127_0_0_1_8000_output_log_job.png

    4. 下記コマンドを実行してログファイルを開く。

      $ vi storage/logs/laravel.log
      
    5. 下記の一文がログに出力されていることを確認する。

      アプリ名ディレクトリ/storage/logs/laravel.log
      [YYYY-MM-DD HH:MM:SS] local.INFO: これはジョブのテストです。
      
0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?