やぐブロ

yag + programming + hateblo

そろそろmickey24donoについて一言いっておくか

mickey24donoというtwitterbotを作ってから約1年になるので,なんとなく開発の経緯や実装などについて思い出しつつ,この1年自分の不出来なbotを見続けてきて感じたことなどを書いてみようと思う.オチも面白みも糞も無いが,まあ書いてしまったものはしょうがない.
https://twitter.com/#!/mickey24dono

f:id:yag_ays:20120313120059j:plain

開発経緯と実装

 この不出来なbotを作ったのは,去年の今頃に熱海で行われた開発合宿だった.詳しい経緯及び動機ははっきりと覚えていないのだけれども,開発合宿の本筋でやろうとしたのではなく,半分遊びで作ったということは確実である.1日目の夜に徹夜して基礎だけ作って後は適当に遊びつつ,機能などを付け加えていったという流れで,ソースコードはその時書いたものから殆ど何も手を加えず1年間動かし続けてきた.コードを書いたといっても,別に作っていたtwitter botのメインフレームをそのまま流用している.botが喋る(刺激に応答する)ネタに関しても,その当時内輪のskypeで流行っていた言葉遊びをそのまま採用して,少しは見栄えがよく面白くなるように適当なライブラリを使って装飾することにした.
 実装方針といえるものは何も無いが,当初から決めていたことは「とにかく単純なもので複雑な挙動をするようなものを作りたい」ということだった.そもそもこの考えは,コードを流用する元となった別のtwitter botを非常に多機能で雑多なものにしてしまったことから来ている.元となったbotは,テンプレートからの応答文の作成して発言候補をスタックしタイミング良くポストする仕組み,タイムラインのログ保存,favoriteの検知なども実装していた.そのため,ソースコードはかなり膨れ上がり,テストもまともに書いていないコードは実に読みにくく管理しづらいものだった.そういう背景があって,いざbotを新しく作るときにコードの基礎をコピーしたはいいものの,そこから改良を加えるのは非常に困難だった.開発合宿の限られた時間の中でコードを解読して整理する時間など取れるはずもなく,遊びにそれほど手間を掛けたくなかったこともあって,機能を全部捨てることにしたという経緯がある.
 botの機能を最大限に削ろうと考え,頭の中に膨らんでいたbotの妄想からありとあらゆるものを削りに削った挙句,最後に残ったのはタイムラインを読み込んで内部処理をして返すということだけだった.ただ刺激に応答するだけの,一つの入口があって一つの出口があるハコだけである.何か外部ファイルを作成したり読み込んだりすることさえ排除するようにした*1.外部ファイルから何かしらの情報を引き継げない最大の問題は「タイムラインをどこまで読んだか記憶できない」ということだったが,直近数件のポストを重複覚悟で読み込んで,半ば無理やりな方法で語尾のパターンを増やしてごまかすことにした.
 内部処理も非常に単純で何の面白みも無いものである.タイムラインの発言を形態素解析して名詞だけを抜き出し,名詞と判断された単語それぞれに重みを加えた上で最終的に発言する単語をランダムで決定する.単語に付与する語尾などの文字列は別途ランダムで選ばれ,botが発言する際に先程の名詞とつなぎあわせるという流れだ.名詞が無いポストがあった場合には,予め用意されていたテキストを発言するようにしている.あとは定期的にタイムラインから直近数件読み込んできて上記の処理に流せば後はよしなにやってくれる.同じ発言は繰り返さないような仕組みや,誰も発言していないような時間にはbotも発言しないようにする仕組みは,別に内部で実装しているわけではなく,ただtwitterが多重投稿を防止してくれたりbot自身の投稿を読み込まないようにするシステムの副次効果的なものである.動かしてみて問題がなければそれで良いということを積み重ねた結果,要求通りには動かないけれども問題は起こさないようなプログラムが出来上がった.これをこの1年間ただただ鯖のcronでひたすら回し続けているだけという感じ.この1年間で1回だけ暴走してプログラムが終了しないということはあったけれども,それ以外では特に問題は起きていない.というよりかは動く動かないといった問題が起きても何も起きない.
 という感じで,合宿の思いつきで作ったプログラムは,プログラマの怠惰と低空飛行な開発によって,意図しない通りに動き,意図しないようなことを発言し続ける,望みどおりのbotとなった.

1年間動かしてみた感想

 合宿で実装した頃は,1ヶ月もしたらこの面白みも何も無い無能なbotを止めようかと考えていたのだが,それすらもめんどくさくなって延々と動かしている.幸いなことに,この不出来なbotを気に入ってくれる方や発言を気にかけてくれたり反応してくれたりする方がいらっしゃったので,今日まで続けてこれた(放置し続けた)気がする.非常に有難い限りだ.ただ,そういう人たちのためにbotの機能追加などの要望対応ができないのが,申し訳ない限りである.

今後

特に無い.

*1:内部処理で形態素解析するときは辞書ファイルを読み込んでいるが...まあ辞書自体は書き換えたりしないのでノーカウントで