Incoming Webhookを使ったSlack通知ライブラリを作った


Incoming Webhookを使ったSlack通知ライブラリを作った

おはこんばんにちは!和尚です

今日は初めてPHPの自作ライブラリをcomposer化までしてみました!
手順をざっくり書いて、作った自作ライブラリについての使い方を説明していくーーー!

経緯

そもそも何故、今更Slack通知のライブラリを作ろうと思ったのかについて軽くお話させていただきたい

今年からチャットサービスをSlackに乗り換えるぞ!という会社の方針で、以前チャットワークAPIを使って問合せ通知やらエラー監視ツールの通知やらをチャットワークに送っていたのですが、それらをSlackに移行しなければいけなくなってしまいました。

簡単に使えて便利なPHPのライブラリがあればよかったのですが、Slackの通知の仕組みが去年変わってしまっていて軒並み使えなさそうなライブラリたち...。とはいえ新しい仕組み自体もチャンネル毎にWebhookを使って通知するといった大したものではなかったのでPHPの自作クラスを作って対応しました。

そんなこんなで先月に移行作業を完了したわけなのですが、会社でPHPを使うことも多くSlack通知しないといけない処理が欲しいと言われたときにわざわざクラスコピーしてくるのも面倒だなーと思っていたのですが、もっと汎用的にしてcomposer化しちゃえば後々便利じゃない?とふと帰り道に思ったので今回作ってみることにしました。

参考サイト

自作ライブラリを作る手順

ざっくりとですが、自作のライブラリを作る手順は以下の順番になります。

  1. 自作ライブラリ用のディレクトリを作成する
  2. $ composer initでcomposerファイルを作成する
  3. 必要なパッケージをcomposer.jsonに記載し、$ composer installする
  4. srcディレクトリを作成し、autoloadの設定をcomposer.jsonに記載して$ composer dump-autoloadする
  5. 自作クラスを作成する
  6. テストコードを書く
  7. サンプルファイルを作成する
  8. ライセンスファイルを作成する
  9. readme.mdを書く
  10. githubにpushする
  11. packagistにgithubリポジトリを登録する

大体の作業は参考記事を見ながら作成したので、自作ライブラリが既に出来てるよ!って方は上記の参考サイトを見ながら登録してみてください。

Slack Notification

githubリポジトリ
packagist

Slack Notificationの使い方

ライブラリ自体はかなりシンプルな作りになっています。
※ sendメソッドの第二引数にwebhookのURLが必要になります。Slackの通知を行いたいチャンネルにてアプリ追加ボタンを押し、incoming-webhookを追加してwebhookのURLを控えておいてください。

1. インストール

$ composer require osyou84/slack-notification

2. SlackNotificationを使用するphpファイルで、autoload.phpを読み込む(既に読み込まれている場合はスキップ)

require_once(__DIR__ . '/vendor/autoload.php');

3.インスタンスの作成

use osyou84\SlackNotification\SlackNotification;

$slack_notificaiton = new SlackNotification;

4.メンションを設定し、送信する

$message = 'スラックに通知する';
$webhook_url = 'https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ';
$slack_notification->targetChannelAll()
                   ->send($message, $webhook_url);

メンションの設定方法

Slack Notificationではメンション用に4つのメソッドを用意しています。

1.ワークスペース全員に送る(#generalに向けて)

(new SlackNotification)->targetWorkspace()
                       ->send($message, $webhook_url);

2.チャンネル内の全員に送る

(new SlackNotification)->argetChannelAll()
                       ->send($message, $webhook_url);

3.チャンネル内でアクティブなメンバーに送る

(new SlackNotification)->targetActive()
                       ->send($message, $webhook_url);

4.指定したユーザーに送る

user_idはワークスペースの管理者がユーザー管理にてCSVダウンロードできます。

$user_ids = ['user_id_1', 'user_id_2', 'user_id_3'];
(new SlackNotification)->setTargets($user_ids)
                       ->send($message, $webhook_url);

まとめ

かなりざっくりですが、incoming webhookを簡単に使えるPHPライブラリ作ってcomposer化したので、使ってみてね!という記事でした
改良案を思い浮かんだら随時アップデートしていきたいところ...