Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで英語ツイートを音声化するツイッターボットを作った
Search
Morix
October 24, 2017
Programming
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで英語ツイートを音声化するツイッターボットを作った
Created by Shota Omori(@morix1500)
2017-10-24 GoビギナーズLT大会!「最近、Go言語始めました」の会
Morix
October 24, 2017
More Decks by Morix
See All by Morix
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
500
入社後SREチームのミッションや課題の整理をした話
morix1500
1
620
[EC2からKubernetes]楽天ラクマのコンテナ化の歩み
morix1500
26
11k
AWS EKSでClusterAutoscalerを使うときはNodeGroupの分け方に気をつけろ!
morix1500
0
1.1k
FirebaseとNetlifyを使ってサーバーレスでサービスを作った話
morix1500
2
3k
オーバーロードで学んだチームマネジメント / Team management learned through overlord
morix1500
1
2.2k
転職をする前にやっておきたいこと / What you want to do before you change your career
morix1500
0
4.1k
自分を強くするためにやってきたこと
morix1500
7
2.7k
個人事業主になりたい!どうやって?調べてみよう!
morix1500
1
460
Other Decks in Programming
See All in Programming
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
130
Performance Engineering for Everyone
elenatanasoiu
0
270
フィードバックで育てるAI開発
kotaminato
1
120
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
180
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
130
自作OSでスライド発表する
uyuki234
1
3.8k
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
230
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
190
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
320
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.5k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Embracing the Ebb and Flow
colly
88
5.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Making Projects Easy
brettharned
120
6.7k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
GitHub's CSS Performance
jonrohan
1033
470k
Accessibility Awareness
sabderemane
1
160
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
A better future with KSS
kneath
240
18k
Transcript
Goで英語ツイートを音声化するツイッターボットを作った 2017.10.24 Go言語LT大会!「最近、Go言語始めました」の会 @morix1500
じこしょうかい ・大森翔太(@morix1500) ・株式会社モブキャスト ・インフラエンジニア ・Go歴:2か月くらい? ・技術ブログやってます! https://blog.haramishio.xyz/
きょうのテーマ ・英語のツイートを音声化するツイッターボットの紹介 ・エラーハンドリングに悩んだ話
〇〇と学ぶ英語Botというものがある
英語学習Botのいいところ ・平易な文章であること ・日本語訳とポイントとなる単語の意味が載ってる ・好きなアニメのセリフで学べる
英語学習Botのよくないところ ・単語がコピペしづらい ⇒ ツイッタークライアントによると思う ・発音がわからない
ということでBotに英語をしゃべらせた
Botの仕組み GoApp Polly 1. Streaming 2. Get Speech Request 3.
Get Speech 4. Encode Video 5. Upload Video & Tweet
Amazon Pollyとは ・AWSが提供するテキストから音声化するサービス ・47種類の男女の声と24の言語(日本語含む)に対応 ・機械学習によるなめらかな発音 ・SSML(Speech Sythesis Markup Language)による音声の編集 ・MP3などでダウンロード可能
Twitterに音声ファイルをアップロードするには ・Twitterに音声ファイルをアップロードできない ・じゃあどうすれば? ・音声ファイルを動画化してそれをアップロード
Go言語でどう作ったか ・Twitter Client ・Anaconda(https://github.com/ChimeraCoder/anaconda ) ・Pollyの操作 ・AWS SDK ・音声の動画化 ・ffmpeg
完成したのがこちら アニメで学ぶ英語音声bot @km_eng_speech https://twitter.com/km_eng_speech
Botを作るときに悩んだこと ・Go言語でのエラーハンドリングのやり方 ・例外がないからハンドリングどうやれば…
よくあるエラー処理 func main() { if err := something(); err !=
nil { fmt.Println(err) } }
よくあるエラー処理(複数エラーの場合) var ( Err01 = errors.New("Output Error 01") Err02 =
errors.New("Output Error 02") ) func main() { err := something() switch err { case Err01: fmt.Println("type is Err01") fmt.Printf("%+v\n", err) case Err02: fmt.Println("type is Err02") fmt.Printf("%+v\n", err) } } エラー定義しといて 返却されたerrで ハンドリングする
この方法の問題点 ・エラーに追加情報を付与できない func hoge() error { return Err01 } func
something() error { if err := hoge() ; err != nil { return fmt.Errorf("%+v from hoge", err) } return nil } 違うエラー(Err01ではない)になってしまう!
かいけつあん ・pkg/errorsを使用する https://github.com/pkg/errors
pkg/errorsとは ・元のエラーを変更しない形で、追加情報を付与できる ・エラーのスタックトレースも出力することができる
エラー定義と追加情報の付与 ・エラー定義 Err01 = errors.New(“Output Error 01”) ・追加情報の付与 return errors.Wrap(Err01,
“from hoge”)
エラー定義と追加情報の付与 import ( "fmt" "github.com/pkg/errors" ) var ( Err01 =
errors.New("Output Error 01") Err02 = errors.New("Output Error 02") ) func hoge() error { return Err01 } func fuga() error { return Err02 } func something() error { if err := hoge() ; err != nil { return errors.Wrap(err, "from hoge") } if err := fuga() ; err != nil { return errors.Wrap(err, "from fuga") } return nil }
エラー判定 ・エラーの根本原因の呼び出し errors.Cause(err) err := something() fmt.Println(err) fmt.Println(errors.Cause(err)) --------------------------- from
hoge: Output Error 01 Output Error 01
エラー判定 func main() { err := something() switch errors.Cause(err) {
case Err01: fmt.Println("type is Err01") fmt.Printfln(err) fmt.Printf("%+v\n", err) case Err02: fmt.Println("type is Err02") fmt.Println(err) fmt.Printf("%+v\n", err) } }
エラー判定(前ページの出力結果) type is Err01 from hoge: Output Error 01 Output
Error 01 main.init /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:9 runtime.main /home/ubuntu/go/current/src/runtime/proc.go:173 runtime.goexit /home/ubuntu/go/current/src/runtime/asm_amd64.s:2337 from hoge main.something /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:23 main.main /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:32 runtime.main /home/ubuntu/go/current/src/runtime/proc.go:185 runtime.goexit /home/ubuntu/go/current/src/runtime/asm_amd64.s:2337
まとめ ・複雑なエラーハンドリングは「pkg/errors」がおすすめ ・適切にエラーを処理してユーザに優しいエラーメッセージを! ・スタックトレースで開発者にも優しいエラーメッセージを!
最後に - Go言語を使ってみた感想 ・作りたいと思ったものがサクッと作れる srm - 安全なrmコマンド https://github.com/morix1500/srm ruler -
csv/tsv/ltsvを表形式に表示するコマンド https://github.com/morix1500/ruler ・パッケージが充実しており車輪の再発明をしなくていい ・とにかく読みやすい/書きやすい! ・ワンバイナリで配布できるのは非常に便利 ・どんどんGo言語の使用を進めていきたい!