SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
aws chaliceで作る
slack翻訳bot
2018年01月23日
内田 学
@MasterCloud #9 新春クラウドLT大会
2
自己紹介
内田 学(うちだ まなぶ)
uchimanajet7
JAWS-UGやSORACOM UGに参加してます
AWSとGolangが好きです
自社サービスを開発するチームに所属しています
SORACOM UG
こんな経験ありませんか?
Photo credit: Bernie Goldbach on Visual hunt / CC BY-NC-ND
こんな経験ありませんか? 4
What do you do when
you receive "Slack"
message in English?
こんな経験ありませんか? 5
You
英語のメッセージか・・・
よくわからないからGoogle
翻訳にコピペして確認しよ
う
こんな経験ありませんか? 6
You
これから毎回コピペして
翻訳するのはちょっと手間
がかかるなぁ・・・
面倒を解決するには?
面倒を解決するには? 8
You
英語ができれば問題ない
し、これをきっかけに英語
の勉強を始めようかなぁ
面倒を解決するには? 9
You
コピペしないで翻訳でき
れば、手軽だし面倒じゃな
いかもしれない
すぐに試せること
すぐに試せること
‣ 残念ながらすぐに英語ができるようにはならない・・・
‣ コピペをしないで翻訳できるような仕組みがあればよさ
そう
‣ Slack社が公開しているSlack Appが手軽で便利そう
‣ slackapi/reacjilator: A translation bot that translates a
message when a user reacted with an emoji ! " #
$ % & ' ( ) * +
- https://github.com/slackapi/reacjilator
11
すぐに試せること
‣ このSlack Appを使えばメッセージに対して国旗の
絵文字でリアクションすることで、その国の言語に
翻訳されてスレッドとして返信されるようになる
‣ GitHubリポジトリにはHerokuのDeployボタンも
あるのでNode.jsとGoogle翻訳APIで問題なければ
手軽に使える
12
試してみた
14
http://uchimanajet7.hatenablog.com/entry/2017/12/18/102237
変更したのは
変更したのは
‣ プログラムはNode.jsが得意ではないので慣れている言語にしたい
‣ 動産環境は使い慣れているAWS上で動作させたい
‣ AWS Chalice (Python Serverless Microframework for AWS)を利
用してPythonに変更
‣ AWS Lambdaを利用して動作するように変更
‣ aws/chalice: Python Serverless Microframework for AWS
- https://github.com/aws/chalice
16
変更したのは
‣ Your app should respond to the event request with an HTTP 2xx
within three seconds. If it does not, we'll consider the event
delivery attempt failed. After a failure, we'll retry three times,
backing off exponentially.
‣ Events API | Slack
- https://api.slack.com/events-api#responding_to_events
‣ AWS Lambdaのコールドスタート時や翻訳APIの応答を待っていると3
秒のリミットを超えることがある
‣ リミットを超えると送信元で失敗となりイベントが再送されるので、複
数回同じメッセージが翻訳されることになる
17
変更したのは
‣ Amazon API Gateway経由でslackからのイベントを受け
付けてAmazon SNSに送信するAWS Lambdaと、
Amazon SNSからメッセージを受け取って処理を行う
AWS Lambdaの2つに分けて非同期で処理
‣ AWS Lambdaのコールドスタートで3秒以上かかった場合
には効果がないが、翻訳APIの処理待ちでイベントが複数
回送信されることはなくなった
18
変更したのは
‣ 翻訳APIは無料で使える枠がありかつ、登録も簡単な
ところの方がありがたい
‣ Microsoft Translator API は無料枠があるが、アカウ
ント登録にクレジットカード登録があり多少面倒
‣ Translator Text API - 自動翻訳 | Microsoft Azure
- https://azure.microsoft.com/ja-jp/services/
cognitive-services/translator-text-api/
19
変更したのは
‣ Yandex Translate API ならば、既存のGoogleアカウント
でサインアップできる
‣ 無料枠もありサインアップした後、API Keyを払い出せば利
用可能
‣ 対応している言語数も多く、入力文字列の言語自動判別も
可能
‣ Translate API — Yandex Technologies
- https://tech.yandex.com/translate/
20
変更したのは
‣ しかし、どうやらYandexはロシア発の企業
‣ 翻訳APIを利用する=文字列がAPIに送信される
‣ すべてのslackチャンネルでメッセージが送信されるの
は不安がある
‣ 翻訳が実行されるチャンネルを限定したい
‣ Yandex - Wikipedia
- https://ja.wikipedia.org/wiki/Yandex
21
変更したのは
‣ イベントの送信元でコントロールすることはできない様子
‣ イベントを受けた方で指定のチャンネル以外は受け付けないようにす
る
‣ slack上で表示されているチャンネル名ではなくIDで管理されている
‣ チャンネルのIDを調べるのにはchannels.list APIを使えばよい
‣ 手軽なのはchannels.list APIの動作テストページで実行して結果を確
認すること
‣ channels.list method | Slack
- https://api.slack.com/methods/channels.list/test
22
まとめ
Image via Attribution Engine. Licensed under CC0.
まとめ
‣ Node.js, Google翻訳API, Heroku で問題なければ公式
そのままでお手軽に使える
‣ コードも簡単で動作も軽いのでFaaSでの動作も問題無し
‣ AWS Chaliceは単純なものを作るのには手軽で便利
‣ YandexのAPIは 翻訳する場合もあるが手軽
‣ 外部のAPIを呼び出す場合は処理時間に注意
‣ 時間がかかる場合には非同期処理にして対応する
24
まとめ
‣ 翻訳APIに関してはAmazon Translateに期待
‣ Amazon Translate – ニューラル機械翻訳 – AWS
- https://aws.amazon.com/jp/translate/
‣ AWSのサービスであればSDKを利用できる
‣ IAM認証も利用できるのでAPIキーの管理も不要となる
‣ 外部APIに文字列を送信する必要がなくなる
‣ 現在はプレビューなので利用したい場合には申請が必要
25
Appendix
‣ aws chaliceを使ってslackの翻訳botを作ってみた #aws #chalice #slack #bot -
uchimanajet7のメモ
- http://uchimanajet7.hatenablog.com/entry/2017/12/18/102237
‣ aws/chalice: Python Serverless Microframework for AWS
- https://github.com/aws/chalice
‣ slackapi/reacjilator: A translation bot that translates a message when a user
reacted with an emoji ! " # $ % & ' ( ) * +
- https://github.com/slackapi/reacjilator
‣ [Japanese] Developing a bot for your workspace 翻訳ボットを作る!
- https://www.slideshare.net/tomomi/japanese-developing-a-bot-for-your-
workspace-82133038
26
Appendix
‣ JAWS-UG(AWS Users Group – Japan)
- https://jaws-ug.jp/
‣ SORACOM User Group とは
- https://pages.soracom.jp/usergroup.html
‣ 効果的な導入・運用のための Amazon Web Services活用入門 | マイ
ナビブックス
- https://book.mynavi.jp/ec/products/detail/id=54224
‣ Who am I?
- https://uchimanajet7.github.io/whoami/
27

Más contenido relacionado

La actualidad más candente

La actualidad más candente (11)

Python charity talk in japan fastAPI introduction
Python charity talk in japan fastAPI introductionPython charity talk in japan fastAPI introduction
Python charity talk in japan fastAPI introduction
 
(KOF2017) LibreOffice development activities: QA and Translation
(KOF2017) LibreOffice development activities: QA and Translation(KOF2017) LibreOffice development activities: QA and Translation
(KOF2017) LibreOffice development activities: QA and Translation
 
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
Turnipによるエンドツーエンドテストことはじめ
TurnipによるエンドツーエンドテストことはじめTurnipによるエンドツーエンドテストことはじめ
Turnipによるエンドツーエンドテストことはじめ
 
開発前にインタビューをして分かったこと 吉澤和香奈
開発前にインタビューをして分かったこと 吉澤和香奈開発前にインタビューをして分かったこと 吉澤和香奈
開発前にインタビューをして分かったこと 吉澤和香奈
 
roslyn
roslynroslyn
roslyn
 
リーダブルコードワークショップ(パイオニア向け)のまとめ
リーダブルコードワークショップ(パイオニア向け)のまとめリーダブルコードワークショップ(パイオニア向け)のまとめ
リーダブルコードワークショップ(パイオニア向け)のまとめ
 
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
 

Similar a aws chaliceで作るslack翻訳bot

Similar a aws chaliceで作るslack翻訳bot (20)

HTML5 アプリ開発
HTML5 アプリ開発HTML5 アプリ開発
HTML5 アプリ開発
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
 
Golang on AWS
Golang on AWSGolang on AWS
Golang on AWS
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
 
AWS Amplify 入門
AWS Amplify 入門AWS Amplify 入門
AWS Amplify 入門
 
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャAWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
 
drive api×deeplapiで高性能ocr翻訳サービスを開発した話【WebAPT_LT会】
drive api×deeplapiで高性能ocr翻訳サービスを開発した話【WebAPT_LT会】drive api×deeplapiで高性能ocr翻訳サービスを開発した話【WebAPT_LT会】
drive api×deeplapiで高性能ocr翻訳サービスを開発した話【WebAPT_LT会】
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
 
Open stack swift is too Enterprise? 2014/12/01 advent cal
Open stack swift is too Enterprise?  2014/12/01 advent calOpen stack swift is too Enterprise?  2014/12/01 advent cal
Open stack swift is too Enterprise? 2014/12/01 advent cal
 
AmplifyのバグをAWSに報告して直してもらった話
AmplifyのバグをAWSに報告して直してもらった話AmplifyのバグをAWSに報告して直してもらった話
AmplifyのバグをAWSに報告して直してもらった話
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話
 
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
 
初参加の Developer が見てきた re:Invent 2015
初参加の Developer が見てきた re:Invent 2015初参加の Developer が見てきた re:Invent 2015
初参加の Developer が見てきた re:Invent 2015
 
Bay Area Startup Report - IVS CTO Night & Day in Miyazaki
Bay Area Startup Report - IVS CTO Night & Day in MiyazakiBay Area Startup Report - IVS CTO Night & Day in Miyazaki
Bay Area Startup Report - IVS CTO Night & Day in Miyazaki
 
How to create bindings 2016
How to create bindings 2016How to create bindings 2016
How to create bindings 2016
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話
 
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgentGoで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
 

Más de uchimanajet7

Más de uchimanajet7 (18)

期待値コントロール
期待値コントロール期待値コントロール
期待値コントロール
 
Enjoy the difference
Enjoy the differenceEnjoy the difference
Enjoy the difference
 
Developer が Serverworks で働いてみて感じた6つのこと
Developer が Serverworks で働いてみて感じた6つのことDeveloper が Serverworks で働いてみて感じた6つのこと
Developer が Serverworks で働いてみて感じた6つのこと
 
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
 
JAWS−UG中央線の紹介
JAWS−UG中央線の紹介JAWS−UG中央線の紹介
JAWS−UG中央線の紹介
 
Technology that is used in “Skybrain”
Technology that is used in “Skybrain”Technology that is used in “Skybrain”
Technology that is used in “Skybrain”
 
We are using the “Fastly”
We are using the “Fastly”We are using the “Fastly”
We are using the “Fastly”
 
Serverless で位置情報を活用する
Serverless で位置情報を活用するServerless で位置情報を活用する
Serverless で位置情報を活用する
 
JAWS-UGとは?
JAWS-UGとは?JAWS-UGとは?
JAWS-UGとは?
 
Web API Next Challenge
Web API Next ChallengeWeb API Next Challenge
Web API Next Challenge
 
日本一遅い re:Invent 2015 社内報告会
日本一遅い re:Invent 2015 社内報告会日本一遅い re:Invent 2015 社内報告会
日本一遅い re:Invent 2015 社内報告会
 
日本にいる人向けre:Inventの楽しみ方
日本にいる人向けre:Inventの楽しみ方日本にいる人向けre:Inventの楽しみ方
日本にいる人向けre:Inventの楽しみ方
 
AWS S3 making experience
AWS S3 making experienceAWS S3 making experience
AWS S3 making experience
 
AWS EC2 making experience
AWS EC2 making experienceAWS EC2 making experience
AWS EC2 making experience
 
One step of first to a cloud
One step of first to a cloudOne step of first to a cloud
One step of first to a cloud
 
JAWS-UG ◯◯◯の紹介
JAWS-UG ◯◯◯の紹介JAWS-UG ◯◯◯の紹介
JAWS-UG ◯◯◯の紹介
 
JAWS-UG中央線の紹介
JAWS-UG中央線の紹介JAWS-UG中央線の紹介
JAWS-UG中央線の紹介
 
AWSを選択する理由
AWSを選択する理由AWSを選択する理由
AWSを選択する理由
 

aws chaliceで作るslack翻訳bot