こんにちは、エンジニアの仁木です。
現在関わっている案件でPHPのLaravelフレームワークを利用しています。
Laravelは手早く開発の土台を作ることができるのですが、その中に「ログをSlackに通知する」という機能があり、アプリにエラーが発生した時にSlackのチャンネルに通知してくれます。
すぐさまエラーの原因を見つけられるので、非常に便利な機能なのですが、仕組みとしてはSlackの「Incoming Webhook」と呼ばれるSalckアプリケーションを利用しています。
LaravelだとSlackアプリ側での設定と、いくつかのコンフィグファイルを編集するだけで、整形されたログをSlackに送ることができるようにしてくれているのですが、
今回はLaravelを使わずに「Incoming Webhook」を使って、SlackのチャンネルにCurlを使ってコマンドからメッセージを送信する方法を紹介したいと思います。
下記はSlackのIncoming Webhookの公式ページの説明です。
Incoming Webhook は、外部ソースからの情報を簡単にワークスペースと共有する方法です。
簡単に説明すると:
- 選択したチャンネルにデータを送信します。
- Webhook メッセージの書式を設定してチャンネルの他のメッセージよりも目立たせるようにします。
- メッセージテキストとその他のオプションを含む JSON ペイロードの HTTP リクエストを送信できます。
説明の中の「外部ソース」とは、Slackと連携したいアプリケーションやシステムです。
設定はチャンネル単位で行います。
Incoming Webhookをチャンネルに設定すると、外部ソースからリクエストを送信するためのURLが生成されます。
そして外部ソース側では、生成されたURLにHTTPリクエストを送信することで、チャンネルにメッセージを送信できるという仕組みですね。
手順としては
Slackの公式ページの手順通りに設定をしていきたいと思います。
まずはワークスペースにSlackアプリを作成します。
Slackアプリページの「Create New App」のボタンから新規アプリを作成します。
上記の操作でアプリを作成できたら、遷移後の画面のサイドメニューにある「Incoming Webhooks」を選択します。
上記でIncoming Webhooksのメニュー画面に、新しく「Webhook URL」が追加されます。このURLを使ってSlackのチャンネル上にメッセージを送信します。
生成されたURLを使ってチャンネルにメッセージを送信してみます。
Incoming Webhooksの画面では、サンプルのCurlコマンドが用意されているので、このコマンドで試しにチャンネルに送信されるか試してみます。
テストは簡単でコマンドラインから、サンプルのCurlを実行するだけで、チャンネルに「Hello World!」とメッセージが通知されると思います。
1 |
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/... |
PHPだと、GuzzleなどのHTTPリクエスト用のライブラリを使ってHTTPリクエストを作成して、メッセージを送信することができます。
さらにメッセージはテキストに装飾をつけたり、リンクをのせたり、ファイルを添付したりすることも可能なので、ログファイルを送信してSlackで受け取ったり、幅広く活用できそうです。