2TBの雑文置き場

ブログというより説明書置き場というか

(アイ)マストドン向けbotシステム「Usa_bot」誕生秘話(?)

まえがき

この記事は、Mastodon 2 Advent Calendar 2017の14日目です。

本日は、数多あるMastodonインスタンスの中で、私がメイン活動場所としているim@stodonにて稼働させている、とあるbotについてお話します。

Usa_bot #とは

Usa_botは、Mastodon向けのbotプログラムです。この文章を執筆している時点では、PHP(ナナ7系)で作られ、im@stodon用にチューニングされたもの1が当方の自宅サーバー(Win)で動作しています。動作している本体はこちら→ウサちゃんロボ(alpha) - im@stodon 現時点ではソースコードは非公開です。

色んな機能がついていますが、一番メインの機能は「簡易辞書」であり、簡単な構文でキーワードとその説明を登録でき、呼び出す際は"公開範囲が「Public」又は「Unlisted2」で、かつ「(キーワード) #とは」(実際には括弧は要りません)というパターンの発言"をすると、キーワードに関する情報を返します。

詳しい動作は説明書を→ウサちゃんロボ 簡易説明書など - 2TBの雑文置き場

開発の経緯

私は、数あるMastodonインスタンスの中で、アイマス好きの人々が集まるim@stodonにばかりよく顔を出しています。なので、他のMastodonインスタンスの雰囲気にはそれほど詳しいわけではないのですが…このim@stodonに関しては、当初から今に至るまで「LTLでチャットのように会話がすすむ」文化がありまして、このような"一定以上の規模のコミュニティ"が発生すると、そこだけで通じるキーワードや言い回しが登場することがあります。会話の流れであったり、既存のキーワードのもじりだったり、その出現パターンは1つではありませんが、それ自体はコミュニケーションを円滑にするために、また楽しい会話をするのにとても便利なものです。

しかし、字面だけでは意味がわからないキーワードやミームが多用されているコミュニティに、新しく人が入って来やすいでしょうか。「よくわからない暗号のような文章」を見て、敬遠して入ってこれなくなったりしないでしょうか。im@stodonでも、かつてそのような懸念が会話に出たことがあります。特に、アイマス関連は既存のキーワード・ミームだけでも相当な数がありますし、それに派生キーワードが増え、更にアイマスとは関係ないim@stodon固有のキーワードまで飛び出しうるとなれば、新規の方の障壁になることは避けられません。私は、何らかの文化が長く続くためにはそれに対する参入への壁は低いほうがいいと考えていますが、アイマスPとしては未熟な立ち位置3のため、自分の手の届く範囲の技術で解決できる方法がないかを考えました。

解決策の1つは、そのようなキーワードを集めた辞書ページを作ることです。ニコニコ大百科ピクシブ百科事典は、まさに典型例と言えるでしょう。とても大きな規模のコミュニティなら有効な手段ですが、Mastodonで使うには、ぱっと思いつくだけでも以下のような問題点があります。

  • 実装とメンテナンスのコスト、参照性の問題
    • 新規キーワードは日々登場し得ます。気軽に使えない登録システムは無視され、放置されてやがて使われなくなるでしょう。
    • ニコニコ大百科ピクシブ百科事典は、もととなるサービスからの連携が前提の仕組みですが、Mastodonに同様の仕組みを組み込むのは無理があります。
      • Wikiのように全部リンクを貼るには負荷が大きそう
      • そもそも、その時にわからない単語だけ調べられればたいてい必要十分
    • 連携させずにまとめサイトだけ作るという考え方もありますが、「見えない」場所にある用語サイトにわざわざ見に行く人がどれだけいるのかはなはだ疑問です。
  • 既存キーワードどうしよう問題
    • すでに指摘したとおり、アイマス関連だけでとんでもない数のキーワードがあります。また、アイマスのコンテンツは大まかに複数のグループに別れており4、別のグループに関しては知らない、ということがよく起こります。それらについても容易に参照できるようにすべきですが、そう簡単にまとめ直せるわけがありません。
    • それに、既存のまとめがあるのにわざわざ改めてデータベースを作るのもなんだかもったいない話です。
  • 荒らし問題・セキュリティ問題
    • だれでも編集できるデータベースでは、荒らし対策を考える必要があります。無認証の場合荒らしに対して無力ですし、認証の仕組みを作るには管理者にセキュリティ情報を抱え込まなくてはならないデメリットがあります。

それらを、(もちろん完全にではないですが)解決、あるいは緩和する策としてUsa_botは誕生しました。

Usa_botの外向きの特徴と(私が考えていた)戦略

  • botなので、普段Mastodonを使うのと同じインターフェイスで使える
  • 「(キーワード) #とは」という文面に反応するので、そもそも存在を知らなくても何かのきっかけで気づける可能性がある。そうでなくても、使い方を教えやすい
  • 登録や修正の際にも、簡易な構文で使えるので覚えることが少なくて済む
  • "Usa_botアイキャッチ"という、一定時間ごとにLTLにキーワード解説を流す機能をつけることで、botの存在を広めつつキーワードの意味を知らしめる
  • 登録できる解説文の文字数は400文字までに制限されている。1Tootに収まる長さで、ある程度簡易な文章にまとめることを求められる代わりすぐ読むことが出来、また修正も追加も難しくない
  • 知らなかったキーワードを毎日LTLに報告する仕組みをつけ、検索されているのにデータがないキーワードに気づきやすくする
  • キーワード解説とは直接は関係ない機能も付けることで興味を持ってもらいやすくする
    • 例えば、Usa_botに「@Usa_bot [myinfo]」とリプライを送ると、発言元のMastodonインスタンスに登録してからの日数と平均Toot数が調べられます。
    • 例えば、Usa_botに「@Usa_bot [dice] 2D6」とリプライを送ると、いわゆる2D6ダイス5を振った結果を返します。
  • ニコニコ大百科と勝手に連動することで、既存キーワードの再登録の手間を軽減する
    • Usa_botにもニコニコ大百科にも存在するキーワードの場合は、大百科へのリンクも貼ることでより詳しい情報へ誘導できる
  • キーワードを表示する際、元のTootのURLを提示して「誰が書いたのか」を明示することで荒らし対策とする
    • 悪意ある書き換えについても、直前のキーワード登録者にデータが更新されたことを通知することで緩和策とする

とにかく気軽に使え、また存在に気づいてもらいやすくしつつも、LTLを邪魔しないのを当初の目標としました。

Mastodonの仕組みとキーワード解説に対する連動を考えた時、最も相性が良いのはbotであることは明白です。普段使っている画面からそのまま利用でき、複雑な操作もありません。専用ソフトも要らないので環境依存問題もありません。キーワード解説に長文登録できないことがネックですが、逆に気軽に登録することが出来るメリットと言えるのではないかと考えています。

「○○ #とは」という言い回しはTwitterでも定着したミームであり、使用するにあたって不自然ではない、またUsa_botを知らなくても使用する可能性がある言い回しであることが採用理由となっています。実際、新規にim@stodonにいらっしゃった方の中には、自力でUsa_botに気づいた方もいらっしゃるようです。(ありがたいことです また、im@stodonでは過去のアップデートでハッシュタグ付きの発言が未収載のものでもハッシュタグタイムラインに流れるようになっており(管理者であるフサギコさんの解説記事であるアイマストドン通信 (β) 2017/09/10 | EntyやAdventCalendar記事のこのIP網の片隅で : アイマストドンの7ヶ月半をgithubのPRベースで振り返るも参照)、Usa_botはそれを含めた「#とは」のタイムラインをチェックしているため、LTLに発言を流すことなく(つまりLTLを押し流すことなく)検索を利用できます。前述のとおり、im@stodonではLTLで会話が行われているため、会話を邪魔せずに調べ物が出来るという特徴はとても重要です。

既存キーワードへの参照問題は、既存のWikiやまとめを利用できれば解決します。参照先としてはニコニコ大百科を採用しました。理由は以下のとおりです。

  • 十分な規模がある
  • アイマスは「ニコニコ御三家」と呼ばれるほどニコニコとの相性がよく、情報がとても良くまとまっている
  • キーワードの存在を簡易に調べられるAPIが存在する

幾つかの、本来の機能とは無関係な機能がついています。これも、遊んでもらってついでに本来の機能にも気づいてもらえればと言う戦略です。あと単に面白そうだから

この手の文章登録システムは、荒らしとの戦いの歴史と言ってもいいでしょう。Usa_botでは、登録時のTootのURLを、キーワードが参照された時に同時に提示することで「誰が書いたのか」を明示し、荒らしに対する抑制としています。これは、LTLで会話が進む特殊性と、比較的大きすぎない6規模のコミュニティだからこそ有効な手段と言えるでしょう。

すべてが丸く収まらない:Usa_botの問題点

極力簡単に、平和に使えることを目指しているものの、それでも問題点はあります。すぐに思いつくだけでも、

  • データメンテナンスが保証されない
    • Usa_botに限った話ではありませんが、古いデータが古いまま放置される可能性があります。Usa_botアイキャッチなどで中の情報が目につくようにするなど、更新漏れに気づきやすい環境を整えてはいるものの、とうてい完全とはいい難いところです。また、今はまだいいですが、項目数が増えれば増えるほど古い情報により気づきにくくなっていく問題があります。
  • 小規模インスタンスにも大規模インスタンスにも向かない可能性がある
    • たとえばPawooやmstdn.jpクラスの規模では、確率的に悪意に対抗しづらいと考えられます。
    • 事実上LTLの一部を乗っ取ってしまうため、大規模インスタンスの場合、その運営サイドが設置するのでなければ「Twitterで特定キーワードに反応してリプライが届く」みたいなスパムまがいのbotと大差ない動作になってしまいます。
    • 数人~数十人規模の場合、そもそもこの手の仕組みが必要ないかもしれません。内輪ネタであっても、全員が目の届く範囲の人数なら、通じにくいということ自体が起こりにくいでしょう。
  • Usa_bot自体が障壁になりうる
    • Usa_botは、現時点では実質im@stodonで動作する独自機能であるかのように見えてしまいます7。知っていたら便利だけど、知らなくても問題なくim@stodonが使えるのが大前提ですが、Usa_bot自身が内輪ネタ的にとられる可能性は考慮しなくてはなりません。
    • 個人的には、im@stodonを使ううえで、仮にUsa_botを「知っていなければならない」状態に陥ったら「負け」だと考えています。

技術的な話

大層なことを書いていますが、Usa_botは技術的にはそれほど大きな特徴があるわけではありません。PHP7で実装されていることは既に書いたとおりですが、大まかには以下のような環境で動作しています。

  • Win+PHP7+SQLite
  • ソケットを使ったクライアントプログラムとして動作しており、ApacheIISといったhttpdを必要としない
  • その代わりCLIPHPを立ち上げる何らかの仕組みを組んでおく必要がある
    • 運用上は、起動用バッチファイルが組まれていて、サーバー起動時に実行されます。

Mastodonから届くデータはJson形式で、そこにはUsa_botのようなbotを動かす程度なら十分なデータが全て含まれています。発言者の名前や登録日、発言数、今回の発言内容、発言に含まれるハッシュタグの一覧…。Usa_botがやっていることは、それをストリーム接続経由で受信し、応答すべき形式なら然るべき応答を返す。それだけです。 強いていうなら、Usa_botに実装されているコマンドはそれぞれが分割されたファイルであり、プラグインを追加するように機能を足していける構造になっていることが工夫点ではあるのですが、そのへんは将来的にコードを公開できればと思っていますのでそのときにでも。

…真なる目的、そして

先だって、Usa_botは「im@stodonへの参入障壁を低くするために作った」と書きました。これは嘘ではありません。7日に公開した「やきゅべんと」 Advent Calendar 2017 - Adventarの記事であるUsa_botがはじききする話 - 2TBの雑文置き場で文末に載せた以下の記述は、偽らざる気持ちです。

この機能が、あるいはUsa_botが、これまでのアイマストドンユーザーと、これからのアイマストドンユーザーを緩やかにつなげる事ができたら、それはとても幸せなことだと思います。そうなれるよう、今後もUsa_botは進化・変化を続けていきます。

ですが、それが第一目的だったかと問われると、それもまた違ったりします。

…とはいえ、これはMastodonとは本当に一切関係なくなるので、この場でお話するのは止めておきます。もしご興味がありましたら、アイドルマスター Advent Calendar 2017 - Adventarで12/17公開予定の記事をご参照いただけますと幸いです。

最後になりますが、ウサミンこと安部菜々さんをよろしくお願いします8。2TBでした。

バトンタッチ

兄弟カレンダーの中の亀さんの記事もよろしくお願いします。

明日は、カレンダーの2の方は宮原太聖(ミハ)さん、1の方はらりお・ザ・㉅㊛の🈗然㊌ソムリエさんです!


  1. 専用チューニングしてるというと特別なことをしているようですが、(記述時点で)コード非公開プログラムかつim@stodon向けのものしか存在しないので、汎用性を考慮していないだけです。

  2. im@stodonでのみの特徴です。後述。

  3. アイマスAdventCalendarでも書く予定ですが、積極的にコンテンツに触れるようになったのは昨年末くらいからです。

  4. 「765AS」、「シンデレラガールズ」などの分け方のことを意図しています。アイマスをご存じない方は、「アイマス」という大きな枠組みの中に複数の作品があって、それらが大まかにグループ化しているとご理解いただければ。

  5. 6面ダイスを2個振る、という意味

  6. 大きすぎないと言っても、登録2000人を余裕で超えるim@stodonがそのような表現の規模なのかというのはありますが、

  7. 念のためですが、Usa_botは2TBの個人的プロジェクトです。im@stodon公式ではありません(勝手にやっているということです)。LTL上の発言を拾って動作するので、対外的には独自機能と同等に見える、という意味です。

  8. これ、「本当の理由」ほとんど明かしたようなもんですねえ…