mirenn所感

お絵かきとプログラミング

Slackbotを手取り足取りおしえてもらった話

 ためになる話は書けなさそう、これは、ただの体験談。

 

 ことのはじまりは、最近サークルでbotを作るのが流行っていて、自分もやってみたくなったのでやってみようと思ったからだ。なんでも貪欲に気軽にやってみるというのは若者の特権じゃろ。そういう事情のもとでトライしてみたわけなのだ。言うてできるっしょまじで多分サルでもできるっしょ、と思って適当に引っかかったサイトを参考にしてやってみたら開始早々むっちゃ困った。

 サルでも分かるっていうことの大半はサルでは分からないのだ(ただし、サルに人は含まない)。実際にやってみると考えてたよりずっと大変っていうのはよくある。自分が弱いだけともいうあるある。

         f:id:mirenn:20160620004455p:plain

 図1、昔とてもお世話になったサイトの理知的なサル

 しょうがないから、つらつらと公式のSlack APIのところを読みながら、英語なので理解速度半減未満になって辛いなあと思いつつ、ぱぱっと魔法のようにやる方法はなさそうだったのでこのまま時間がかかると思われた。

 近くで寝ていたサークルの代表(元会長)が起きた。

 寝起きの代表を捕まえて、教えを請うたら丁寧に教えてくれた。やったね。

 どうやらSlackbotは、他にはrubyとかで書いたりしてる人もいるらしいのだけど、rubyは全く触ったことがないのでまだpythonのほうがありがたかったし、もうちょっとpythonについて知りたかったのでpythonでSlackbotを作った代表の教授は最強!!

 魔法のように進んでいった。Slack公式のコードを代表がpackage(?)したものを頂いた。

 それまでと比べると、早い。爆速。一気に導入、おうおうお。

 自分のpythonの理解力が不足していても、その都度説明してくれるから結構、ほほうとわかった気持ちになる。

 あれ、pythonのpassってなんだっけとか、dictionaryとか、いやもっと手前のpipとか環境変数とかpython3とか、Ctrl-cで強制停止できるんだとかそういうのをささっと教えてくれた。わお。そればかりではなく、部内サーバーで動かせるぞいということのやり方も導入、おお。

 ヒョエー、なんかコード並んでるけど大丈夫、書くべきところとか、おおまかには分かり始める。そうこうして、くんずほぐれつしながら、botに喋らせる。最初は、エコー、つまり、Slack上から取ってきたtextをそのまま喋らせたりして、それでも楽しい。そりゃあ、一人でやってたら結構大変な作業がすっ飛んだので(あとで理解出来てないとこを読まねば)。

 そうやって、基本的な遊び方を学んだところで、自分の実験場となるチャンネルを開設して遊ぶことにした。そのときも予想してないつまづき方をした。新しく開設したチャンネルの呟きというかtextがいっこうに観察できなかったのだけれども、一気にチャンネルにこころやさしき人が流入してくれたのでなんか色々やってうまくいくようになった。つぶやきを収集するためのチャンネルを監視するBOTは新しいチャンネルに入ってから、チャンネル内のつぶやきを認識するまでなんだかちょっと時間がかかるよう。(というのとはちょっと違って、監視するbotは、対象のチャンネルに代表がジョインしたあとに反応し始めるとかそういう感じになっていたらしい、詳しいことはよくわからないけど。)

 botに賢い文章を喋らせるのが実は目標だったので、それを実現してみる環境は整った。

 そこで、シェイクスピアの作品を書けるbotを作る!!!

 ということで作ってみた。名前はシェイクスピアのサルBOTとした。

f:id:mirenn:20160619232050p:plain

 ・・・・・・。Slackチャンネルのどこかで喋ると、それに反応して適当なa~zの文字を返すようになっている。(一定時間ごとに適当な文字を吐くようににしようと思っていたけれど、まあとりあえずこれでいいよね)喋った回数のぶんだけ、このBOTは文字を返す。

 おわかりだろうか、十分に喋れば、このBOTシェイクスピアの作品、例えばヴェニスの商人などを書きあげる確率はほとんど確からしい(ほんとか)。

 という、無限の猿定理も最近サークルで世間話ついでに教えてもらったので、いい機会なのでちょっと屁理屈をこねるのに使わせてもらった。

 

 将来的には、もちょっと賢くしたい。RNNでもう今は亡き文豪の文章喋らせっぞ、とか、マルコフ連鎖で喋らせっぞ!とか思うけど、当分の間無理そう(簡単にやる方法があるようでそれをやろうとして失敗したので、挫折しないで興味が持続していたら堅実にやってみたい)、だけど面白かった、いろいろと勉強になった。話を聞いているときメモとってなかったので、復習の意味も込めてこのブログを書いた。

 今回の適当な文字を返すコードから賢くなるには結構な飛躍が必要そうでううっ。

 

 RNNに到達する前にneural networkといえば、マイケル・ニールセンのNeural Network and Deap Learningに目を通したとき、自分がpythonを読めない点で困ったのと、文中で出てくる数学はまず基本的な道具ばかり用いてくれてるのにたまにそれの理解が怪しくなった点は特に辛かった。pythonちゃんと覚えたらそのうち実際に実装したりして遊びたい気はある、できるかな?

 最近、なんかやりたいことが増えてきてて困ったなあという感じ、こじらせないようにしたい、コミュ力、つら。

 

 最後に一句

 スラックは ラックラクには できません

 うーん、こりゃ駄作以外のなにものでもなさそう、参った参った。(575もサークルの一部の界隈で盛り上がっている)