Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DiscordBotの作成(基盤編)
Search
Kyusu Kegani
May 23, 2019
Programming
0
79
DiscordBotの作成(基盤編)
社内勉強会用
Kyusu Kegani
May 23, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
sbt 2
xuwei_k
0
300
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
150
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
220
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.3k
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
500
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.7k
ゲームの物理 剛体編
fadis
0
350
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.9k
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
230
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
100
Featured
See All Featured
How GitHub (no longer) Works
holman
316
140k
Making Projects Easy
brettharned
120
6.5k
RailsConf 2023
tenderlove
30
1.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
32
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Being A Developer After 40
akosma
91
590k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Cult of Friendly URLs
andyhume
79
6.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Transcript
Discord Botの作成(基盤編) 2019-5-23
Discordとは? ゲーマー向けチャットサービスです。 チャット、通話などが簡単にできます。 使い勝手の良さからゲーム用途以外にも よく使われています。 • インフラ勉強会 • Python.jp
Bot作成のモチベーション(1/2) • 大学時代の友人とDiscordを使ってSplatoon2などのオンラインゲームをやっていた。 • Splatoon2は2時間ごとにルールとステージが変わるので、 どんなルールで遊ぶのかは 結構重要。 • 知るにはゲームを起動する or
Twitterの非公式Botを見に行く必要があり、みんなに共有が難しい ◦ 「遊ぼうぜー」→誰かがステージ見に行く→「〇〇だったよー」という感じ
Bot作成のモチベーション(2/2) • 「DiscordにBot置いたら遊ぶのを誘う時にステージも見れるし便利じゃない? • Bot爆誕(キャラクターはSplatoon2より拝借)
Botの機能 • /(特定の単語)でSplatoon2の情報を知らせてくれる
今回はBotの基盤周りの話をします
目次 • Python3 on AWS EC2 • GitHub + AWS
CodeDeploy + AWS CodePipelineで自動デプロイを実現 • GitHub + TravisCIで自動テストを実現 • Pytestでテスト駆動開発
Python3 on AWS EC2
Python3 on AWS EC2 DiscordのBotはPythonで開発可能です。 DiscordのAPIをラップしたライブラリがあります 1. Discord上でBotアカウントを作って 2. Tokenを取得して
3. ライブラリに渡して 4. 起動したら完成! ◦ 詳しくはここを参考にしてください
Python3 on AWS EC2 Bot自体は簡単に作れるのですが、永続化するためのサーバが必要です。 サーバレスとかも考えたのですが、勉強のために AWS EC2を使うことにしました。 単純に最小規模のインスタンスを 1つ立てて、
そこでPythonを実行させています。
GitHub + AWS CodeDeploy + AWS CodePipeline で自動デプロイ
デモ
簡単な説明 1. masterブランチへの マージ 2. CodePipelineの起動 3. CodeDeployの起動 4. EC2へのデプロイ
CodePipelineについて AWSのサービスの1つ Code三兄弟(CodeBuild+CodeCommit+CodeDeploy)やGitHub、AWS S3(クラウドストレージ)などを 組み合わせてCIのパイプラインを作成することができる 今回はGitHubのマージをトリガーとして、 ソースコードのAWS S3へのコピー CodeDeployでEC2へのデプロイを行った。
CodePipelineの設定 Sourceステージ(上) • GitHub→AWS S3へのコピー Deployステージ(下) • CodeDeployでEC2へのデプロイ
各ステージの実行内容
Sourceステージ GitHubへのPushを検知してパイプラインに流し込み (流し込み先は自動的に S3?)
Deployステージ Deploy先のインスタンスを指定 EC2以外にも、AutoScaling、 オンプレも可能
CodeDeploy Amazon EC2 Deploy先にするEC2にはタグ付けしておく
Deployで何をしたいか? 1. 今動いているPythonのプロセスをKillする 2. ソースコードを配置する 3. `python main.py &`みたいな感じでPythonの実行する 実現できたらダウンタイムほぼ無し!
どうやって実現するか
None
ルートに置いたappspec.yml! このファイルを読み込んで CodeDeployは色々とDeployしてくれる • ソースファイルの置き場所 • パーミッション • 実行すること などなど様々なことを指定できる
中身 リポジトリ全体を指 定の場所に
中身 BeforeInstall.shを ファイルのコピー前に
中身 ApplicationStart.shを ファイルのコピー後に
中身 BeforeInstall.sh 不要なファイルの削除や設定ファイルのコピー
中身 ApplicationStart.sh すでに走っているプロセスの Killや新規プログラムの実行
まとめ • DiscordBotはPythonで記述可能 • EC2にPythonを動かす用のサーバを用意 • GitHub→S3→EC2へのDeployをAWS CodeDeploy + AWS
CodePipelineで実現 ダウンタイム無しでBotのDeployを実現!
おまけ ?
おまけ バグがあります • Killコマンドでプロセスを殺せていない
おまけ バグがあります • 修正めんどくさい(マージリクエストを送らないといけない )ので運用でカバーしてます ◦ デプロイ後に潜って手動で Kill ◦ 個人利用ならこれで十分
次回はBotの実装の話をします
補足 hooksのライフイベント
補足:クラウドの課金額
補足:クラウドの課金額
補足:クラウドの課金額 全て無料試用範囲内!!! デレマスの課金額の (不定)倍