目的
最近はネットで先人の方々の知恵にしみじみと感謝しています。
今回、薬剤師の私がどうしてこちらを作成したいのかといいますと...
Slackで薬局内の在庫を見える化したいから!
今回はSlackAPI連携まで行って
また時間があるときに続きを記事にします。
では早速まとめていきます。
やりたいこと
特定のslackチャネルへメッセージを送るRailsアプリを作成したい
ざっくりこんな感じの手順でやります
- Slackアプリを作成
- アプリのスコープ設定
- Slack botの設定とトークンを発行
- Slackの特定のチャネルへbotを招待
- Railsアプリの作成
- Slack Bot クラスを作成
- Railsコンソールからテキストを送信
Slackアプリを作成
-
まずはこちらからアクセスしてアプリの作成
Slack API: Applications | Slack -
Create New App
From amanifestとFrom scratchが選択できます
今回はFrom scratchを選択してゼロから作成 -
App Nameと自分自身のSlackワークスペースを設定
Nameはなんでも大丈夫です。
Slackのワークスペースを選択してCreate Appをクリックします。
Slackアプリのスコープ設定
-
Slackアプリのスコープ設定
※SlackのスコープではアプリがSlackワークスペース内で実行できる操作やアクセスできる情報を制御する権限の集合を指します。
簡単に説明するとアプリが「何ができるか」を決めるルールのことです。 -
左メニューのOAuth & Permissionsを選択する
-
chat:write
というスコープを設定
ここでchat:write
を選択すると、Railsアプリが任意のチャンネルやユーザーに対してメッセージを送信できるようになります。
Slack botの設定とトークン発行
-
左メニューのApp Homeを選択してApp Display Nameを編集
DisplayNameとDefault usernameは適当で大丈夫です
-
インストールの過程を終えるとトークンが発行されます
こちらのトークンはSlack API連携を行う際に必須となります。
また、こちらは機密情報です。ワークスペースの不正操作などを行われてしまうため、情報漏洩しないように気をつけましょう。
Slackの特定のチャネルへbotを招待
特定のチャネルにアプリを招待してslack側の操作は終了です。
※Slackのメッセージ画面で下記入力。your_bot_nameには今回設定したnameを記載。
/invite @your_bot_name
Railsアプリの作成してアクセストークを保管
- rails newでアプリケーションを作成
$ rails new アプリケーション名 [オプション]
-
slack-ruby-clientのgemをインストール
こちら下記をGemfileに追加
gem 'slack-ruby-client'
-
アクセストークンの設定
Slack側で発行したアクセストークンをcredentials.yml.enc
内に保管します。
rails5.2以降では基本的にcredential.yml.encに保管するようです。
こちらの記事が参考になります
EDITOR="vim" bin/rails credentials:edit
ファイル内に下記を記載
slack_api_token: 'your-slack-bot-token' # 実際のトークンを設定
Slack Bot クラスを作成
- Slack API を利用して簡単にメッセージを投稿する機能を作成
class SlackNotifyService
def initialize
@client = Slack::Web::Client.new
end
def post_message(message, channel:)
@client.chat_postMessage(channel: channel, text: message)
end
end
Slack::Web::Client.new
を使用して、Slack API にアクセスするためのクライアントインスタンスを作成します。このクライアントは @client
変数に保持されます。
次のメソッドではchat.postMessage
エンドポイントを呼び出して、特定のチャンネルにメッセージを投稿します。
- Slack API の認証設定を一元管理
Slack.configure do |config|
config.token = Rails.application.credentials.slack_api_token
end
Slack::Web::Client
がAPIを利用する際、認証に必要なアクセストークン(config.token)
を設定します。
こちらではcredential.yml.encで保持したトークンを呼び出します。
Railsコンソールからテキストを送信
- Railsコンソールで起動
rails console
- コンソールからテキストを送信
client = Slack::Web::Client.new
client.chat_postMessage(
channel: '#在庫管理bot',
text: 'こんにちは'
)
Slackチャネルでこのようにメッセージが来ていたら成功です。
参考サイト
https://api.slack.com/apis
https://github.com/slack-ruby/slack-ruby-client
https://zenn.dev/kame0707/articles/ef2453f31fe236