LaravelでSlackを使ってみましょう

Laravelを用いて開発していたWEBシステムからSlackへメッセージを送りたいという依頼がありました。
Slackは有名なグループチャット、1対1のメッセージング、音声通話のアプリです。
テックなサードパーティーサービスを追加することができるのでIT業界では非常に使われています。

この記事でステップバイステップにPHPのアプリケーションにSlackを使うことを説明したいと思います。

Slack API

Slackは豊富な各種サードパーティーサービスと連携することができ、非常に便利で分かりやすいAPIを持っています。

使っているSlackワークスペースの権利があればAppというものを作ることで当ワークスペースで様々なSlack機能を制限しコントロールすることができます。

Appの権利を設定したら安全でAPIを使うことができます。
例えば以下の画像の権利(chat:write)ではチャンネル作成や削除する等はできません。

チャットメッセージ書込権利しかもっていないので、これしかできないAppになります。

このように使う機能の権利のみを与えるのは、ベストプラクティスです。

Slack APIの多数の機能はhttps://api.slack.com/でよく説明されています。
携わっていたプロジェクトの目標はSlack APIのメソッドをLaravelで操ることです。これをするには二つの方法を使いました。

その一つはLaravelコマンドです。

Laravelコマンド

Laravelコマンドバスは、シンプルで分かりやすい「コマンド」として、実行する必要のあるアプリケーションのタスクをカプセル化する便利なメソッドです。
Slack Apiをテストしたいのならこれから始めたらいい思いました。
新しいコマンドクラスは、make:command の Artisan CLIで生成できます。
例えば:

php artisan make:command SendSlackMessage

生成されたクラスは、app/Commandsディレクトリーへ作成されます。
コマンドを起動したらhandleの部分が読み込み実行されます。
Slack Apiでメッセージを送信するコマンドを作りたかったので、まずはコマンドに引数を追加する必要がありました。

次はAPIに基づいた処理を書くことです。handle関数の中でSlack APIが求める内容をHTTPリクエストに書いて送ったら、レスポンスをリターンに返すことです。

コマンド作成し終わったらテストして成功です。


次はコマンドではなくLaravelのコントローラーでAPIを使いましょう。

コントローラーでAPIを使ってみよう

APIをコントローラーで上手く利用するためにLaravel Slack ApiのComposerパッケージを使いましょう。
https://github.com/vluzrmos/laravel-slack-api

composer require vluzrmos/slack-api

これをインストールするとコントローラーの中で簡単にSlack Apiを使うことができます。

こうすると便利なメソッドでSlack Apiを使うことができます。

これで便利にSlackの機能を使えます。
例えばメッセージをコントローラーからslackへメッセージ送信させたいのなら下記のコードを使います。

$chat[] = SlackChat::message($channel, $msg);

SlackChat::message 関数で引数に記入されたメッセージを入力したチャンネルに書きます。
Apiは実行するとレスポンスが返されるので$chat[]の変数に保存します。

レスポンスでこのApiコールが成功したかどうかを確かめます。
あるApiコールはどんなレスポンスを発生するのかはhttps://api.slack.com/ に詳しく書いています。

私たちの場合だったらchat.postMessageのメソッドです。
このメソッドのページのExample responsesのところを見ると成功しているレスポンスとエラーのレスポンスの例が書いてあります。

レスポンスで返されたokのところを確認することで、Apiコールがちゃんと成功したを確かめることができ、コントローラーのリターンまでにも使えます。
レスポンスの中にあるts変数も非常に大事です。各メッセージのIDになるのでメッセージを削除したり編集したりしたいのなら不可欠です。

if($chat[0]->ok) {
$ts = $chat[0]->ts;
...

そうすると削除したい場合はdeleteのSlack Apiコールで簡単にできます。

$chat[] = SlackChat::delete($channel ,$ts);

まとめ

Slack Apiの使い方を少しだけ紹介していましたがチャットメッセージだけでなく色んな機能も使うことができます。
是非見てください、役に立っている機能あるかもしれません。

リモートワークが段々発展するIT業界ではコミュニケーションが更に大事になっているので、どこでも使えるSlackをもっと利用すればいいと思います。
おしまい。

スタッフ積極採用中

ジェイオンラインではスタッフを随時募集しております。
採用情報ページよりお気軽にお問い合わせください。

この記事を書いた人

オレリアンデルミ
オレリアンデルミ