Python × Herokuで作る
雑談SlackBot
2017/03/07
株式会社ビズリーチ
松岡 幸一郎
● 松岡 幸一郎
● 株式会社ビズリーチ
● 「キャリアトレック」開発
発表者紹介
会社・サービス紹介
ハイクラス層向け転職 求人検索エンジン
若年層向け転職 戦略人事 OB/OG訪問支援
会社・サービス紹介
ハイクラス層向け転職 求人検索エンジン
若年層向け転職 戦略人事 OB/OG訪問支援
Java + Angular2 (SPA) (一部) Scala + Angular1
MicroService
Java + React (SPA) (一部) Scala + React / Angular2
MicroService
Java + React (一部)
対象者
● テーマ
○ Python × Herokuで作る雑談SlackBot
● 想定対象者
○ SlackBotを気軽に作りたい、運用したい
○ Pythonで書きたい
■ Hubotが主流だが、CoffeeScriptを今から新しく覚えたくはない
■ Pythonのライブラリや既存資産を利用したい
早速喋ってもらいましょう
ゴールと構成
● 本日のゴール
○ 簡単なbotがかけるようになる
○ Herokuにデプロイできるようになる
○ 雑談会話用APIで簡単な会話が出来るようになる
○ 応用イメージが持てる
● 構成
○ ハンズオン風の資料だけどNotハンズオン
○ 概要と流れを説明
○ 資料を家で見て参考に作れるように
やらないこと
● Python言語自体の解説
● 雑談ロジック、言語解析や自然応答ロジックの詳細
○ 雑談ロジックは外部APIを使用
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
使用するライブラリ・サービス
● slackbot
○ https://github.com/lins05/slackbot
○ Python3用
○ pipでインストール可能
○ SlackのRealTimeMessagingAPIを利用
○ プラグイン拡張が簡単
○ 接続が切れても再接続してくれる
使用するライブラリ・サービス
● Heroku
○ PaaS(Platform as a Service)
○ git連携して簡単にビルド・デプロイ
○ 無料で使えるが制限がある (1アカウント月間1000時間)
○ 元はRuby on Rails向けだったが、対象言語が拡張している
(Python, Java, Node.js, Scala, Cloujure..)
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
● slackチームの準備
基本的なbotを作る - Bot integrationの登録
● slackルームにBotIntegrationを追加
基本的なbotを作る - Bot integrationの登録
基本的なbotを作る - Bot integrationの登録
● Bot integrationを新規登録する
基本的なbotを作る - Bot integrationの登録
● チャットで表示されるbotの名前を決める
基本的なbotを作る - Bot integrationの登録
● スクリプトで使用できるようにAPI Tokenをコピーしておく
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
基本的なbotを作る - ローカル環境でbotを動かす
● slack botをインストール
○ $ pip install slackbot
● スクリプト作成
○ run.py : 本体
○ slackbot_setting.py:設定ファイル
(設定ファイル名は固定)
● 環境変数設定
○ $ export SLACKBOT_API=<<API TOKEN>>
(変数名は固定)
○ slackbot_setting.pyに書いても動くが、git管理したいので環境変数を使う
● run.py
● slackbot_settings.py
● 実行
○ $python run.py
(先ほどの環境変数を設定した環境で実行すること)
基本的なbotを作る - ローカル環境でbotを動かす
基本的なbotを作る - ローカル環境でbotを動かす
● slackのchannelにbotアカウントを招待
● botに話しかける
※画面デモ
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Herokuにデプロイする
● アカウント作成
○ (画面キャプチャは省略)
Herokuにデプロイする
● アプリケーション作成
● 必要な設定を追加
○ 環境変数の設定
○ Buildpackの設定
Herokuにデプロイする
● 環境変数の設定
○ ローカルで設定したのと同じ変数名、API Tokenを設定する
Herokuにデプロイする
● Buildpackの指定
○ Pythonを指定する
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Heroku設定ファイル作成
● buildに必要なファイルの作成
○ Procfile:
○ requirements.txt
○ runtime.txt
※いずれも、プロジェクトルートに置く必要がある
Heroku設定ファイル作成
● Procfile : Herokuでデプロイ時に実行するプロセスの定義
pbot: python run.py
● ①:プロセス名の定義 任意の文字列でOK
ただし"web"だけは特別な意味を持つ(死活監視が自動で設定される)
● ②:実行される処理
ローカルで実行したのと同じコマンド
①        ②
Heroku設定ファイル作成
● runtime.txt :実行Pythonのバージョンの定義
● requirements.txt : Pythonの依存ライブラリの定義
$ pip freeze > requirements.txt
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Herokuにデプロイする
● (デフォルトリプライを変更しておく)
○ DEFAULT_REPLY = "Hey, I'm on Heroku!"
● デプロイ
「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にデプロイする
Herokuにデプロイする
● pushすると必要なモジュールのインストール、ビルドが走る
Herokuにデプロイする
● 起動の呪文
○ $ heroku ps:scale pbot=1
○ pbotに1プロセス割り当てさせるコマンド
● 話しかけてみる
(画面デモ)
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
雑談できるようにする
● @respond_toデコレータ
● run.pyに以下のコードを追加
● 反応する単語を定義
● 半角、全角OK
● (.*)で変数を渡せる
● 変数の個数は増やせる
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
Docomoの雑談対話API -
● Docomoが開発者向けに提供しているAPI
● ユーザーの発話テキストを受け付け、雑談的な会話を返答してくれる
● REST API jsonでリクエスト/レスポンスデータ受け渡し
● 呼び出しが簡単
Docomoの雑談対話API - 登録
● docomo Developer support
● アカウント登録し、「新規API利用申請」から「雑談対話」を選択
● 手順参考サイト
●
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
● 環境変数のセット
$ export set DIALOGUE_API_KEY= XXXXXX
herokuでも設定してください
● コード
● default_replyデコレータで、他のメ
ソッドに反応しなかった場合のみ
呼び出される
● matchstrはライブラリのバグ?で
default_replyの時だけ略せない
● API指定の型でjson文字列化して
post送信
● 戻ってきた値をslackに投げる
Docomoの雑談対話API -
Docomoの雑談対話API -
● リクエスト・レスポンスのjson
Docomoの雑談対話API -
● 話しかけてみる
request
{'utt': 'docomoは使いやすいですね',
'yomi': 'docomoは使いやすいですね',
'mode': 'dialog', 'da': '5',
'context': 'gq-pS1Q_YcS_anHd0AttPw'}
Docomoの雑談対話API - コンテキストを記憶
● コンテキストを記憶させる(汚いコードですが。。)
● 一応文脈を記憶してくれます。
Docomoの雑談対話API -
● 正直あまり賢くはない。。
Docomoの雑談対話API -
● 雑談対話APIだけでは味気ないので拡張
run.py 雑談対話API
独自プラグイン
slack
ここではルーティングだけするものとすると、
I/OのシンプルなWebアプリケーションと
考えられる!!
- @respond_toのマッチ文字列
- メソッド内のロジック
などで分岐して呼び出す処理を切
り替える
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
a. slackbotライブラリの機能
b. 応用事例
拡張のためのアイデア - slackbotのその他の機能
● attachment
○ slack APIのAttachmentメソッドをサポート
○ 詳細は公式ガイド参照
拡張のためのアイデア - slackbotのその他の機能
● listen_toデコレータ
○ @botしなくても特定の文字列を監視 (乱用しないように。。)
● message.react
○ emojiリアクションをつける
拡張のためのアイデア - slackbotのその他の機能
● 独自プラグインの切り出し
run.py
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
a. slackbotライブラリの機能
b. 応用事例
応用事例
● おぼえて機能
○ bot自体に反応キーワードと
返答の辞書を持たせる
○ 辞書にマッチしたら返答を返す
○ マッチしなければ雑談APIに投げる
○ @respond_to('覚えて(.*)')
でおぼえてメソッド呼び出し
○ 辞書マッチ前に形態素解析を挟むと
拾う率が上がる
応用事例
● ホットペッパーグルメ検索
○ ホットペッパーAPIと連携
○ @respond_to('ランチ (.*)')で拾い、
変数部分をホットペッパーAPIの検索クエリに渡す
応用事例
● 修造機能
○ ネガティブなことを言うと修造がランダムで励ましてくれる
○ @listen_to(‘だめ|修造’)とかで拾ってます。笑
○ attachmentで見た目を変えると楽しい
応用事例
● slack APIの仕組みが分かればGoogle App Scriptから叩くなども応用可能
締め
● slack bot、ChatOps、Hubotなどで検索すると色々事例が出るので
探してみてください
○ TranslimitのChatOps事情と愉快なbotたち
○ 我が家を支えるChatOps
○ ChatOpsでなにができるのかまとめ
● ぜひ興味を持ったらお家で試してみてください!
本日のサンプルコード
https://github.com/little-hands/pbot
ありがとうございました

More Related Content

PDF
PyQtではじめるGUIプログラミング
PDF
Chat opsをはじめよう!
PDF
Pythonを取り巻く開発環境 #pyconjp
PPTX
Hubotを使ってbotをつくろう!
PDF
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
KEY
Windowsにpythonをインストールしてみよう
PDF
密着!わたしのコンソールアプリ開発環境
PPTX
勉強会 Cvml python基礎
PyQtではじめるGUIプログラミング
Chat opsをはじめよう!
Pythonを取り巻く開発環境 #pyconjp
Hubotを使ってbotをつくろう!
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
Windowsにpythonをインストールしてみよう
密着!わたしのコンソールアプリ開発環境
勉強会 Cvml python基礎

What's hot (20)

PDF
「Python言語」はじめの一歩 / First step of Python
KEY
hubotで快適BOT生活
PDF
Pyconjp2014_implementations
PDF
Python3 プログラミング勉強会
PPTX
Pythonの環境導入 2014年春季版
PDF
"Continuous Publication" with Python: Another Approach
PPTX
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
PDF
Hubotをはじめる
PDF
XML-RPC : Pythonが「電池付属」と呼ばれる理由
PDF
TranslimitのChatOps事情と愉快なbotたち
PPTX
QtでHello, World!!
PDF
10分でわかるPythonの開発環境
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
PDF
インフラ自動化とHashicorp tools
PDF
パッケージングの今と未来
PDF
Pythonでゲーム作る
PDF
hubot-slack v4移行時のハマりどころ #hubot_chatops
ODP
PySide/QtWebkitで楽々 slideshare Hack
PPTX
FINAL FANTASY Record Keeperを支えたGolang
PDF
第1回python勉強会
「Python言語」はじめの一歩 / First step of Python
hubotで快適BOT生活
Pyconjp2014_implementations
Python3 プログラミング勉強会
Pythonの環境導入 2014年春季版
"Continuous Publication" with Python: Another Approach
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
Hubotをはじめる
XML-RPC : Pythonが「電池付属」と呼ばれる理由
TranslimitのChatOps事情と愉快なbotたち
QtでHello, World!!
10分でわかるPythonの開発環境
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
インフラ自動化とHashicorp tools
パッケージングの今と未来
Pythonでゲーム作る
hubot-slack v4移行時のハマりどころ #hubot_chatops
PySide/QtWebkitで楽々 slideshare Hack
FINAL FANTASY Record Keeperを支えたGolang
第1回python勉強会
Ad

Similar to Python × Herokuで作る 雑談slack bot (20)

PDF
【Loco partners】Slack×Hubotハッカソン0919
PPTX
Linebotを作ろう
PDF
Web技術勉強会 20120609
PDF
Herokuチュートリアル
PPTX
start Heroku
PPTX
Alt2017 1111 hatobus
PDF
Scala 初めての人が Heroku で Web アプリを公開するまで
PPTX
LINE BOT AWARDS ハンズオン
PDF
Herokuをつかってみた。
PDF
Haskell で LINE Bot を作ってみた
PDF
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
PDF
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
PDF
喋って、DEMOで 伝える 僕がHerokuを使う理由
PDF
デプロイに苦労した話
PDF
Heroku に ChiliProject を入れてみた
PDF
Yesod on Heroku
PDF
BotKitで作るイベント駆動Bot
PPTX
LINE API × heroku ×selenium
PPTX
【博多TECH塾】自分ごのみのチャットボットをつくるハンズオン
PPTX
きいて!メロンパン
【Loco partners】Slack×Hubotハッカソン0919
Linebotを作ろう
Web技術勉強会 20120609
Herokuチュートリアル
start Heroku
Alt2017 1111 hatobus
Scala 初めての人が Heroku で Web アプリを公開するまで
LINE BOT AWARDS ハンズオン
Herokuをつかってみた。
Haskell で LINE Bot を作ってみた
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
喋って、DEMOで 伝える 僕がHerokuを使う理由
デプロイに苦労した話
Heroku に ChiliProject を入れてみた
Yesod on Heroku
BotKitで作るイベント駆動Bot
LINE API × heroku ×selenium
【博多TECH塾】自分ごのみのチャットボットをつくるハンズオン
きいて!メロンパン
Ad

More from dcubeio (20)

PDF
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
PDF
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
PDF
20171206 d3 health_tech発表資料
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
PDF
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
PDF
BizReach x Marketo連携
PPTX
Kinesis Firehoseを使ってみた
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
PPTX
春の脆弱性祭り 2017/06/13
PDF
DynamoDBを導入した話
PPTX
Play2 scalaを2年やって学んだこと
PDF
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
PPT
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
PDF
【freee】プロダクトマネージャーの仕事と魅力
PDF
【ビズリーチ】プロダクトマネージャーの仕事と魅力
PPTX
HR Tech x 機械学習 導入事例紹介
PPTX
Scalaマクロ入門 bizr20170217
PDF
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
20171206 d3 health_tech発表資料
Go初心者がGoでコマンドラインツールの作成に挑戦した話
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
BizReach x Marketo連携
Kinesis Firehoseを使ってみた
Apiドキュメンテーションツールを使いこなす【api blueprint編】
春の脆弱性祭り 2017/06/13
DynamoDBを導入した話
Play2 scalaを2年やって学んだこと
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
【freee】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力
HR Tech x 機械学習 導入事例紹介
Scalaマクロ入門 bizr20170217
機械学習を支えるX86 64の拡張命令セットを読む会 20170212

Recently uploaded (7)

PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
AIシステムのセキュリティ:脅威となりつつあるAIの現状と課題 [English] Security of AI Systems: The Current...
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
AIシステムのセキュリティ:脅威となりつつあるAIの現状と課題 [English] Security of AI Systems: The Current...
Working as an OSS Developer at Ruby Association Activity Report 2025

Python × Herokuで作る 雑談slack bot