monologのHandlerを利用してSlackBotをつくる

概要

PHPをお使いの皆様にはおなじみのmonologを利用してSlackBotをつくる方法を紹介します



monolog

github.com

PHPのLoggingライブラリ

PHPのLoggingライブラリではほぼ一択でmonologです



SlackBot

SlackBotには大きく2種類あります

  1. 一方通行の投稿

  2. 投稿内容に反応して、返信やイベント処理を行うもの

今回は1の一方通行の投稿を行うBotをmonologを利用してつくっていきます



monolog Handler

monologにはHandlerという概念があり、ログの出力先などを管理します

Slackが対応しているHandlerがあり

それを利用することで、とても簡単にSlackへの投稿をおなうことができます


Slackに関連するHandlerは3種類用意されていますが、今回は SlackWebhookHandler を利用します

monolog/SlackWebhookHandler.php at main · Seldaek/monolog · GitHub


他2種類はこちら

monolog/SlackHandler.php at main · Seldaek/monolog · GitHub

https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/SlackbotHandler.php



SlackにBotを登録する

下記で実装も紹介しますが、とても簡単なので、SlackのApp登録,Wenhook発行が本編です


SlackにAppを登録する

Customize your workspace | Slack

Start Building をクリック


Appの名前とどのWorkspaceに紐づけるか設定する


Incomming Webhook から


Activate Incoming Webhooks をONにすると

上記の設定画面が追加表示されるので、

Add New Webhook to Workspace からどのChannelに紐づくhookか設定して

WebhookのURLを発行します


このURLを利用して、Slackに投稿します

※ このURLは公開しないでください



実装

例ではdotenvを利用していますが、

基本的には SlackWebhookHandler を利用して、いつもどおりLoggingするだけで、Slackに投稿されます

github.com

<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
$dotenv = new \Dotenv\Dotenv(dirname(__DIR__));
$dotenv->load();
$logger = new \Monolog\Logger('slack');
$logger->pushHandler(
    new \Monolog\Handler\SlackWebhookHandler(
        $_ENV['SLACK_WEB_API_KEY'], // ここにWebhookのURLを設定する
        null,
        null,
        true,
        '',
        true,
        true,
        \Monolog\Logger::INFO
    )
);
// You will receive a message on your Slack
$logger->info("first message\nEmoji :thumbsup: ");


簡単!

あとは投稿する内容を毎日の数字のレポートやプロジェクトにあったものを設定してください

単純にエラーログをSlackに飛ばすということも同じようにできるので

本番環境で動かしているCLI系に、このSlackのHandlerを追加するのはオススメです

それではよいPHP, Slack生活をお送りください