Laravel 5.8 Slackに通知を送信する(laravel/slack-notification-channel)

Laravel 5.8
laravel/slack-notification-channelを利用してSlackへの通知を試してみました。

本家のドキュメントはこちら
https://laravel.com/docs/5.8/notifications#slack-notifications


Slack Webhook URL



プログラムの前に通知先のURLを取得しておきます。
こちらにアクセスしWebhook URLを作成します。
https://slack.com/apps/A0F7XDUAZ

a04_01.png

a04_02.png

a04_03.png


https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
という形式のURLが取得できると思います。

.envファイルに追記しておきます。

・.env


SLACK_URL=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX




laravel/slack-notification-channel



つづいて、slack通知用のライブラリ「laravel/slack-notification-channel」をインストールします。


$ composer require laravel/slack-notification-channel






Notifiable



Slackへの通知はNotifiableトレイトを使用しているクラスに対して実行可能となります。
サンプルして、デフォルトで存在するApp\Userを変更しSlackへの通知を可能にしています。

・app/User.php


  1. <?php
  2. namespace App;
  3. use Illuminate\Notifications\Notifiable;
  4. use Illuminate\Contracts\Auth\MustVerifyEmail;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. class User extends Authenticatable
  7. {
  8.     use Notifiable;
  9.     /**
  10.      * The attributes that are mass assignable.
  11.      *
  12.      * @var array
  13.      */
  14.     protected $fillable = [
  15.         'name', 'email', 'password',
  16.     ];
  17.     /**
  18.      * The attributes that should be hidden for arrays.
  19.      *
  20.      * @var array
  21.      */
  22.     protected $hidden = [
  23.         'password', 'remember_token',
  24.     ];
  25.     /**
  26.      * The attributes that should be cast to native types.
  27.      *
  28.      * @var array
  29.      */
  30.     protected $casts = [
  31.         'email_verified_at' => 'datetime',
  32.     ];
  33.     // 以下を追加
  34.     public function routeNotificationForSlack($notification)
  35.     {
  36.         return env('SLACK_URL');
  37.     }
  38. }






Notification



通知する内容はNotificationクラスで指定します。
以下のコマンドでクラスの雛形を作成。


$ php artisan make:notification SampleNotification




app/Notifications/SampleNotification.phpが出力されます。
内容を以下のように編集。

・app/Notifications/SampleNotification.php


  1. <?php
  2. namespace App\Notifications;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Notifications\Notification;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Notifications\Messages\MailMessage;
  7. use Illuminate\Notifications\Messages\SlackMessage;
  8. class SampleNotification extends Notification
  9. {
  10.     use Queueable;
  11.     public function __construct()
  12.     {
  13.     }
  14.     public function via($notifiable)
  15.     {
  16.         return ['slack'];
  17.     }
  18.     public function toArray($notifiable)
  19.     {
  20.         return [
  21.         ];
  22.     }
  23.     public function toSlack($notifiable) {
  24.         return (new SlackMessage)
  25.             ->from('Bomb', ':bomb:') // 送信元
  26.             ->to('#general ') // 送信先
  27.             ->content('Slackへの通知テスト'); // メッセージ
  28.     }
  29. }




送信テスト用のコマンドを作成します。
・app/Console/Commands/SampleCommand.php


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. class SampleCommand extends Command
  8. {
  9.     protected $signature = 'my:command';
  10.     protected $description = 'コマンドサンプル';
  11.     public function __construct()
  12.     {
  13.         parent::__construct();
  14.     }
  15.     public function handle()
  16.     {
  17.         // Notifiableなオブジェクトを作成
  18.         $user = new User();
  19.         // 対象にSlackメッセージ配信
  20.         $user->notify(new SampleNotification());
  21.         
  22.     }
  23. }




実行


$ php artisan my:command



お手軽にSlackへ通知できました。

a04_04.png


複数人への一括配信



複数人に一括で配信したい場合は、Notification::sendが便利です。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. use Illuminate\Notifications\Notification;
  8. class SampleCommand extends Command
  9. {
  10.     protected $signature = 'my:command';
  11.     protected $description = 'コマンドサンプル';
  12.     public function __construct()
  13.     {
  14.         parent::__construct();
  15.     }
  16.     public function handle()
  17.     {
  18.         // Notifiableなオブジェクトを作成
  19.         //$user = new User();
  20.         // 対象にSlackメッセージ配信
  21.         //$user->notify(new SampleNotification());
  22.         $users = [];
  23.         $users[] = new User();
  24.         \Notification::send($users, new SampleNotification());
  25.         
  26.     }
  27. }





ユーザーごとにメッセージ内容を変更



SampleNotificationのtoSlackは、Notifiableトレイトをuseしているオブジェクトが渡されます。
今回の例だとUserオブジェクトが$notifiableとして渡されます。

ユーザーごとにメッセージを変更したい場合は、$notifiableの内容により処理を変更すればOKです。

・SampleNotification.php


  1. <?php
  2. namespace App\Notifications;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Notifications\Notification;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Notifications\Messages\MailMessage;
  7. use Illuminate\Notifications\Messages\SlackMessage;
  8. class SampleNotification extends Notification
  9. {
  10.     use Queueable;
  11.     public function __construct()
  12.     {
  13.     }
  14.     public function via($notifiable)
  15.     {
  16.         return ['slack'];
  17.     }
  18.     public function toArray($notifiable)
  19.     {
  20.         return [
  21.         ];
  22.     }
  23.     public function toSlack($notifiable) {
  24.         return (new SlackMessage)
  25.             ->from('Bomb', ':bomb:') // 送信元
  26.             ->to('#general ') // 送信先
  27.             ->content('Slackへの通知テスト:'.$notifiable->name); // メッセージ
  28.     }
  29. }




・SampleCommand.php


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. use Illuminate\Notifications\Notification;
  8. class SampleCommand extends Command
  9. {
  10.     protected $signature = 'my:command';
  11.     protected $description = 'コマンドサンプル';
  12.     public function __construct()
  13.     {
  14.         parent::__construct();
  15.     }
  16.     public function handle()
  17.     {
  18.         $users = [];
  19.         $userA = new User();
  20.         $userA->name = 'Aさんへのコメント';
  21.         $users[] = $userA;
  22.         $userB = new User();
  23.         $userB->name = 'Bさんへのコメント';
  24.         $users[] = $userB;
  25.         $userC = new User();
  26.         $userC->name = 'Cさんへのコメント';
  27.         $users[] = $userC;
  28.         \Notification::send($users, new SampleNotification());
  29.         
  30.     }
  31. }




実行結果

a04_05.png

その他の使い方は、本家のドキュメントが詳しいです。
https://laravel.com/docs/5.8/notifications#slack-notifications



【参考URL】
https://laravel.com/docs/5.8/notifications#slack-notifications
Slack 通知を送信する
LaravelでFacadeを作ってSlackに通知してみた

関連記事

Laravel 5.8 Slack OAuthによるログインを実装する

SlackではOAuth 2.0認証が公開されています。
Sign in with Slack

この機能を利用して、LaravelでSlackアカウントによるSSO認証を組み込んでみます。


認証前の雛形



ログイン前の画面とログイン後に表示する画面を作成します。
ルートを追加。

・routes/web.php


  1. <?php
  2. Route::get('/login', function () {
  3.     return view('login');
  4. });
  5. Route::get('/home', function () {
  6.     return view('home');
  7. });




ログイン前の画面
・resources/views/login.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>ログイン</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             <a href="{{ url('home') }}">Slackでログイン</a>
  11.         </div>
  12.     </body>
  13. </html>




ログイン後の画面
・resources/views/home.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>コンテンツ</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             ログインしました
  11.         </div>
  12.     </body>
  13. </html>




ログイン画面のリンクをクリックしたらSlackのOAuth認証を実行。
ログイン後の画面に遷移する想定です。

a03_01.png

a03_02.png



Slack App



プログラムの作成前に、Slack Appを作成してOAuthのための認証情報を作成しておきます。
こちらが参考になりました。
PHPでSignin with Slackを試す

以下のリンクより認証に使用するアプリを作成します。
https://api.slack.com/apps/new

a03_03.png

作成すると、App IDやClient IDが発行されます。

a03_04.png

必要になるのは
・Client ID
・Client Secret
の2つですので控えておきます。

続いて、メニューの「OAuth & Permissions」を表示します。
「Redirect URLs」の箇所にOAuth認証後のリダイレクトを許可するURLを追加しておきます。
今回はhttp://[テストサーバー]/callbackを許可しました。

a03_05.png

これでSlack側の設定は完了です。



Laravel Socialite



Laravelにはlaravel/socialite」というOAuth認証を使用したログインを実現するためのパッケージが用意されています。
Laravel 5.3で外部アカウントを使用した認証機能を実装する方法

しかしSlackには対応していないそうで、別途自前で実装する必要があります。
Laravel 5.3のSocialiteに含まれていないLINEやYahoo!JAPANなどの認証サービスを利用する方法

Slackの実装サンプルを公開されている記事を見つけました。
Implementing Sign in with Slack using Laravel Socialite
こちらを参考に実装してみます。

まず、composerでlaravel/socialiteをインストールします。
Laravelのプロジェクトディレクトリに移動して以下のコマンドを実行。


$ composer require laravel/socialite




続いて、.envファイルを編集。
Slack Appを作成した際に取得したClient ID、Client Secret。
認証後にリダイレクトするURLを追記します。

・.evn


SLACK_CLIENT_ID=729920959312.7XXXXXXXXX
SLACK_CLIENT_SECRET=9b605bf03920887XXXXXXXXXXXX
SLACK_REDIRECT_CALLBACK_URL=http://192.168.1.103:8000/callback




services.phpで追記した.envのslackの情報が反映されるよう編集します。
・config/services.php


  1. <?php
  2. return [
  3.     /*
  4.     |--------------------------------------------------------------------------
  5.     | Third Party Services
  6.     |--------------------------------------------------------------------------
  7.     |
  8.     | This file is for storing the credentials for third party services such
  9.     | as Stripe, Mailgun, SparkPost and others. This file provides a sane
  10.     | default location for this type of information, allowing packages
  11.     | to have a conventional place to find your various credentials.
  12.     |
  13.     */
  14.     // (略)
  15.     // Slackの設定を追加
  16.     'slack' => [
  17.         'client_id' => env('SLACK_CLIENT_ID'),
  18.         'client_secret' => env('SLACK_CLIENT_SECRET'),
  19.         'redirect' => env('SLACK_REDIRECT_CALLBACK_URL'),
  20.     ],
  21. ];





Creating a custom Slack provider for Laravel Socialite



下準備の設定は終わったので、いよいよSlack認証を行うSocialiteを作成していきます。

app/Socialiteディレクトリを作成。
Socialite.phpを作成します。

・app/Socialite/Socialite.php


  1. <?php namespace App\Socialite;
  2. use Laravel\Socialite\SocialiteManager;
  3. class Socialite extends SocialiteManager
  4. {
  5.     public function createSlackDriver()
  6.     {
  7.         $config = $this->app['config']['services.slack'];
  8.         return $this->buildProvider(SlackProvider::class, $config);
  9.     }
  10. }




app/ProvidersディレクトリにSocialiteServiceProvider.phpを作成します。

・app/Providers/SocialiteServiceProvider.php


  1. <?php namespace App\Providers;
  2. use App\Socialite\Socialite;
  3. use Laravel\Socialite\SocialiteServiceProvider as SocialiteParentServiceProvider;
  4. class SocialiteServiceProvider extends SocialiteParentServiceProvider
  5. {
  6.     public function register()
  7.     {
  8.         $this->app->singleton('Laravel\Socialite\Contracts\Factory', function ($app) {
  9.             return new Socialite($app);
  10.         });
  11.     }
  12. }




最後にapp/SocialiteディレクトリへSlackProvider.phpを作成します。

・app/Socialite/SlackProvider.php


  1. <?php namespace App\Socialite;
  2. use Laravel\Socialite\Two\User;
  3. use Laravel\Socialite\Two\AbstractProvider;
  4. use Laravel\Socialite\Two\ProviderInterface;
  5. class SlackProvider extends AbstractProvider implements ProviderInterface
  6. {
  7.     /**
  8.      * {@inheritdoc}
  9.      */
  10.     protected $scopes = [
  11.         'identity.basic',
  12.         'identity.team',
  13.         'identity.email',
  14.         'identity.avatar'
  15.     ];
  16.     /**
  17.      * {@inheritdoc}
  18.      */
  19.     protected function getAuthUrl($state)
  20.     {
  21.         return $this->buildAuthUrlFromBase('https://slack.com/oauth/authorize', $state);
  22.     }
  23.     /**
  24.      * {@inheritdoc}
  25.      */
  26.     protected function getTokenUrl()
  27.     {
  28.         return 'https://slack.com/api/oauth.access';
  29.     }
  30.     /**
  31.      * {@inheritdoc}
  32.      */
  33.     protected function getUserByToken($token)
  34.     {
  35.         $options = ['headers' => ['Accept' => 'application/json']];
  36.         $endpoint = 'https://slack.com/api/users.identity?token='.$token;
  37.         $response = $this->getHttpClient()->get($endpoint, $options)->getBody()->getContents();
  38.         return json_decode($response, true);
  39.     }
  40.     /**
  41.      * {@inheritdoc}
  42.      */
  43.     protected function mapUserToObject(array $user)
  44.     {
  45.         return (new User)->setRaw($user)->map([
  46.             'id'        => array_get($user, 'user.id'),
  47.             'name'     => array_get($user, 'user.name'),
  48.             'email'     => array_get($user, 'user.email'),
  49.             'avatar'    => array_get($user, 'user.image_32'),
  50.         ]);
  51.     }
  52. }




config/app.phpを編集。
作成したSocialiteServiceProviderが利用できるよう、providersに追記します。

・config/app.php


  1. <?php
  2. return [
  3.     /*
  4.     |--------------------------------------------------------------------------
  5.     | Autoloaded Service Providers
  6.     |--------------------------------------------------------------------------
  7.     |
  8.     | The service providers listed here will be automatically loaded on the
  9.     | request to your application. Feel free to add your own services to
  10.     | this array to grant expanded functionality to your applications.
  11.     |
  12.     */
  13.     'providers' => [
  14.         // ...
  15.         //slack/socialite
  16.         App\Providers\SocialiteServiceProvider::class,
  17.     ],
  18. ];



これでSlack OAuth認証を利用する準備ができました。




アプリケーションへの組み込み



最初に作成した雛形にSlack認証を組み込んでみます。

・routes/web.php


  1. <?php
  2. Route::get('/login', function () {
  3.     return view('login');
  4. });
  5. Route::get('/home', function () {
  6.     return view('home');
  7. });
  8. Route::get('/redirect', 'OAuthController@redirectToProvider');
  9. Route::get('/callback', 'OAuthController@handleProviderCallback');




ログイン前の画面
・resources/views/login.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>ログイン</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             <a href="{{ url('redirect') }}">Slackでログイン</a>
  11.         </div>
  12.     </body>
  13. </html>




ログイン後の画面
・resources/views/home.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>コンテンツ</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             ログインしました
  11.         </div>
  12.     </body>
  13. </html>




OAuth認証のためのコントローラー
・app/Http/Controllers/OAuthController.php


  1. <?php
  2. namespace App\Http\Controllers;
  3. use Socialite;
  4. class OAuthController extends Controller
  5. {
  6.     
  7.     // Slack認証へ遷移
  8.     public function redirectToProvider()
  9.     {
  10.         return Socialite::driver('slack')->redirect();
  11.     }
  12.     // Slackからのリダイレクト
  13.     public function handleProviderCallback()
  14.     {
  15.         $user = Socialite::driver('slack')->stateless()->user();
  16.         return view('home', ['user' => $user]);
  17.     }
  18. }




動かしてみます。

a03_06.png

a03_07.png

a03_08.png

無事SlackのOAuthを通過し、アプリケーションに戻ってきました。
Slackから取得できる情報は以下の通り。


'id' => [Slack ID]
'nickname' => [ニックネーム]
'name' => [ユーザー名]
'email' => [ユーザーのメールアドレス]
'avatar' => [アバターの画像URL]






【参考URL】
Sign in with Slack
PHPでSignin with Slackを試す
Laravel 5.3で外部アカウントを使用した認証機能を実装する方法
Laravel 5.3のSocialiteに含まれていないLINEやYahoo!JAPANなどの認証サービスを利用する方法

関連記事

Laravel PostgreSQLに接続する

Laravel 5.8からPostgreSQLに接続してみます。


接続ライブラリ



PHPからPostgresqlへの接続ライブラリをインストールしておきます。


$ sudo apt install php-pgsql




設定ファイルの編集




ローカルにインストールしたPostgreSQL
データベース:sample
ユーザー名:pgadmin
パスワード:P@ssw0rd



上記のデータベースに接続してみます。
.envファイルの該当箇所を編集。


DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=sample
DB_USERNAME=pgadmin
DB_PASSWORD=P@ssw0rd



Laravel コンソールから実行するバッチプログラムの作成
こちらで調べたコンソールコマンドで接続を試してみます。

データベースに接続するため、「use Illuminate\Support\Facades\DB」を追加。
サンプルは以下のようになりました。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. class SampleCommand extends Command
  6. {
  7.     protected $signature = 'my:command';
  8.     protected $description = 'コマンドサンプル';
  9.     public function __construct()
  10.     {
  11.         parent::__construct();
  12.     }
  13.     public function handle()
  14.     {
  15.         $rows = DB::select('select * from test');
  16.         var_export($rows);
  17.     }
  18. }



コマンドを実行してテスト


$ php artisan my:command



これでtestテーブルの中身が検索できました。
ちゃんとデータベースに接続できたようです。

関連記事

Laravel コンソールから実行するバッチプログラムの作成

Laravel 5.8でWebではなくコンソールから実行するバッチプログラムを作成してみます。

こちらを参考にしました。
Artisan Console


Hello World



まず、Hello Worldが出力できるところまで試してみます。
以下のコマンドでコンソール実行用の雛形を作成。


$ php artisan make:command SampleCommand



実行すると、「app/Console/Commands」に「SampleCommand.php」が生成されます。
ファイルの中身は以下の通り。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'command:name';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'Command description';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         //
  35.     }
  36. }



この状態で、artisan listを実行してみます。


$ php artisan list



a02_01.png

「command:name」という項目が表示されます。
これで作成した雛形プログラムが実行可能であることがわかります。
以下のコマンドで実行可能ですが、処理を記載していないので何も表示されません。


$ php artisan command:name




handleに処理を記載します。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'command:name';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'Command description';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         echo ('Hello World!');
  35.     }
  36. }



とりあえずHello Worldが出力できました。


$ php artisan command:name
Hello World!





いろいろな表示



infoやcommentといったメソッドで、コンソールに強調して文字を表示することができます。
handleの部分を修正しました。


  1.     public function handle()
  2.     {
  3.         $this->line('Hello World!(line)');
  4.         $this->info('Hello World!(info)');
  5.         $this->comment('Hello World!(comment)');
  6.         $this->warn('Hello World!(warn)');
  7.         $this->error('Hello World!(error)');
  8.     }



実行結果

a02_02.png



コマンド名の変更と引数の取得



コマンド名は「$signature」で指定した値。
コマンドの説明は「$description」で指定した値が採用されます。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line('Hello World!(line)');
  35.     }
  36. }



php artisan listを実行すると、変更されていることがわかります。

a02_03.png


引数の指定は$signatureに記載します。


  1. protected $signature = 'my:command {arg1} {arg2}';



指定された引数の取得は$this->argument


  1.     public function handle()
  2.     {
  3.         $this->line($this->argument('arg1'));
  4.         $this->line($this->argument('arg2'));
  5.     }




サンプルは以下のようになりました。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command {arg1} {arg2}';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line($this->argument('arg1'));
  35.         $this->line($this->argument('arg2'));
  36.     }
  37. }




実行してみます。


$ php artisan my:command symfo ware
symfo
ware





その他、オプション引数やキーワード引数も指定可能です。
キーワード引数は$this->optionで値を取得します。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command {arg1?} {--arg2=no arg2}';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line($this->argument('arg1') ?? 'no arg1');
  35.         $this->line($this->option('arg2'));
  36.     }
  37. }




実行結果


$ php artisan my:command
no arg1
no arg2

$ php artisan my:command symfo
symfo
no arg2

$ php artisan my:command symfo --arg2=ware
symfo
ware



関連記事

Laravel 5.8 composerによるインストールとデバッグサーバーの起動

Ubuntu 18.04へLaravel 5.8を設置。
内蔵のデバッグサーバーで起動してみます。

こちらを参考にしました。
https://laravel.com/docs/5.8


必須ライブラリ



Laravelの実行に必要なPHP拡張をインストールしておきます。


$ sudo apt install php-bcmath php-json php-mbstring php-tokenizer php-xml





composerによるインストール



composerをインストール。


$ sudo apt install composer



laravelのインストーラーを取得。


$ composer global require laravel/installer



こちらがインストーラーになります。
$HOME/.config/composer/vendor/bin/laravel

$HOME/.config/composer/vendor/bin/にパスを通すか、直接フルパスを指定して実行できます。

プロジェクトを作成するディレクトリに移動。


$ cd /home/user/some/path



以下のコマンドで作成


laravel new [プログラム名]



パスを通していない場合は、laravelをフルパスで指定します。


$ ~/.config/composer/vendor/bin/laravel new sample



「sample」というフォルダが作成され、Laravelの雛形が配置されます。

sampleディレクトリに移動。
artisanコマンドでデバッグサーバーを起動します。


$ cd sample
$ php artisan serve



別の端末からも閲覧したい場合は--hostオプション付きで起動。


$ php artisan serve --host 0.0.0.0



http://localhost:8000/にアクセスすると雛形の画面が表示されます。

a01_01.png




インストール後の設定



storage、bootstrap/cacheを書き込み可能にしておきます。


$ chmod -R 766 storage
$ chmod -R 766 bootstrap/cache




key:generateを実行し、セッションなどに使用されるアプリケーション固有のキーを作成します。


$ php artisan key:generate



これで一通り設定は完了です。



【参考URL】

Laravelのartisanでサーバを立ち上げた時にプライベートIPでアクセスできない問題と、その対処法
関連記事

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ