🔖
【Laravel】Slack通知を実装する
この記事を読んでわかること
- Laravelを使用してSlack通知を実装する手順
使用環境
- Laravel 5.5.49
- PHP 7.1.29
全体の流れ
- Slack WebHookのURLを取得
- Notificationクラスの作成
- 処理を実行する本体のサービスクラスを作成
- ファーサードクラスを作成
- サービスプロバイダの作成
- 使用する
Slack WebHookのURLを取得
事前準備として、Slack WebHookのURLを取得します。
取得手順は、以下の記事が参考になりました。
取得したURLを.envファイルに記載します。
SLACK_CHANNEL=取得したURL
参照する際はconfig経由で行うため、登録します。また、後ほど使用するため、プロバイダーとエイリアスの登録の記載もします。
(config経由で使用する理由については、Laravel の .env の値は config() 経由で使う
Laravel PHPの記事が参考になりました。)
app/config/app.php
'slack_url' => env('SLACK_CHANNEL'),
'providers' => [
/*省略*/
App\Providers\SlackServiceProvider::class,//追記
],
'aliases' => [
/*省略*/
'Slack' => App\Services\Slack\SlackFacade::class,//追記
],
更新したあとに以下のコマンドを実行して、キャッシュをクリアします。
$ php artisan config:cache
Notificationクラスの作成
$ composer require guzzlehttp/guzzle //Guzzle HTTPライブラリをインストール
$ php artisan make:notification SlackNotification
コマンド実行でapp/Notifications
配下にファイルが作成されます。
ファイルの中身と記述内容に関しては以下に記載します。
app/Notifications/SlackNotification.php
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\SlackMessage;
class SlackNotification extends Notification
{
use Queueable;
protected $message;
protected $channel;
public function __construct($message) {
$this->message = $message;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['slack'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->from('hoge')
->to($this->channel)
->content($this->message);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
処理を実行する本体のサービスクラスを作成
今回は、Slack通知用に、app/Services
配下に新しくSlack
ディレクトリを作成してファイルを追加していきます。
app/Services/Slack/SlackService.php
<?php
namespace App\Services\Slack;
use Illuminate\Notifications\Notifiable;
use App\Notifications\SlackNotification;
class SlackService {
use Notifiable;
public function send($message = null) {
$this->notify(new SlackNotification($message));
}
public function routeNotificationForSlack() {
return config('app.slack_url');
}
}
ファーサードクラスを作成
app/Services/Slack/SlackFacade.php
<?php
namespace App\Services\Slack;
use Illuminate\Support\Facades\Facade;
class SlackFacade extends Facade {
protected static function getFacadeAccessor() {
return 'slack';
}
}
サービスプロバイダの作成
$ php artisan make:provider SlackServiceProvider
コマンド実行で、app/Providers/SlackServiceProvider.php
が作成されます。
ファイルの中身と記述内容に関しては以下に記載します。
app/Providers/SlackServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class SlackServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//追記
$this->app->bind(
'slack',
'App\Services\Slack\SlackService'
);
}
}
使用する
使用したいファイルにuse Slack;
を記載し、Slack::send('送信したいメッセージ')
と記載すると、Slackに通知が届きます。
参考記事
Discussion