さくらインターネットのArukasでSlackのBotkitを動かしてみる

Arukasとは

arukas.io

さくらインターネットが提供しているDockerコンテナーホスティングサービスです。Container as a Serviceとでも言ったらいいのでしょうか。

2016年5月現在はベータ期間中なので無償で利用することができ、現時点での料金プランではEssentialプランで3コンテナーまで無料とのことなので、ベータ期間が終わってもちょっとだけ使ってみたいというのであれば、無料で使用できそうです。

今回は、このArukas上で発言に反応するようなBotが動作するDockerコンテナーを起動し、動作確認するところまでをやってみます。

SlackのBotユーザーを作成する

Botの作成にはBotkitを利用します。

github.com

Botkitを利用するには、SlackのBotユーザーが必要です。以下のリンクからBotユーザーの追加ができるので、適当に名前を決めて登録し、BotユーザーのAPIトークンを取得します。

既存のBotユーザーがある場合はそのユーザーのトークンを利用することもできます。

https://my.slack.com/services/new/bot

ここで取得したBotユーザーのトークンは、後ほどArukasの設定で使用します。

Arukasの設定

Arukasにログインし、新しいアプリケーションを追加します。

f:id:ariarijp:20160506225045p:plain

その際、主要な項目は以下のように設定してください。

  • Image: ariarijp/botkit
  • Instances: 1
  • Memory: 256MB
  • Endpoint: (空白)
  • Port: 8080 tcp
  • ENV: 指定する
    • SLACK_API_TOKEN: Botユーザーのトークン
    • PORT: 8080

ベータ版の時点ではDockerイメージはDocker Hubからのpullのみの対応となっており、プライベートリポジトリには対応していないようです。今回使用するイメージは、この記事にあわせて作成したものとなりますが、Botの挙動を変更したい場合は、元のリポジトリをForkするなどして、JavaScriptを書き換えることになります。

また、ArukasはWebアプリ向けに作られているのか、必ずひとつ以上のポートを公開する必要があります。

発言に反応するBotを動作させる場合はポートを公開する必要がないのですが、今回使用するコンテナでは、SlackのSlash Commandのエンドポイントも含めており。そのエンドポイントが使用するポートを番号を指定しています(Slash Commandの設定については割愛します

各項目を入力したら、設定を保存してアプリを起動します。

アプリの起動後、詳細画面で「アプリは起動状態です」と表示されていれば、正常に起動ができているということになります。

f:id:ariarijp:20160506230201p:plain

動作確認

最後にSlackで動作確認します。アプリが起動している状態でSlackを見ると、Botユーザーがログインしている状態になっています。

f:id:ariarijp:20160506230414p:plain

この状態で、テストで利用するチャンネルにBotユーザーを招待し、以下のようにメンションをつけてメッセージを投稿します。

@Botユーザー名 hello

メッセージを「hello」とBotユーザー宛に投稿すると「hello」とBotユーザーはメッセージを送信します。

f:id:ariarijp:20160506230714p:plain

まとめ

今回は単純なBotをArukasにデプロイしただけですが、Dockerコンテナーに依存関係を押し込んでしまうことで、デプロイ先の環境などを気にせずBotを開発できますね。

しかし、Arukasはまだコンテナー同士のリンクや永続的なストレージには現時点で対応していないため、データが揮発することを考えてアプリを実装する必要があることには注意が必要です。

参考