NBM2

natural born minority

いろふさんの"ふんいきbot"、作って動かしてみた#irof_history

この記事は、いろふ Advent Calendar 2014 その6日目の記事です。

昨日は、@yy_yank さんの 「マジ感謝ないろふさんに俺のライムを送る」でした。


ザ・ワールド イズ ワンダフろふ 、ども、毎年お馴染み @kazuhito_m こと”みうみう”です。

これを見てるってことは、みなさま今年も”いろふェンシブ”な年末をお送りのことかと存じます。

さーて、今年はどうすっかねー

いろふアドベントカレンダーも今年で三年目。

3年前ちょうどその初めてのアドカレを書いていた前後、その頃から勉強会などに行き始めた三浦としては、

と、「アドベントカレンダーなんて何か知らない」とこから、手法問わず様々な形で”いろふさん”というモノを表現し、 順調に「いろふの階段」を駆け上がってきた訳ですが…。

今年は「いろふの本丸」とも言うべき、”Twitter上のいろふさん” を攻めて見ようかな?と思い立ったのです。

そう…

“ふんいきbot”

を作ろうとね。


その、”ふんいきbot” って何さ!?

説明しよう、”ふんいきbot” とは…

厳密には違うけど、よくよく見てみると

「あー、言いそうかも?…いや、言わんかな…やっぱ、でも…」

くらいな雰囲気の言葉を醸し出す、TwitterBotである。

…いや、厳密にやろうとおもうと「強大な叡智と莫大な労力」が掛かると思うのよw

なので「まあ…見えなくもないよ」くらいのものを作ろっかなと。

作るにあたっての「コンセプト」

  1. 人のフンドシでヨコズナ相撲
  2. 自力で頑張らない(他力本願)
  3. 何事も”雰囲気”大事

という「全力で世の中に甘えていくスタイルで」考えてみました。

「ところでTwitter見てくれ、コイツをどう思う?」

まずは、どんなもんになったのか、手っ取り早く見てもらいましょうかね…。

定期的なつぶやき

(当人の中で)割とタイムリーな話題を言うてきます。 一時間に二回くらい。(今までツイート数当たりの時間が大体それくらい)

反応

「なんか言え!」みたいな無意味な煽りにも「全力で返していく」スタイルですw

時刻

「もーまた遅刻して…(当人が遅れないとは言っていない)」と俺に良く言うのざき氏、時間は重要のようで…。

時刻を聞いても、わりとざっくばらんに教えてくれますw

クロール依頼

謎単語が行き交う会話も…。

いったいどういうことだってばよ! 大したことはしていませんw

予め「ああ、言いそう…言いそう…かなぁ?」くらいのテンプレートを一定間隔でランダムに喋らせています。

例:

  • ‘本当の#{first_person}なら、そういうことは言わないな。’
  • ‘本日は#{noun}関係でアレ。’
  • ’#{noun}とはなんだったのか。’

ただ、それだけだと、全然”ふんいきbot”ではないので、

  1. 過去ツイート1000件を形態素解析にかける
  2. 有名詞と一般名詞で頻出100位以下のものを束で持っておく
  3. テンプレの名詞部分をランダムに置き換え

しています。

(昨年のいろふアドベントでの「ぽざうねさんのアイディア」丸パクリですね。わかりますw)

また、その「解析かけて100件にして保存してくれる」という、いわゆる”クローラ”も設けており、一日一回定期実行するとともに「クロールし」というメンションを送れば実行、という風にもしてあります。

作ったもの

…ということをしてくれるのに必要な一式を、Dockerにくるんで「キット化」しましたw

全体図

funiki-bot-kit(Dockerfile と ファイル群)

  • Dockerfileと自作スクリプトが2丁、計3テキストファイル群
  • ビルドするための設計図
  • 1Docker:1Bot(1アカウント)に対応
  • (後述の)自作の道具はビルド時に同梱され、プロダクト(Node.js,Redisとか)含めその時の最新が入る

funiki-hubot

  • しゃべってるbotの本体
  • タイマーorメンションでRedisからデータ読んで仕事してる
  • Hubot + Redis + 自作shell + 自作Coffeeスクリプト、という構成

funiki-crawler

  • 過去ツイートを取得・集計・解析するクロウラー
  • Twilogサイトをスクレイプし、Redisにデータを蓄える
  • Kuromoji(形態素解析) + JSorp + Redisclient + consclipt + 自作Scalaプログラム、という構成
  • consclipt のおかげで「実行するたび最新」に

…もういろふさん関係ねえなw

必要要件

  • 入れるサーバにDockerとgitクライアントがある
  • 入れるサーバがインターネットに繋がる
  • 入れる人がLinuxコマンド打てる
  • ターゲット(まあいろふさんでしょう)が、Twilogサイトに登録してる
  • ターゲット(まあいろふさんでしょう)に、入れる人が嫌われていない

(おそらく誰も必要無い)インストール方法

こちら に書いておきます。

みうみうなんでやったん?

  • OSSと自作の組み合わせの「全量見通せて自分でも手を入れられる」ような「botキット」が自分の手に一つ欲しかったから

おそらく「類似のサービス」も「それより高度なボットキット」もあるとは思うんです。

でも、そういうのって「中に手を入れ」たり「どこかに何かを挟ん」だりとかはできにくそうだなっと。

「自分が全て知って」て「ノウハウ蓄え」れて「増築出来る」”土台”が欲しかったんです。で稚拙ながら今回車輪の再開発してみました。

  • あとは「自分のすきなようにしゃべらせられるいろふさん」がいれば

ま、一週間で仕事の片手間じゃこんな程度のもんしかできませんでしたですはい。

TODO

どっか外でホスティング

「自力で頑張らない(他力本願)」って言うたのに!Docker回すサーバは自宅でしてしまいました。

できればHerokuとか外のやつにやらせておきたいなと。

メンション飛ばした時のリアクション

今は「ある単語の場合反応する」で、ココは作りこんでいない。 まー某「別のアドベントカレンダー」でやるとか…ゴニョゴニョ

参考資料

こことかこことかスクラップ。

所感・感想

  • Redisが超便利(今回のような条件なら)
  • 不得意な言語の上、行き来したので辛かった
  • いろふさんの「雰囲気醸す」ってのが、途中でゲシュタルト崩壊してよくわからんようになった
  • 「夢想」から「実現」までの時間が遠すぎて…もっと幅とスピードが欲しいなと思った

これで皆さんも、ご自宅に「Dockerコンテナ一つ」あれば、1いろふさんを招き入れられますね♪

皆様も「思い思いのいろふさんbot」を作ってみてはいかがでしょうか。

PS:

ん? ネタかぶり ? ご冗談をw


明日は、きつねさん( @bitter_fox )の「きつねとJava!」です。(一度会ってみたい方ですね…)

blog comments powered by Disqus