iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

Re:YammerでHubotを利用する(環境構築編2)

前書き

ご無沙汰となりました。iPXのabikoです。
またしても大分間が空いてしまいました。
一体何時から続いているのか、というHubot記事ですが、今回と次回を2本立てでお送りして一旦〆たいと思います。

さて今回の記事は...

前回の環境構築編も一年も前の記事となり、現在ではサーバを立てるまでの画面遷移など諸々が様変わりしています。
その環境構築について見ていくと、終わりが見えないので前回記事終了時点「Amazon EC2が起動しておりSSH接続ができている」ところから話を進めます。

前回の記事
Re:YammerでHubotを利用する(環境構築編1) - iPX社員によるブログ
前々回の記事
社内で利用するYammerにbotを作りたかった(環境構築編) - iPX社員によるブログ

実は今回、Hubotのインストールに大苦戦しました。
過去インストールできた方法が通用せず、エラーばかりだったんですね。
そのエラー達への対処は横に置いておき、最終的にインストールできた方法をご紹介していきたいと思います。

エラーで?マークが出ていた私を救ってくれたはサイト様はこちら。
AWS EC2でNodeを動作させる

上記のサイトではEC2の起動から、Node.jsによるHTTPサーバの作動まで、とても丁寧に紹介されております。
※少々昔の記事なので現在と多少の違いはありますが、かなり参考になるかと

Hubotのインストールのための準備

基本的には前述のページどおりに進めていけば準備完了です。
コマンドを実行して環境を整えつつ、必要なものをインストールしていきます。

# システムアップデート
$ sudo yum -y update

# 開発ツールのインストール(コンパイラやらGitやら)
$ sudo yum -y groupinstall 'Development Tools'

# nvmのインストール
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh

# Node.js のバージョン一覧の表示
$ nvm ls-remote
        v0.1.14
        v0.1.15
        ・・・(略)
        v10.11.0

# Node.jsのインストール(2018/10/08 時点の最新版:v10.11.0)
$ nvm install v10.11.0
$ nvm use v10.11.0

# バージョンの確認
$ node -v
   v10.11.0
$ npm -v
   6.4.1

nvmのパスの設定(source ~/.nvm/nvm.sh)は今回のセッションでのみ有効です。
次回以降はログイン時に自動で設定されるよう、~/.bash_profileに下記を加えます。

# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
        source ~/.nvm/nvm.sh ;
fi

いざHubotをインストール

以降はこちらのページを参考に進めました。(前回も参考にさせて頂きました)
Hubot を Amazon EC2 にセットアップして Yammer に投稿する

# インストール
$ npm install -g yo generator-hubot
   ・・・(略)
   Everything looks all right!
   + yo@2.0.5
   + generator-hubot@0.4.0
   added 839 packages from 300 contributors in 27.223s

# 初期設定
$ mkdir YAMMERBOT
$ cd YAMMERBOT
$ yo hubot
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== No
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner abiko
? Bot name YAMMERBOT
? Description A simple helpful robot for your Company
? Bot adapter yammer
   create 
   ・・・(略)
                     _____________________________
 _____              /                             \
 \    \             |   Self-replication process   |
 |    |    _____    |          complete...         |
 |__\\|   /_____\   \     Good luck with that.    /
   |//+  |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

・・・(略)

はじめは匿名での使用統計の送信有無を聞かれます、今回は n としています。
その後の必要情報の入力ですが、Bot name(任意の名前)とadapterの項目以外はEnterキーで飛ばしてしまって大丈夫です。
間違えてしまっても後から修正できますのでご安心ください。
修正するには作成したディレクトリ配下のpackage.jsonファイルを編集します。
また、adapterの項目をEnterで飛ばしてしまった場合は次の方法でインストールできます。

$ npm install hubot-yammer

ひとまず起動する

$ ./bin/hubot
[Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script.

Your hubot-scripts.json is empty, so you just need to remove it.
[Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] INFO hubot-redis-brain: Using default redis on localhost:6379
[Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)`

YAMMERBOT> YAMMERBOT ping
YAMMERBOT> PONG

ワーニングなど目に付きますが、ひとまず返答が返ってくるところまで動作確認ができました。

Yammerと連携するためのトークンの取得

前述のページの通りに進めると接続に必要なトークンが取得できます。
Hubot を Amazon EC2 にセットアップして Yammer に投稿する

発言者になる予定のユーザでyammerにログインした状態で、下記URLにアクセスします。
https://www.yammer.com/client_applications

「新しいアプリの登録」を押した先の入力項目を埋め、作成されたアプリ項目の「このアプリケーションの開発者トークンを生成する」を押します。
現れたトークンをメモ帳などにコピペしておき、情報取得は完了です。

入力例

値のメモ

Yammerと連携する設定

環境変数に情報を設定していきます。
今回は投稿用のグループとしてHubotグループを作成しました。

# アクセストークンは先ほどメモしたトークンを設定
$ export HUBOT_YAMMER_ACCESS_TOKEN="xxxxxx-xxxxxxxxxxxxxxxxxxxxx"
$ export HUBOT_YAMMER_GROUPS="Hubot"
$ export HUBOT_HEROKU_KEEPALIVE_URL="https://www.yammer.com/api/v1/users.json"

いざ、起動して確認!

$ ./bin/hubot -a yammer -n "YAMMERBOT"
・・・(略)
groups list : Hubot
groups_ids list : 11178894

./bin/hubot -a yammer -n "Hubotの名前"
で起動できます。

では反応を見てみましょう。
Hubotグループにて、「YAMMERBOT ping」と発言してみます。
すると・・・

無事、返信がありました!
長い道のりでした。

因みに

ここでもまた大苦戦したんですが、Hubotはデフォルトで自分自身には返答しない仕様とのこと。
永久ループを防ぐためだと思いますが、Hubot用アカウントを用意できない、という方もいるのではないでしょうか。(私がそうです)
この問題は環境変数の設定で回避できますので、よしなにお使いください。

$ export HUBOT_YAMMER_REPLY_SELF=1

次回

このあたりで力尽きたので、次回までしばし休憩です。
次回で一旦〆になります。
Hello Warldをするところから始まり、簡単にスクリプトに触れていきたいと思います。

それではまた、お会いしましょう。