laravel5.8-slack簡単通知

##準備
[まず、Slack側でWebhookUrlを作成しておきます。リンク](https://test-rxq9351.slack.com/apps/A0F7XDUAZ--incoming-webhook-?next_id=0)

laravel5.8以降は、composerからSlackチャンネルのインストールが必要なので入れます。

```:コマンド
composer require laravel/slack-notification-channel
```

.envファイルにSlackに通知するため、[WebhookUrl](https://kintone-blog.cybozu.co.jp/developer/000283.html)とChannelを指定する。

```:.env
SLACK_CHANNEL=#test
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/自分用
```

設定を変えたので、反映させるためにキャッシュを消します。

```:コマンド
php artisan config:cache
```

##作成
###Notification
laravelの機能のNotificationを利用する。

```:コマンド
php artisan make:notification SlackNotification
```

```:SlackNotification
<?php

namespace App\Notifications;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\SlackAttachment;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\SlackMessage;

class SlackNotification extends Notification
{
    use Queueable;

    protected $content;
    protected $channel;

    public function __construct($message)
    {
        $this->channel = env('SLACK_CHANNEL');
        $this->content = $message;
    }

    public function via($notifiable)
    {
        return ['slack'];
    }

    public function toArray($notifiable)
    {
        return [
            //
        ];
    }

    public function toSlack($notifiable)
    {
        return (new SlackMessage)
            ->from('管理者')
            ->image('https://larapet.hinaloe.net/wp-content/uploads/sites/15/2017/03/cropped-86f8cf99663ac01836df2fa9c56890ff-1.png')
            ->to($this->channel)
            ->content('Hello')
            ->attachment(function (SlackAttachment $attachment) {
                $attachment
                    ->title('ユーザー', '')
                    ->field('名前', 'testUser')
                    ->field('メールアドレス', 'test@co.jp')
                    ->timestamp(Carbon::now());

            });
    }
}
```

[SlackAttachmentの参考記事](https://larapet.hinaloe.net/2017/04/09/slack-notification/)[・SlackAttachmentチートシート](https://qiita.com/daikiojm/items/759ea40c00f9b539a4c8)

・<b>viaメソッド</b>　どこのチャンネルに飛ばすか
・<b>toSlackメソッド</b>　もしfromの名前を動的に変えたいなどがあれば、constructで指定します。
SlackAttachmentを指定するといろいろ通知を工夫できます。

###Nortificableをuseしたクラスを用意する。
<b>use Notifiable</b>を記述したクラスならなんでもOK。Modelだとデフォルトでそうなっている場合があるので、基本そこの指定なのかな(しらない)　今回は、別クラスを用意してみます。

```:app/Services/SlackService
<?php
namespace App\Services;

use Illuminate\Notifications\Notifiable;
use App\Notifications\SlackNotification;

class SlackService
{
    use Notifiable;

    public function send($message = "test")
    {
        $this->notify(new SlackNotification($message));
    }

    protected function routeNotificationForSlack()
    {
        return env('SLACK_WEBHOOK_URL');
    }
}
```

・<b>routeNotificationForSlack</b>　routeNotificationFor○○の○○の部分で書かれたサービス名をもとに、Laravelが自動的にドライバ情報を読み込んでくれる
・<b>send</b>　$this->notifyで、SlackNotificationを発火させてる。

これで基本準備は完了したので、てきとうなRoute作って呼び出してみる。

```:web.php
Route::get('/slackTest', function (){
    (new \App\Services\SlackService())->send();
});
```

<img width="396" alt="Screenshot_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325600/5dd351e4-3395-83c4-c14a-cabaf10cbe0a.png">

こんな感じで出れば完了。

##参考にさせていただいた記事
https://www.ritolab.com/entry/110
https://qiita.com/10monori/items/a78fb7e270b141c793b1