Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Botを使った業務効率化
平成26年8月22日
山本 裕介
株式会社サムライズム
本研究の目的
• Botを活用し業務効率化を図る
研究の背景
• 業務効率化が求められる
!
• システム化による業務自動化
研究の背景
• 自動化度が高まるにつれて実装コスト増大
• 自動化度を高めてもオペレーションコストの削減効果低
全自動手動 半自動
コスト大
コスト小
システム実装コストとオペレーションコストの関係
(※当社調べ)
オペレーションコスト
実装・...
本研究のアプローチ
• 完全な自動化を目指さない
• 自動化コストが高い箇所は人間系が介在
先行研究
• HUBOT 【GitHub2011】- https://hubot.github.com
先行研究 - HUBOT
• Node.jsで動作するボットフレームワーク
• HipChat、Twitter、IRC等々多彩なチャネルに対応
• 様々なサードパーティープラグインが存在
• Herokuなどに手軽にデプロイ可能
先行研究の課題
• Javaで実装できない
• これは大問題ですね
•ね?
Today's version of Hubot is open source,
written in CoffeeScript on Node.js, and
eas...
本研究のアプローチ
•JavaでBotを実装
•簡単
•そう、Twitter4Jならね
実装してみた
• echo ボット
public class BotMain {

public static void main(String[] args) {

Twitter twitter = TwitterFactory.getSi...
動作の様子
弊社業務用Botの出来ること
• ライセンス発注
• 入金消し込み
• Botのセルフアップデート
(シャットダウン→git pull→起動)
などなど
Twitter連携Botのいいところ
• リプライで命令: 文脈に応じたコマンドを実行できる
発注処理
処理対象帳票コード
Twitter連携Botのいいところ
• UI不要
• Twitterクライアントより操作可能
• HTMLやSwing、JavaFXでUIを書く必要がない
• セキュリティ
• Twitter APIが口となる。SSLの口を用意したり、
VP...
アンケートによる効果測定
• 調査対象者: 株式会社サムライズム全社員
• 無記名
• 有効回答数: 1名
アンケート結果
はい
100%
はい いいえ
• Bot利用により業務効率は向上しましたか?
アンケート結果
はい
100%
はい いいえ
• 今後Botの利用を拡大していきたいですか?
アンケート結果
はい
100%
はい いいえ
• Javaで実装するBotをお友達に勧めたいですか?
アンケート結果
はい、
100%
はい
はい、Java8らしく書けたらもっと簡単
いいえ
• Botの実装は簡単でしたか?
まとめと考察
•
JavaでBot実装超簡単
•
そう、Twitter4Jならね
•Java8ならもっとがんばれる
Java8を使ったBot実装効率化
平成26年8月22日
山本 裕介
株式会社サムライズム
本研究の目的
•Botの開発効率向上
研究の背景
•先行研究【山本14】より
Bot開発効率に課題判明
具体的な不満点(匿名)
匿名クラスとか書いたら負け
Lambdaで書きたい
switch文とかダサい
0 1
つまり
古き良きJava過ぎる
• 匿名クラス、switchでコマンド分岐とかダサい
twitterStream.addListener(new UserStreamAdapter() {

@Override

public void onDirec...
そこで
Java8で書けるようにした
流れるようにBotを実装
public static void main(String[] args) {

new Jenkinsan()

.onMention("echo",
(status, twitter) -> twitter.re...
工夫した箇所
• Lambda内の例外処理がめんどいので…
工夫した箇所
• BiConsumerを使い、例外を吐かないユーティリ
ティオブジェクトを提供
onMention(BiConsumer<Status, TwitterWrapper> c)
onMention(Consumer<Status>...
ユーティリティオブジェクトのインターフェース
class TwitterWrapper{
public void updateStatus(String text);
public void reply(String text);

publi...
ユーティリティオブジェクトの効果
Twitter twitter = TwitterFactory.getSingleton();

new Kagechiyo()

.onMention("help",

(message) -> {

tr...
アンケートによる効果測定
• 調査対象者: 株式会社サムライズム全社員
• 無記名
• 有効回答数: 1名
アンケート結果
はい
100%
はい いいえ
• Botの実装は効率化出来ましたか?
まとめと考察
• Java8でBot実装簡単
• そう、Twitter4Jならね
• 続きはGitHubで!
https://github.com/yusuke/kagechiyo
ご静聴ありがとうございました
便利なBot作りました
• フォローするとグラビアアイドルのステキな画像で
タイムラインが埋まります → @grajiga
フォローなう!
Upcoming SlideShare
Loading in …5
×

Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug

5,521 views

Published on

JavaでTwitterボット開発簡単!

Published in: Technology

Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug

  1. 1. Botを使った業務効率化 平成26年8月22日 山本 裕介 株式会社サムライズム
  2. 2. 本研究の目的 • Botを活用し業務効率化を図る
  3. 3. 研究の背景 • 業務効率化が求められる ! • システム化による業務自動化
  4. 4. 研究の背景 • 自動化度が高まるにつれて実装コスト増大 • 自動化度を高めてもオペレーションコストの削減効果低 全自動手動 半自動 コスト大 コスト小 システム実装コストとオペレーションコストの関係 (※当社調べ) オペレーションコスト 実装・メンテナンスコスト 自動化を進めると費用対効果は急速に低下
  5. 5. 本研究のアプローチ • 完全な自動化を目指さない • 自動化コストが高い箇所は人間系が介在
  6. 6. 先行研究 • HUBOT 【GitHub2011】- https://hubot.github.com
  7. 7. 先行研究 - HUBOT • Node.jsで動作するボットフレームワーク • HipChat、Twitter、IRC等々多彩なチャネルに対応 • 様々なサードパーティープラグインが存在 • Herokuなどに手軽にデプロイ可能
  8. 8. 先行研究の課題 • Javaで実装できない • これは大問題ですね •ね? Today's version of Hubot is open source, written in CoffeeScript on Node.js, and easily deployed on platforms like Heroku HUBOT[14]より
  9. 9. 本研究のアプローチ •JavaでBotを実装 •簡単 •そう、Twitter4Jならね
  10. 10. 実装してみた • echo ボット public class BotMain {
 public static void main(String[] args) {
 Twitter twitter = TwitterFactory.getSingleton();
 TwitterStream twitterStream = TwitterStreamFactory.getSingleton();
 twitterStream.addListener(new UserStreamAdapter() {
 @Override
 public void onDirectMessage(DirectMessage directMessage) {
 String[] args = directMessage.getText().trim().split(" ");
 String command = args[0];
 switch (command.toLowerCase()) {
 case "echo":
 twitter.sendDirectMessage(YUSUKE, args[1]);
 break;
 default:
 twitter.sendDirectMessage(YUSUKE, "invalid args:" + Arrays.toString(args));
 }
 });
 twitterStream.user();
 }
 }
  11. 11. 動作の様子
  12. 12. 弊社業務用Botの出来ること • ライセンス発注 • 入金消し込み • Botのセルフアップデート (シャットダウン→git pull→起動) などなど
  13. 13. Twitter連携Botのいいところ • リプライで命令: 文脈に応じたコマンドを実行できる 発注処理 処理対象帳票コード
  14. 14. Twitter連携Botのいいところ • UI不要 • Twitterクライアントより操作可能 • HTMLやSwing、JavaFXでUIを書く必要がない • セキュリティ • Twitter APIが口となる。SSLの口を用意したり、 VPN接続など不要
  15. 15. アンケートによる効果測定 • 調査対象者: 株式会社サムライズム全社員 • 無記名 • 有効回答数: 1名
  16. 16. アンケート結果 はい 100% はい いいえ • Bot利用により業務効率は向上しましたか?
  17. 17. アンケート結果 はい 100% はい いいえ • 今後Botの利用を拡大していきたいですか?
  18. 18. アンケート結果 はい 100% はい いいえ • Javaで実装するBotをお友達に勧めたいですか?
  19. 19. アンケート結果 はい、 100% はい はい、Java8らしく書けたらもっと簡単 いいえ • Botの実装は簡単でしたか?
  20. 20. まとめと考察 • JavaでBot実装超簡単 • そう、Twitter4Jならね •Java8ならもっとがんばれる
  21. 21. Java8を使ったBot実装効率化 平成26年8月22日 山本 裕介 株式会社サムライズム
  22. 22. 本研究の目的 •Botの開発効率向上
  23. 23. 研究の背景 •先行研究【山本14】より Bot開発効率に課題判明
  24. 24. 具体的な不満点(匿名) 匿名クラスとか書いたら負け Lambdaで書きたい switch文とかダサい 0 1
  25. 25. つまり
  26. 26. 古き良きJava過ぎる • 匿名クラス、switchでコマンド分岐とかダサい twitterStream.addListener(new UserStreamAdapter() {
 @Override
 public void onDirectMessage(DirectMessage directMessage) {
 String[] args = directMessage.getText().trim().split(" ");
 String command = args[0];
 switch (command.toLowerCase()) {
 case "echo":
 twitter.sendDirectMessage(YUSUKE, args[1]);
 break;
 default:
 twitter.sendDirectMessage(YUSUKE, "invalid args:" + Arrays.toString(args));
 }
 });
 twitterStream.user();
 }
 }
  27. 27. そこで
  28. 28. Java8で書けるようにした
  29. 29. 流れるようにBotを実装 public static void main(String[] args) {
 new Jenkinsan()
 .onMention("echo", (status, twitter) -> twitter.reply(status.getText()))
 .onMention(“hello", (status, twitter) -> twitter.reply("Hello world!"))
 .start();
 } echoコマンドを受けたらそのままリプライ helloコマンドを受けたらHello Worldと返す
  30. 30. 工夫した箇所 • Lambda内の例外処理がめんどいので…
  31. 31. 工夫した箇所 • BiConsumerを使い、例外を吐かないユーティリ ティオブジェクトを提供 onMention(BiConsumer<Status, TwitterWrapper> c) onMention(Consumer<Status> consumer)
  32. 32. ユーティリティオブジェクトのインターフェース class TwitterWrapper{ public void updateStatus(String text); public void reply(String text);
 public void updateStatus(StatusUpdate status);
 public void sendDirectMessage(String message); } onMention(BiConsumer<Status, TwitterWrapper> c) @ツイートで返信、ダイレクトメッセージ送信など 例外を投げない便利メソッドを搭載
  33. 33. ユーティリティオブジェクトの効果 Twitter twitter = TwitterFactory.getSingleton();
 new Kagechiyo()
 .onMention("help",
 (message) -> {
 try {
 twitter.updateStatus(String.format("@%s %s", message.getUser().getScreenName(), "ググレカス"));
 } catch (TwitterException e) {
 e.printStackTrace();
 }
 })
 .start(); new Kagechiyo()
 .onDirectMessage("help",
 (message, twitter) -> twitter.sendDirectMessage("ググレカス"))
 .start(); Lambda万歳 Lambdaうざい
  34. 34. アンケートによる効果測定 • 調査対象者: 株式会社サムライズム全社員 • 無記名 • 有効回答数: 1名
  35. 35. アンケート結果 はい 100% はい いいえ • Botの実装は効率化出来ましたか?
  36. 36. まとめと考察 • Java8でBot実装簡単 • そう、Twitter4Jならね • 続きはGitHubで! https://github.com/yusuke/kagechiyo
  37. 37. ご静聴ありがとうございました
  38. 38. 便利なBot作りました • フォローするとグラビアアイドルのステキな画像で タイムラインが埋まります → @grajiga フォローなう!

×