63
Python × Herokuで作る 雑談SlackBot 2017/03/07 株式会社ビズリーチ 松岡 幸一郎

Python × Herokuで作る 雑談slack bot

  • Upload
    dcubeio

  • View
    1.342

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Python × Herokuで作る 雑談slack bot

Python × Herokuで作る雑談SlackBot

2017/03/07株式会社ビズリーチ

松岡 幸一郎

Page 2: Python × Herokuで作る 雑談slack bot

● 松岡 幸一郎

● 株式会社ビズリーチ

● 「キャリアトレック」開発

発表者紹介

Page 3: Python × Herokuで作る 雑談slack bot

会社・サービス紹介

ハイクラス層向け転職 求人検索エンジン

若年層向け転職 戦略人事 OB/OG訪問支援

Page 4: Python × Herokuで作る 雑談slack bot

会社・サービス紹介

ハイクラス層向け転職 求人検索エンジン

若年層向け転職 戦略人事 OB/OG訪問支援

Java + Angular2 (SPA) (一部) Scala + Angular1MicroService

Java + React (SPA) (一部) Scala + React / Angular2MicroService

Java + React (一部)

Page 5: Python × Herokuで作る 雑談slack bot

対象者

● テーマ

○ Python × Herokuで作る雑談SlackBot

● 想定対象者

○ SlackBotを気軽に作りたい、運用したい

○ Pythonで書きたい

■ Hubotが主流だが、CoffeeScriptを今から新しく覚えたくはない

■ Pythonのライブラリや既存資産を利用したい

Page 6: Python × Herokuで作る 雑談slack bot

早速喋ってもらいましょう

Page 7: Python × Herokuで作る 雑談slack bot

ゴールと構成

● 本日のゴール

○ 簡単なbotがかけるようになる

○ Herokuにデプロイできるようになる

○ 雑談会話用APIで簡単な会話が出来るようになる

○ 応用イメージが持てる

● 構成

○ ハンズオン風の資料だけどNotハンズオン

○ 概要と流れを説明

○ 資料を家で見て参考に作れるように

Page 8: Python × Herokuで作る 雑談slack bot

やらないこと

● Python言語自体の解説

● 雑談ロジック、言語解析や自然応答ロジックの詳細

○ 雑談ロジックは外部APIを使用

Page 9: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

Page 10: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

Page 11: Python × Herokuで作る 雑談slack bot

1. 基本的なBotを作る

a. 使用するライブラリ・サービスの紹介

b. slackでbot用API KEYを発行

c. ローカル環境でbotスクリプト作成

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

基本的なbotを作る - 全体の流れ

Page 12: Python × Herokuで作る 雑談slack bot

使用するライブラリ・サービス

● slackbot○ https://github.com/lins05/slackbot○ Python3用○ pipでインストール可能

○ SlackのRealTimeMessagingAPIを利用

○ プラグイン拡張が簡単

○ 接続が切れても再接続してくれる

Page 13: Python × Herokuで作る 雑談slack bot

使用するライブラリ・サービス

● Heroku○ PaaS(Platform as a Service)○ git連携して簡単にビルド・デプロイ

○ 無料で使えるが制限がある (1アカウント月間1000時間)○ 元はRuby on Rails向けだったが、対象言語が拡張している

(Python, Java, Node.js, Scala, Cloujure..)

Page 14: Python × Herokuで作る 雑談slack bot

1. 基本的なBotを作る

a. 使用するライブラリ・サービスの紹介

b. slackでbot用API KEYを発行

c. ローカル環境でbotスクリプト作成

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

基本的なbotを作る - 全体の流れ

Page 15: Python × Herokuで作る 雑談slack bot

● slackチームの準備

基本的なbotを作る - Bot integrationの登録

Page 16: Python × Herokuで作る 雑談slack bot

● slackルームにBotIntegrationを追加

基本的なbotを作る - Bot integrationの登録

Page 17: Python × Herokuで作る 雑談slack bot

基本的なbotを作る - Bot integrationの登録

● Bot integrationを新規登録する

Page 18: Python × Herokuで作る 雑談slack bot

基本的なbotを作る - Bot integrationの登録

● チャットで表示されるbotの名前を決める

Page 19: Python × Herokuで作る 雑談slack bot

基本的なbotを作る - Bot integrationの登録

● スクリプトで使用できるようにAPI Tokenをコピーしておく

Page 20: Python × Herokuで作る 雑談slack bot

1. 基本的なBotを作る

a. 使用するライブラリ・サービスの紹介

b. slackでbot用API KEYを発行

c. ローカル環境でbotスクリプト作成

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

基本的なbotを作る - 全体の流れ

Page 21: Python × Herokuで作る 雑談slack bot

基本的なbotを作る - ローカル環境でbotを動かす

● slack botをインストール

○ $ pip install slackbot

● スクリプト作成

○ run.py : 本体

○ slackbot_setting.py:設定ファイル

(設定ファイル名は固定)

● 環境変数設定

○ $ export SLACKBOT_API=<<API TOKEN>>(変数名は固定)

○ slackbot_setting.pyに書いても動くが、git管理したいので環境変数を使う

Page 22: Python × Herokuで作る 雑談slack bot

● run.py

● slackbot_settings.py

● 実行

○ $python run.py(先ほどの環境変数を設定した環境で実行すること)

基本的なbotを作る - ローカル環境でbotを動かす

Page 23: Python × Herokuで作る 雑談slack bot

基本的なbotを作る - ローカル環境でbotを動かす

● slackのchannelにbotアカウントを招待

● botに話しかける

※画面デモ

Page 24: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

Page 25: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

a. アカウント作成・アプリケーション作成・設定

b. Heroku用設定ファイルの作成

c. デプロイ

3. 雑談できるようにする

4. 応用のための情報

Page 26: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● アカウント作成

○ (画面キャプチャは省略)

Page 27: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● アプリケーション作成

● 必要な設定を追加

○ 環境変数の設定

○ Buildpackの設定

Page 28: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● 環境変数の設定

○ ローカルで設定したのと同じ変数名、API Tokenを設定する

Page 29: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● Buildpackの指定

○ Pythonを指定する

Page 30: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

a. アカウント作成・アプリケーション作成・設定

b. Heroku用設定ファイルの作成

c. デプロイ

3. 雑談できるようにする

4. 応用のための情報

Page 31: Python × Herokuで作る 雑談slack bot

Heroku設定ファイル作成

● buildに必要なファイルの作成

○ Procfile:○ requirements.txt○ runtime.txt

※いずれも、プロジェクトルートに置く必要がある

Page 32: Python × Herokuで作る 雑談slack bot

Heroku設定ファイル作成

● Procfile : Herokuでデプロイ時に実行するプロセスの定義

pbot: python run.py

● ①:プロセス名の定義 任意の文字列でOKただし"web"だけは特別な意味を持つ(死活監視が自動で設定される)

● ②:実行される処理

ローカルで実行したのと同じコマンド

①        ②

Page 33: Python × Herokuで作る 雑談slack bot

Heroku設定ファイル作成

● runtime.txt :実行Pythonのバージョンの定義

● requirements.txt : Pythonの依存ライブラリの定義

$ pip freeze > requirements.txt

Page 34: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

a. アカウント作成・アプリケーション作成・設定

b. Heroku用設定ファイルの作成

c. デプロイ

3. 雑談できるようにする

4. 応用のための情報

Page 35: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● (デフォルトリプライを変更しておく)

○ DEFAULT_REPLY = "Hey, I'm on Heroku!"

Page 36: Python × Herokuで作る 雑談slack bot

● デプロイ

「Deploy」タブ内に書いてあるコマンドを叩けばOK● $ brew install heroku● $ heroku login

● 以下、「Deploy」タブの記述通りにコマンド実行

○ $ cd my-project/

$ git init

$ heroku git:remote -a pbot-sample

$ git add .

$ git commit -am "make it better"

$ git push heroku master

Herokuにデプロイする

Page 37: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする ● pushすると必要なモジュールのインストール、ビルドが走る

Page 38: Python × Herokuで作る 雑談slack bot

Herokuにデプロイする

● 起動の呪文

○ $ heroku ps:scale pbot=1○ pbotに1プロセス割り当てさせるコマンド

● 話しかけてみる

(画面デモ)

Page 39: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

Page 40: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

a. 独自の返信を作成

b. docomo雑談APIサービス登録

c. 環境変数設定・実装

4. 応用のための情報

Page 41: Python × Herokuで作る 雑談slack bot

雑談できるようにする

● @respond_toデコレータ

● run.pyに以下のコードを追加

● 反応する単語を定義

● 半角、全角OK● (.*)で変数を渡せる

● 変数の個数は増やせる

Page 42: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

a. 独自の返信を作成

b. docomo雑談APIサービス登録

c. 環境変数設定・実装

4. 応用のための情報

Page 43: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API - ● Docomoが開発者向けに提供しているAPI● ユーザーの発話テキストを受け付け、雑談的な会話を返答してくれる

● REST API jsonでリクエスト/レスポンスデータ受け渡し

● 呼び出しが簡単

Page 44: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API - 登録

● docomo Developer support● アカウント登録し、「新規API利用申請」から「雑談対話」を選択

● 手順参考サイト

Page 45: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

a. 独自の返信を作成

b. docomo雑談APIサービス登録

c. 環境変数設定・実装

4. 応用のための情報

Page 46: Python × Herokuで作る 雑談slack bot

● 環境変数のセット

$ export set DIALOGUE_API_KEY= XXXXXXherokuでも設定してください

● コード

● default_replyデコレータで、他のメ

ソッドに反応しなかった場合のみ

呼び出される

● matchstrはライブラリのバグ?で

default_replyの時だけ略せない

● API指定の型でjson文字列化して

post送信

● 戻ってきた値をslackに投げる

Docomoの雑談対話API -

Page 47: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API - ● リクエスト・レスポンスのjson

Page 48: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API - ● 話しかけてみる

request{'utt': 'docomoは使いやすいですね', 'yomi': 'docomoは使いやすいですね', 'mode': 'dialog', 'da': '5', 'context': 'gq-pS1Q_YcS_anHd0AttPw'}

Page 49: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API - コンテキストを記憶

● コンテキストを記憶させる(汚いコードですが。。)

Page 50: Python × Herokuで作る 雑談slack bot

● 一応文脈を記憶してくれます。

Docomoの雑談対話API -

● 正直あまり賢くはない。。

Page 51: Python × Herokuで作る 雑談slack bot

Docomoの雑談対話API -

● 雑談対話APIだけでは味気ないので拡張

run.py 雑談対話API

独自プラグイン

slack

ここではルーティングだけするものとすると、I/OのシンプルなWebアプリケーションと考えられる!!

- @respond_toのマッチ文字列- メソッド内のロジックなどで分岐して呼び出す処理を切り替える

Page 52: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

Page 53: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

a. slackbotライブラリの機能

b. 応用事例

Page 54: Python × Herokuで作る 雑談slack bot

拡張のためのアイデア - slackbotのその他の機能

● attachment○ slack APIのAttachmentメソッドをサポート

○ 詳細は公式ガイド参照

Page 55: Python × Herokuで作る 雑談slack bot

拡張のためのアイデア - slackbotのその他の機能

● listen_toデコレータ

○ @botしなくても特定の文字列を監視 (乱用しないように。。)● message.react

○ emojiリアクションをつける

Page 56: Python × Herokuで作る 雑談slack bot

拡張のためのアイデア - slackbotのその他の機能

● 独自プラグインの切り出し

run.py

Page 57: Python × Herokuで作る 雑談slack bot

アジェンダ

1. 基本的なBotを作る

2. Herokuにデプロイする

3. 雑談できるようにする

4. 応用のための情報

a. slackbotライブラリの機能

b. 応用事例

Page 58: Python × Herokuで作る 雑談slack bot

応用事例

● おぼえて機能

○ bot自体に反応キーワードと

返答の辞書を持たせる

○ 辞書にマッチしたら返答を返す

○ マッチしなければ雑談APIに投げる

○ @respond_to('覚えて(.*)')でおぼえてメソッド呼び出し

○ 辞書マッチ前に形態素解析を挟むと

拾う率が上がる

Page 59: Python × Herokuで作る 雑談slack bot

応用事例

● ホットペッパーグルメ検索

○ ホットペッパーAPIと連携

○ @respond_to('ランチ (.*)')で拾い、

変数部分をホットペッパーAPIの検索クエリに渡す

Page 60: Python × Herokuで作る 雑談slack bot

応用事例

● 修造機能

○ ネガティブなことを言うと修造がランダムで励ましてくれる

○ @listen_to(‘だめ|修造’)とかで拾ってます。笑

○ attachmentで見た目を変えると楽しい

Page 61: Python × Herokuで作る 雑談slack bot

応用事例

● slack APIの仕組みが分かればGoogle App Scriptから叩くなども応用可能

Page 62: Python × Herokuで作る 雑談slack bot

締め

● slack bot、ChatOps、Hubotなどで検索すると色々事例が出るので

探してみてください

○ TranslimitのChatOps事情と愉快なbotたち

○ 我が家を支えるChatOps○ ChatOpsでなにができるのかまとめ

● ぜひ興味を持ったらお家で試してみてください!

本日のサンプルコード

https://github.com/little-hands/pbot

Page 63: Python × Herokuで作る 雑談slack bot

ありがとうございました