🤖

独習Errbot: Errbotの内部構造を俯瞰する

2020/09/29に公開

Errbotの構造

Errbotの動作についての構造を読み解くと、大きく分けて次の4コンポーネント群に分類されます。
コア以外は、プラグイン構成で提供されており、自分の実情に応じて交換したり追加したりすることができます。

  • Core
  • Bot Plugin(複数使用可能)
  • Backend Plugin(可換。ただし1個のみ使用可能)
  • Storage Plugin(可換。ただし1個のみ使用可能)

連携マップ

     (Chat Service) ↔ [BackendPlugin]
                                   ↕
                                   [Core]
                                   ↕
                                   [BotPlugin] 
                                   ↕
(Storage Service) ↔ [StoragePlugin]

各コンポーネントの概要

Core

いわゆるErrbotの心臓部分です。
起動時の設定をもとに、各プラグインを起動させて、ボットの振る舞いのコントロールを行います。
BackendPluginが受け取ったチャットの内容をもとに、どのBotPluginに処理させるかを決めたりするのがこの部分です。

組み込みプラグインや、各プラグインのインターフェースの定義もコア内に含まれています。

Bot Plugin

Errbotのボットとしての振る舞いを定義する役割を持ちます。
組み込みのコマンドなども、全てBotPluginとして提供されています。

基本的には「コマンド」に対して「処理」をPythonのコードで実装する形式となっており、Pythonでの開発をしたことがあるならば、最低限のルールさえ覚えれば比較的容易に機能追加をすることが可能です。
レスポンスとなるメッセージの構築にはJinja2テンプレートも利用可能なため、FlaskなどでWebアプリケーションを作成したことがある人なら、特に苦になる箇所は無いでしょう。

管理用のコマンド経由することで、サードパーティ製Pluginのインストールや機能のオン/オフも容易に行なえます。まずはErrbotのGitHubリポジトリに行き、どんなPkuginがあるかを探してみるとよいのでは無いでしょうか。

Backend Plugin

Errbotプロセスのインターフェースの役割を持ち、各チャットサービスとのI/Oに関する実装とErrbotコアとのやり取りをブリッジしています。

大きく処理を分類すると、次のことを行っています。

  • チャットサービスからの情報を、Errbot内のフォーマットにして渡す
  • Errbotコアから受け取った内容を、チャットサービスの形式に変換して処理
  • これらの処理を常時行うための、プロセス稼働

チャットボットとしての選択肢として上がるかどうかの大きな要素となるためか、結構なサービスへの対応が行われています。

Storage Plugin

チャットボットとしての永続化部分を役割として持ちます。

基本的にBot Pluginは本体に永続化機構を持ちません。そのため、Errbotの再起動後などでも継続に使いたいデータなどは、Storage向けのインターフェースを通じて何かしらの永続化を行う必要があります。
そのためのストレージとのブリッジを行うのがこのプラグインの仕事です。

こちらも、Backend Pluginと同様に、以下のような振る舞いをします。

  • Errbot内のフォーマットで受け取ったデータを保存先の形式に変換して処理
  • 保存先からデータを取り出して、ErrbotのフォーマットにしてBotPluginに渡す

Pythonが取り扱える形式でデータ加工ができて、正しく保存ができればストレージ先は何でもよく、様々なStoragePluginが存在します。

Discussion