Skip to content

Instantly share code, notes, and snippets.

@hdemon
Last active December 19, 2015 05:49
Show Gist options
  • Select an option

  • Save hdemon/5906952 to your computer and use it in GitHub Desktop.

Select an option

Save hdemon/5906952 to your computer and use it in GitHub Desktop.

あなたの妹KPTちゃん

趣旨

従来は人数や時間、場所に制約されていたKPTの共有だが、KPT出しをIRC上で行い、IRC botに集計・管理・表示させる事で、前述の制約を取り除きたい。そのためのbotを開発する。

使い方

KPTちゃんはKPTを管理するbotです。KPTちゃんは簡単な言葉を解釈し、人間のぬくもりを感じさせるKPT生活を実現します。

KPTを記録する。

例えば、Tryとして"プロジェクト概要をgistに書く"を記録したいとしましょう。

その場合、以下のようなメッセージを送れば、KPTちゃんがTryとして覚えておいてくれます。

hdemon: KPT-chan: "プロジェクト概要をgistに書く"をTryに追加して。
kpt-chan: "プロジェクト概要をgistに書く"を、tryのid:1として追加しました。

KPTちゃんはこのメッセージを、「"プロジェクト概要をgistに書く"という文言をTryとして記録しろ」という指示であると解釈します。

記録しろという指示は、文中に"追加"という言葉が現れていることから、また"Try"という言葉から追加したいカテゴリーがTryであることを理解します。

順番や表現のゆらぎを許容する設計になっているので、例えば次のように指示することも可能です。

hdemon: KPT-chan: Tryに"プロジェクト概要をgistに書く"を足してくれる?

"Try"の文字は、"TRY"でも"トライ"でも構いません。

同様に、"追加して"の他にも、"加えて"や"足して"などの言葉でも、同じく「記録しろ」という命令だと解釈します。

単純に、「記録しろ」という指示を複数の表現に対応させているだけです。どんな言葉が使えるかは、https://github.com/hdemon/anata-no-imouto-kpt-chan/blob/master/lib/category_word_map.coffeehttps://github.com/hdemon/anata-no-imouto-kpt-chan/blob/master/lib/query_word_map.coffee を見てください。

KPTのリストを見る。

今までに追加したKPTのリストを見たい場合は、次のようにします。

hdemon: kpt-chan: トライのリストを見せて
kpt-chan: try(1)  プロジェクト概要をgistに書く (13-07-19 16:13 hdemon)

この場合も記録の指示と同様に、文中にカテゴリーとリストを示す文言が現れてさえいれば、リストを表示しろという命令だと解釈してくれます。

例えば、次のような指示でも同様にリストを表示してくれます。

hdemon: kpt-chan: TRYの一覧が見たい
kpt-chan: try(1)  プロジェクト概要をgistに書く (13-07-19 16:13 hdemon)

"try(1)"の括弧内の数字は、KPT文言のidです。これは次に説明する削除の際に使います。

KPTを削除する。

hdemon: KPT-chan: Tryのid:1を削除して。
kpt-chan: try id:1を消しました。

記録やリスト表示のときと同じように、カテゴリーと、"削除"、"消して"などの言葉をセットにします。また、消したい文言のidを"id:(数字)"のように文中で指示してください。


要求

  1. KPTをそれぞれ個別に記録できる。
  • それぞれ、発言日時、発言者、KPTの内容を記録できる。
  1. 記録したKPTのリストを表示できる。
  • 記録者、記録日時の詳細を表示できる。
  1. 事前にリスト表示の日時を予約し、その日時になったらリストを表示できる。
  2. KPTをそれぞれ個別に削除できる。
  • カテゴリーごとの個別削除、全部削除ができる。
  1. botにキャラクター性を持たせること。
  2. 短期間で開発可能なこと。

1. KPTをそれぞれ個別に記録できる。

記録する要素は、

  1. 発言日時
  2. 発言者
  3. KPTの内容

とする。

記録のためのメッセージ・プロトコル

この機能を実現するためには、

  1. どの「カテゴリー」に対して記録すべきか
  2. 「記録しろ」という命令の意図が、文中に現れているか

を判別する必要がある。そこで、次の2つのプロトコルのどちらかを使うことで、機能を実現する。

  1. 呼びかける対象のニックネームとして、K: / P: / T: を指定し、続いて記録したい文字列を加えて発言する。

hoge: K: 定時に帰ること。

この場合、"K:"が記録したい文言のカテゴリーを示し、"定時に帰ること。"を記録する文言とする。 記録しろという命令は明示的に現れていないが、"K:"というカテゴリーを示す文言を冒頭においた時点で、文全体として記録を命令するメッセージだと解釈する。

  1. :KPT-chanに対して、KPTのいずれかのカテゴリーと、”加える”という趣旨の言葉を合わせて発言する。

hoge: KPT-chan: "定時に帰ること。"をKeepに足しておいて

1.のプロトコルと異なり、メッセージの送信はKPT-chanに対して行う。また、記録したい文言をダブルクォートで囲み、「記録しろ」という命令を意味する文言を文中のどこかに加える。

カテゴリーの判別は、カテゴリーに対応する文字列が文中に登場しているかどうかによって行う。例えば上の例では"Keep"が文中に現れていることから、KPT-chanはKeepカテゴリーに対する何らかの命令が行われていると判断する。 また、Keepカテゴリーを示す文字列は"Keep"だけでなく、"K"や"keep"、"キープ"なども、カテゴリーとしての"Keep"を表すものとして解釈できるようにする。

次に命令の意図であるが、カテゴリーと同様に、意図を示す文字列が文中に登場しているかどうかで判断する。上の例では"足しておいて"という表現が登場していることをもって、「記録しろ」という意図の命令があると解釈する。 そしてカテゴリーの場合と同様に、"足して"、"加える"、"add"などの文言を、「記録しろ」という意図の命令だと解釈できるようにする。

レスポンス

返答として、指示された文字列とそのidを返す。 idはKPTごとに独立して、0から始まるインクリメンタルなものとする。つまり、Keepのid:123とProblemのid:123は同時に存在する。

hoge: KPT-chan: "◯◯"をKeepに加えましょう。
KPT-chan: はい、◯◯(123)ですね。

Keep / Problem / Try を削除する機能

hoge: KPT-chan: Tryのid:123を消して。
KPTChan: ◯◯(123)を消しました。
KPTChan: KPT-chan: Tryを全部消して。
KPTChan: Tryを全部消しました。

Keep / Problem / Try のリストを表示する機能

リクエスト

レスポンス

リストにはidを表示する。 リストを表示した後、それぞれのTryに対しての議論や、idを指定しての削除などを想定しているため。 verboseオプションを付けた場合は、記録日時と記録者も表示する。

時間予約機能

datetimeオプションを付けることで、そこで指示された日時にリストを表示する。

例:

hoge: K: 
KPTChan: わかりました。
KPTChan: この前のTryは、
KPTChan: …
KPTChan: です。

hoge: KPTChan: list t verbose
KPTChan: Tryは、
KPTChan: id: ………
KPTChan: id: ………
KPTChan: id: ……..
KPTChan: です。

キャラクター性について

  • KPT管理ツールとして動かすためのクエリーは、できるだけ簡単にする。そこにキャラクタ性を盛り込まない。

何で作るか

  • node
  • hubot
  • hubot-irc
  • mongodb

Rubyより慣れがあることからnodeを、個人的な関心と実験済みという強みがあることからhubotを洗濯。 なおhubotでNOTICEが送れない問題は、現在のバージョンでは解決済み。

永続化にはmongodbを利用。スキーマレス性による開発の始めやすさ、nodeとの親和性から。

ストーリー

  • botは、誰かが自分に対して発言したとき、反応することができる。
  • botは、KPTの文言を、日付と発言者とともに記録することができる。
  • botは、記録したKPTを消すことができる。
  • botは、記録したKPTの一覧を出すことができる。
  • botは、KPTの一覧を表示する時刻を、事前に指定することができる。

リリース予定

2013/7/8 10:00

やらないことリスト

  • 専用の稼働環境を構築しない。当面は自分のマシンにサーバを立てる。
  • キャラクター性に執着しすぎない。あとから改良可能。
@hdemon
Copy link
Copy Markdown
Author

hdemon commented Jul 2, 2013

文法要素からは、キャラクタ性を取り除く。クエリを簡単に。運用者に任せる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment