こんにちは。1回生のゆるふわ初心者猿ジニアのruritoです(Twitter @ruriro0125)

目次

・あらすじ
・制作物の紹介
・実装面についてとか
・沼った話

最近僕は、slackの通知に怯えています。僕が所属している団体ではたまにslackで進捗煽りが発生してしまいます。またBitBucketと団体のslackが連携しているので、他の人の進捗がリアルタイムで確認することができるため自身のプレッシャーになります。slackの通知を切れば解決するのですが、slackを連絡手段の一つとして利用している面もあるためslackの通知は切れない。そしてslackからのプレッシャーを軽減したい。
これがここ数週間の僕の願いでした。

話を変えますが、最近僕は生活費を削ってボイスロイド2のゆかりさんをお迎えしました。

(使用した画像 https://www.ah-soft.com/voiceroid/yukari/)
お迎えしたのは良かったのですが、一つ問題がありました。それはゆかりさんに行ってもらう作業がなかった…
このままではゆかりさんが昔の僕と同じくニートになってしまいます。
ゆかりさんに何か定職?についてもらうことがここ数週間の僕の願いでした。

あれ?これslackの通知を和らげるためにゆかりさんに働いてもらえればいいのでは?
というわけで今回のメインテーマに入っていきます。

制作したもの:slackの新着メッセージをゆかりさんに読み上げてもらう

機能についてはタイトル通りです。slackbotが入っているチャンネルの新着メッセージを読み上げてもらう。
またbotにメンションが飛んだら、少し内容をいじって読み上げてもらう。というシンプルな仕様になっています。

実装面について

皆さんお待ちかねのマサカリ大会実装面についてです。
今回用いた言語はPythonです。使用したライブラリはslackと連携するためのslackbot、
簡単に端末をたたく必要があったのでsubprocess。以上!閉廷!超簡単!

コードをgithubにでも上げようと思ったのですが、slackbotのアクセストークンの情報があるため今回は見送りました。
(.gitignoreとか駆使すれば上げれると思いますが、今回は行いませんでした)

# coding: utf-8

from slackbot.bot import respond_to # @botname: で反応するデコーダ 
from slackbot.bot import listen_to # チャネル内発言で反応するデコーダ 
from yukarin_in_slack.open import Voiceroid yukarin = Voiceroid() 

@respond_to("") 
def mention_func(message):   

  #メッセージを取り出す   
  text = message.body['text']   

  #発言者の名前を取り出す   
  user = message.channel._client.users[message.body['user']][u'name']   

  #ゆかりんに話してもらう   
  yukarin.talk(user + "からメンションが届きました") 
  yukarin.talk(text) 

@listen_to("") 
def listen_func(message):   

  #メッセージを取り出す   
  text = message.body['text']   

  #自分宛てのメンションなら   

  #発言者の名前を取り出す   
  user = message.channel._client.users[message.body['user']][u'name']   

  #発言したチャンネルの名前を取り出す   
  channel = channel = message.channel._client.channels[message.body['channel']]['name']   

  #ゆかりんに話してもらう   
  yukarin.talk(user + "が" + channel + "でメッセージを送信しました") 
  yukarin.talk(text)

コード無しではつまらないと思ったので軸となるコードを載せておきます。
これとは別で用意したrun.pyを最初に起動すると、slackからのPOST通信が行われた時このコードが実行されるようになってます。ほぼslackbotのサンプルコードの丸パクリです。ただし、チャンネル名の取り出しや発言者の名前の取り出しは改良しています。

今回のコードの目玉はyukarin.talk(text)でゆかりさんにtextを話してもらうというところです。ここの実装面なのですが民安★TALKというとても便利なツールが存在していまして、端末でvrx.exe textと端末で実行するとゆかりさんが話してくれます。
(民安★TALK:http://uep.s321.xrea.com/vrx/index.html)
これを活用して、subprocess.call([“vrx.exe”],text)と書けばゆかりさんに話してもらえました。

沼った面

slackbotの存在を知らなかったゆるふわ初心者猿ジニアの僕は当初、GASを経由してゆかりさんに読み上げてもらおうと考えていました。しかし、GASからvrx.exeを叩く手段がなかったため断念しました。
次にpythonのflaskというライブラリを用いてサーバーを立て、slackとやり取りをさせてそこからゆかりさんに読み上げてもらおうと考えました。しかし、herokuなどのグローバルなところで建ててしまうとGASと同じような点で実装不可能でした。
またローカルでサーバーを建ててみましたが、slackからのPOST通信のみ受け取れなかったためこちらも断念しました。
そして最後にslackbotというライブラリを用いて実装しようと思ったのですが、なぜかライブラリがインストールできない問題に直面しました。この問題はvenvを用いて仮想環境を建てることによって解決できました。

皆さんもVoiceroidを買って日々のslack生活をより快適にしていきましょう!

Twitterでフォローしよう

おすすめの記事