バックエンド

【Laravel】【Slack】に通知する方法をまとめてみた【自作ファサード】

『Laravel』で『タスク管理システム』を自作していて、

  • 仕事の内容
  • 担当者の割り当て
  • 締め切り
  • 進捗状況

などがわかるようにしています。

また、
情報共有のために『Slack(スラック)』も使っています。

  • Slack(スラック)・・全世界で大人気な多機能チャットツール

Slack公式ホームページ

せっかくなら、

『タスク管理システム』で新しく投稿したり編集したタイミングで、

『Slack』にも通知したいなと思い、

いろいろググって実装したので、その方法をまとめてみました。

アオキ
Laravel 5.5 で実装しております。
Sponsored link

LaravelでSlackに通知する方法 変更するファイル

いろいろとググって試して、

今回は『ファサード』を使う方法で設定する事にしました。

  • ファサード・・玄関という意味。

『Slackファサード』を自作する事で、

コントローラ内で、

Slack::send(‘なんちゃら’);

と入力しておけば、『Slack』側にも通知がいくようになります。

※実際はなんちゃらの箇所は変数で指定しています。

大きく3つのパートに分けて設定しています。

  1. 初期設定
  2. Notification作成
  3. ファサード作成(サービス・ファサード・プロバイダ)

LaravelでSlackに通知する方法 1. 初期設定

まずは初期設定をば。

『Slack』には通知設定用の『webhook(ウェブフック)』という仕組みがあるので、

通知したい『Slackワークスペース』の『webhook URL』を取得します。

Sponsored link

1-1 Slackのwebhook URLを取得

このアドレスにアクセスします。

新規WebHook作成

通知したい『チャンネル』を指定して作成します。

生成された『Webhook URL』をコピーしておきます。

1-2. 環境ファイル .env に追記

取得した『webhook URL』を、
『.env』ファイルに追記しておきます。

合わせて、通知する際の名前もつけておきます。

1-3. guzzleのインストール

Laravel 5.3〜5.7の場合、
Laravelの『通知機能』では『guzzle(ガズル)』が使われているので、
『guzzle』をインストールする必要があります。

  • guzzle ・・ PHPのHTTPクライアント。HTTPリクエストを簡単に実現できる

『composer(コンポーザー)』がインストールされている状態で、
コマンドプロンプトから『guzzle』をインストールします。

  • composer ・・PHPをパッケージ管理してくれるツール

インストール後、

『composer.json』に追記されていればOKです。

アオキ
Laravel 5.8からは Slack Channelをインストールするように変わったようです。

参考記事
LaravelでFacadeを作ってSlackに通知してみた

Sponsored link

LaravelでSlackに通知する方法 2 Notificationクラス作成

『Laravel』では標準で、
メールやSlackなどで通知をするための専用のクラスが用意されています。

コマンドプロンプトから『Notification』クラスを追加します。

生成された『Notification』ファイルはこんな感じ。

初期設定だとメール通知として生成されるので、
『Slack』に通知するように書き換えます。

変更点として、

  • コンストラクタ(クラス生成時に実行)で変数定義
  • use でSlackMessage を追記
  • viaメソッドに slack を設定
  • toSlack メソッドを作成

しています。

LaravelでSlackに通知する方法3 ファサードを作成

『Slackファサード』を自作するために、4段階でファイルを作成していきます。

3-1. 『Notifiable』トレイトを使ってSlack通知機能をつくる
3-2. 『Slackファサード』をつくる
3-3. 『サービスプロバイダ』をつくる
3-4. config/app.php に追記する

Sponsored link

3-1. Notifiableトレイトを使う

app/Services/Slack フォルダを作成して、
その中に、 SlackService.php ファイルを作成して記載します。

  • Notifiableトレイトを追加する
  • 通知先のURLを返すrouteNotificationForSlackメソッドを追加
  • 通知処理の中で$this->notify()を呼び出す

しています。

『トレイト』関連記事

補足 Notificationの中身を見てみる

ここは余談ですが、

app/vendor/laravel/framework/src/Illuminate/Notifications/

の中に『Notifications(通知)』関連のファイルがずらっと保存されているので、
さらっと見ておくといいのではと思います。

notifyメソッド。

Sponsored link

3-2. Slackファサードを作成する

コントローラ内で、

Slack::send(‘なんちゃら’);

と使えるようにするために、『Slackファサード』を自作します。

app/Services/Slack フォルダの中に、

『SlackFacade.php』 を作成します。

  • extends で Facadeを継承しています。

Facadeファイルの本体 (Illuminate\Support\Facades\Facade) にgetFacadeAccessor()メソッドがあるので、それを上書きしています。

3-3. サービスプロバイダを作成する

作成した『Slackファサード』を使えるようにするために、

『サービスプロバイダ』を作成します。

  • サービスプロバイダ・・Laravel読み込み時に毎回呼び出される仕組み

『サービスプロバイダ』作成時は箱だけ作成されています(スケルトンと言ったりします。)。

こう書き換えます。

Sponsored link

3-4. config/app.php に追記する

作成した『サービスプロバイダ』を、
コンフィグファイルに追記します。

コンフィグファイル内に追記する事で、
『Laravel』が毎回読み込まれるタイミングで『Slack通知』も読み込まれるようになります。

LaravelでSlack通知 実際の使い方

適当なコントローラーで、
use Slack;

として『Slackエイリアス』を使えるようにして、

Slack::send(‘なんちゃら’);

と入力する事で、『Slack』側にも通知がいくようになります。

実際には、

  • 投稿した人
  • 案件番号
  • 件名

などを変数として定義しつつ投稿するようにしたりします。

アオキ
なぜか文字化け、、画面右上の <> ボタンを押してもらうと正しいコードが表示されると思います。

投稿すると、『Slack』側にも通知がいくようになります。

画像は『Laravel』側で設定もできますが、
今回は『Slack』の管理画面から設定しました。

アオキ
後から気づいたのですが、画像、名前、チャンネルともに管理画面からでも設定できるようです。
Sponsored link

LaravelでSlack通知する方法をまとめてみて

一から『Slack通知』機能をつくろうとするとなかなか大変なんじゃないかと思うのですが、

『Laravel』の色々な機能を組み合わせる事で、

  1. 早い
  2. 見やすい
  3. 修正しやすい

と3点セットな組み込みができました。

『メール』や『Slack』に『通知』する事で、
『スマホ』に『通知』がいくようにもなるので、
出先や在宅でも確認ができるようになるかなと思います。

アオキ
いろんなツールを使って、『時間』を有意義に使いたいもんですね。

参考記事
LaravelでFacadeを作ってSlackに通知してみた
LaravelでSlack通知を実装する~ソーシャルではなく開発者/管理者としてのSlack通知~

『Laravel』ではこんな記事も読まれています。

1. 【Laravel(PHP)】初心者向け アプリのつくり方 をリリースしました【techpit】

2. 【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【用語集も兼ねて】【初心者向け】

3. 【PHP】【Laravel】CSVエクスポートの方法〜5つのポイント〜

4. 【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

5. 【Laravel】ダミー(テスト)データを作る方法 シーダー(seeder)とfactoryとfaker【初心者向け】

6. 【Laravel】Webアプリ環境構築の仕方【Vue.js】【初心者向け】

7. 【Laravel】と【Vue.js】のサンプル動画を見ながらさらりと解説してみる

8. 【Laravel】マルチログイン(ユーザーと管理者など)機能を設定してみた【体験談】

9. 【Laravel】フォトギャラリーを作るための画像アップロード方法【php】

10. 【Laravel】多対多テーブルを複数つくる方法【ちょっとコツがいります】

11. 【Laravel】【Slack】に通知する方法をまとめてみた【自作ファサード】

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

  1. CG関連

    【3Dプログラム】初心者にオススメな方法はこれ(9)【P5.js】
  2. IoT関連

    【Arduino】ラジコンをつくってみた 〜今ドキのプログラムの覚え方
  3. 学び・教育

    『プログラミング教育』より大事な事を考えてみる~AI時代を見据えて~
  4. バックエンド

    【Python】手軽に試す方法2つとwebフレームワークについて【初心者向け】
  5. CG関連

    【P5.js】遊ぶようにプログラムできるクリエイティブコーディング〜はじめのいっ…
PAGE TOP