Sitemap
スタディスト Tech Blog

最新記事はnoteマガジン「Studist Tech」をチェックしてください! https://note.com/studist/m/m0a7023a58bfb

IBM Cloud(Bluemix)でSlack通知Hubotを無料で24時間365日動かす

9 min readApr 5, 2018

--

どんなときも明るい弊社のマスコットキャラクター「まろん」

こんにちは。スタディスト営業部のSAKANOです。

みなさん、Slack、使ってますか?!

いまやテレビでCMを見かけるほどに一般的になってきて便利なSlackですが、やっぱりBotなんかを連携させて動かしたい気持ちが湧いてきますよね。

今回の記事では、お金をかけずに(無料で)、BotをSlack上で24時間365日動かす方法をご紹介します。

その前に…

本題に入る前に、なぜ私が営業部なのに開発ブログ記事を書いてるのか、一応説明しておきます。

実は先日、私は開発部から営業部(マーケティングユニット)に異動したからなのです。

スタディストの良いところは、自分の希望と会社の方針があえば、部署間の異動もすんなりできてしまうところ。
希望出してから1〜2週間で部門間での調整は完了しました。

そう、つまり、「プルリクの出せるマーケター」が誕生したわけです。

さて、前置きはこのあたりで終わりにして、早速本題へ…

必要なものと簡単な解説

今回必要となるのは、以下の通りです。

  • Node.js
    - サーバーサイドJS環境。
  • npm
    - Node.jsパッケージ管理ツール。
  • Hubot
    - Github製のお手軽Botアプリフレームワーク。
    - botの振る舞いはCoffeeScriptで書きます。
  • Yeoman
    - Hubotジェネレータ
  • IBM Cloudのアカウント
    - CloudfoundryをベースにしたIBMが提供するPaaS。
    - Hubotアプリをデプロイする対象です。
    - Watson連携なんかもやりやすいみたい。おもしろそう。
    - 2018/03/22現在、無料プラン(ライト)で24/365のbot稼働可能。
    - メモリ割り当てを256MB以下にすると無料で稼働できる。
    -しかし10日間デプロイしないとインスタンスが非アクティブになる(停止してしまいます…)。
    - 10日間デプロイが止まるBotなんてBotとは呼ばない!
  • Slackアカウント
    - SlackとBotを連携させるため、いわずもがな必要ですね。
  • Slackアプリ「Hubot」
    - 作ったBotアプリをSlackと連携するのに必要。

手順

ローカルでHubot作成

まずはローカルでBotアプリを作成して動作確認をします。

$ npm install -g yo generator-hubot
$ mkdir my_hubot
$ cd my_hubot
$ yo hubot
# owner: 任意
# bot_name: hoge(任意)
# discription: 任意
# Bot adapter: slack
$ bin/hubot
hoge> hoge ping
# hoge> PONG と返ってこればOK

ローカルのHubotをSlackと連携

ローカルでbotが作成できたことを確認できたら、次はSlackと連携させます。

  1. SlackにHubotアプリを追加
    SlackにHubotアプリを追加する手順について詳しく書かれた記事がありますので、参考になさってください。
  2. HubotをSlack連携モードで起動し、動作確認
    SlackのHubotアプリで生成されたトークンを環境変数に格納することで、連携が実現されます。
$ export HUBOT_SLACK_TOKEN=xxxXXXXXxxxXXXXX # SlackのHubotアプリで取得したキー
$ bin/hubot --adapter slack
# slackのDMでpingと打って、PONGと返ってきたらOK

IBM CloudへHubotアプリをデプロイ

ローカルでの動作確認が終わったら、次はいよいよクラウドPaaS上にデプロイします。

  1. IBM Cloud無料枠アカウント登録
    公式サイトからフリー・アカウントを作成できます。
    アカウント作成手順やアカウントについての詳しい解説が書かれた記事がありますので参考になさってください。
  2. デプロイ

1)デプロイのためのCLIを入れる

BotアプリをIBM Cloudにデプロイするには、独自コマンドをインストールする必要があります。下記①か②のいずれか好きな方を導入しましょう。

① cloudfoundry (cf) CLI

IBM Cloud(Bluemix)は Cloudfoundry ベースで動いているので、cloudfoundryコマンドを使うことができます。

Macならbrewで入れると楽です。

$ brew tap cloudfoundry/tap
$ brew install cf-cli

② blumix(bx)CLI

IBMがcfコマンドをラップしたもので、ほとんどcfと同じですが、個人的にはこちらを使っています。
※公式サイトからインストールすることができます。

2)Hubotプロジェクトのルートディレクトリで manifest.yml を作成

Get SAKANO Motoki’s stories in your inbox

Join Medium for free to get updates from this writer.

manifest.ymlをプロジェクトに含めておくと、そこに書いた設定をもとにIBM Cloudインスタンスが構成されます。

※ メモリを 256MB に設定するのが、インスタンスを無料稼働させるためのミソ。

$ cd my_hubot
$ vim manifest.yml
# 以下を書く
applications:
- name: hoge # 任意のアプリ名
command: ./bin/hubot --adapter slack
path: .
instance: 1
memory: 256M #
env:
HUBOT_SLACK_TOKEN: xxxXXXXXxxxXXXXX # SlackアプリHubotで取得したトークン

メモリ割り当てについては、詳しく書かれている記事がありましたので、あわせて参照してみてください!

3)Hubotプロジェクトのルートディレクトリで .cfignore を作成

.cfignoreファイルをプロジェクトに含めておくと、デプロイの際にデプロイ対象から外したいファイルやディレクトリを指定できます。

この設定をしておくことで、$ cf push実行時に、node_modules 以下がpush されなくなります。

$ cd my_hubot
$ vim .cfignore
# 以下書く
node_modules # node_modules以下をデプロイしない設定

4)デプロイ

流れとしては、loginしてpush するだけです。(セッションが切れる度にログインし直す必要があるので、スクリプトにしておくと楽。)

$ bx login -a https://api.ng.bluemix.net -u メールアドレス -p パスワード -c ユーザーID -o 組織名 -s スペース名
$ bx app push

5)Slackで動作確認

ここまでできたら、SlackでBotアカウントとのダイレクトメッセージにて動作を確認してみましょう。

「ping」と打って、Botから「PONG」と返ってきたら大成功!

成功!

Botが返す内容(振る舞い)の定義

Botの振る舞いの定義は、基本的にはプロジェクトフォルダの /scripts 以下に hoge.coffeeのようなファイルを作成し、Coffee Scriptで書いていきます。(公式ドキュメントと、プロジェクト内の /scripts/example.coffeeも参考にしてみましょう!)

たとえば、うちのBot「maron」には、こんな記述をしています。

module.exports = (robot) ->
robot.hear /(まろん|マロン)/i, (res) ->
res.send res.random ["お呼びでしょうか?", "はい!まろんです!"]
robot.hear /おはよう/i, (res) ->
res.send res.random ["おはようございます!", "Good Morning!"]
robot.hear /おやすみ/i, (res) ->
res.send res.random ["おやすみなさい!", "Good Night!"]

Botの反応のさせ方としては、robot.hear と robot.respond の2種類があります。両者のざっくりとした違いは、Slackで言うところのメンションの有無です。

robot.hearはメンションがなくても指定した単語が出現したら反応し、robot.respondはメンションがないと反応しません。

ハマリポイント

プロジェクト内の node_modules を一緒にデプロイしようとするとうまくいかなかった

Bluemix(Cloudfoundry)が、デプロイ時に自身で node_modulesをインストールするため、node_modulesはデプロイ対象に含めなくてOKみたいです。

上記手順箇所で、 .cfignoreファイルで node_modules をデプロイ対象外にしているのはこのためです。

以下、参考にした記事リンクを載せておきます。

まとめ

Botは便利ですが、どの環境上で動かすかなど、インフラ面をどうするかは悩ましいところですよね。

なるべくコストをかけたくないし、費用が発生するとなると環境を使うための社内調整にも、多少なりとも手間がかかり面倒だと思います。

今回のように無料で運用できれば、そういった悩みもなくサクッと利用開始できるので、まず試しにやってみたいという方にはオススメです。

今回の記事が、Botの運用環境を調べる中で「Herokuの情報ばかりだ…」「結局どうしよう」と悩んでいる方の一助となれば幸いです!

We are hiring!

Press enter or click to view image in full size

スタディストでは、自社プロダクトである、マニュアル作成・共有プラットフォーム「Teachme Biz」を一緒に加速してくれるエンジニア・デザイナーを募集しています!

私たちスタディスト社員は、業務のムダや伝達ロスを減らし、「伝えることを、もっと簡単に」を実現するために、日々精進しています。

少しでもピンときた方は、コーポレートページかWantedlyページからコンタクトを是非お願いします!

それでは!

--

--