目次

はじめに

あなたのサービスをたくさんの人に届けよう!
対象読者
この本を読むとわかること
この本の構成

第1章 DiscordとDiscord Bot

1.1 ゲーマーに大人気!ボイスチャットサービスDiscord
1.2 Discord Botの正体
1.3 Discord Botで「Hello, world!」

第2章 shovel - 日本語読み上げDiscord Bot

2.1 50万人が使う読み上げBot「shovel」
2.2 shovelの機能
2.3 shovelユーザーの声

第3章 shovelのシステム構成

3.1 shovelのシステム全体構成
3.2 shovelの必要スペックは? サーバー性能公開
3.3 shovelを助けるミドルウェアたち
3.4 shovelを見守る監視体制を実現するツール

第4章 shovelのソフトウェア構成

4.1 shovel本体を俯瞰する
4.2 cog - shovelを構成する歯車たち
4.3 shovelの機能を請け負うモジュール
4.4 多くの外部パッケージがshovelを支えている
4.5 shovelが使う外部アプリケーション

第5章 大勢に使ってもらえるサービスを目指して

5.1 たくさんの人にサービスを使ってもらうには
5.2 shovelの戦略 - ユーザーを逃がさない!
5.3 システムの品質について考える
5.4 開発プロセスを俯瞰する

第6章 品質を上げるための設計のポイント

6.1 ユーザビリティを考える
6.2 ユーザビリティの実例 - shovelの工夫
6.3 異常系に漏れなく対応しよう
6.4 漏れた異常系を後からみつける
6.5 ログはBotを良くするヒントの宝庫!
6.6 アプリケーションログはBotの活動日記

第7章 開発環境 - 開発効率と品質をあげる礎

7.1 コードを書き、動かす環境を整えよう
7.2 環境を3系統用意しよう
7.3 環境をつくる手順
7.4 コード変更なしに環境を切り替える方法

第8章 実装 - いざ、コーディング

8.1 実装の流れ
8.2 リファクタリングで保守性を担保!
8.3 保守性を高める実装
8.4 ユーザビリティのための実装

第9章 テスト - コードの品質をまもる、最後の砦

9.1 テストとは何なのか
9.2 テストを設計しよう
9.3 テストを実施しよう

第10章 Discord Botのテスト自動化

10.1 テスト自動化とは
10.2 Botのテストに欠かせないモジュール「jishaku」
10.3 テスト自動化の実装方法を紹介!

第11章 アップデートのための作業

11.1 アップデートリハーサルをしよう
11.2 本番アップデートの実施
11.3 「2系統アップデート」でダウンタイム大幅短縮!

第12章 Botの土台作りのダイジェスト

12.1 どこでBotを動かすか検討しよう
12.2 サーバーのセットアップをダイジェストで紹介!
12.3 DBでデータを永続化しよう
12.4 バックアップ設定

第13章 セキュリティ - Botとユーザーを守る壁

13.1 知らないうちに犯罪に加担しないために
13.2 サーバーのセキュリティを固めよう
13.3 Botを狙う攻撃手法を知ろう

第14章 監視 - 24時間みまもり体制

14.1 みまもり+非常アラート=監視
14.2 何を監視する?
14.3 監視に役立つツール
14.4 Botをツールから監視できるようにしよう

第15章 バックアップ - 安心を確保する

15.1 バックアップの必要性
15.2 さまざまなバックアップ
15.3 バックアップの作法

第16章 運営 - ユーザーと接しよう

16.1 情報発信の拠点をつくろう
16.2 ユーザーとどう関わるか考える
16.3 サービスを段階的に公開するメリットとデメリット
16.4 サービスの印象をデザインする
16.5 効果的な広報でBotを知ってもらおう
16.6 Botに機能を追加する
16.7 Botから機能を削除する - 破壊的変更
16.8 動作詳細ログでアプリケーションを分析する

第17章 Bot運営の金銭面

17.1 サービス運営は儲かるのか?
17.2 サービス運営で出ていくお金
17.3 サービス運営で入ってくるお金
17.4 shovelのお金事情

おわりに

あとがき - 個人開発のよろこび
謝辞

はじめに

あなたのサービスをたくさんの人に届けよう!

 筆者は2019年5月、日本語読み上げDiscord Bot「shovel(シャベル)」を一般公開しました。

 「shovel」を一般公開すると決意したのは2018年9月。当時の筆者はBtoBソフトウェア開発経験はあれど、インフラから運営まで一手に担当する個人開発サービス運営の経験は皆無。技術面から運営面までわからないことでいっぱいでした。本当に多くの壁にぶち当たりましたが、そのたびに調査したり有識者に助言を受けたりすることで、なんとか乗り越えてきました。当初は想像もしていませんでしたが、shovelは公開から1年間で50万人のユーザーに利用してもらえるまでに成長しました。

 本書はその経験を題材・実例として「サービスを作り、一般公開し、知ってもらい、運営する」うえで必要なこと(つまり、2018年9月当時の筆者が知りたかったこと)についてまとめたものです。

 本文中の実例は、Discord Botで説明します。ですが、フロントエンドがDiscord Botであるというだけで、Discord以外のBotやWebサービスなど、さまざまなサービスと共通である内容も多く含まれます。もちろん、Discord Botを公開したい方にとっては、すぐに実用に供することのできる有用な情報となるはずです。

 「作った! 動いた! そこまではできたけど……」

 そんな個人開発者が、もう一歩踏み出す場面で、この本が道しるべのひとつになることを願います。

 2020年8月 北浦 望

対象読者

 ・プログラミング、サービス運営に興味がある人

 ・日本語読み上げDiscord Bot「shovel」に興味がある人

 ・Discord Botを本格的に運営したい人

 ・サービスを作ってみたが、公開するのになんとなく躊躇している人

 ・サービスを公開しているが、これでいいのか不安な人

 ・サービスを公開したが、思うようにユーザーが増えなかった人

この本を読むとわかること

 ・サービスをたくさんの人に使ってもらう方法

 ・サービスの土台となるサーバー設定

 ・サービスを攻撃から守るセキュリティ設定

 ・よいサービスを作るための開発プロセス

 ・サービス運営の障害と乗り越え方

 ・Discord Bot「shovel」の設計

この本の構成

 第1部では筆者の個人開発サービスであるDiscord Bot「shovel」を解剖し、システム構成とコードの内部構造を説明します。Discord Botに興味がない方も、第2部以降を理解するために、軽く目を通しておいてください。第2部では、よいBotを作るための考え方と、開発プロセスについて説明します。第3部では、shovelの稼働率99.98%がどのように裏打ちされているかをお見せします。第4部ではshovelの運営とお金のことについて、個人開発で限られたリソースをどのようにやりくりしているか、工夫していることをお話します。

第1章 DiscordとDiscord Bot

 この章では、本書のさまざまな解説の例として扱うDiscord Bot「shovel」についての理解を助けるために、Discordというサービスについて簡単に説明します。また、discord.pyを使い、Pythonで簡単なDiscord Botを作ってみます。すでにDiscordやdiscord.pyを知っている方は読み飛ばしていただいてかまいません。

1.1 ゲーマーに大人気!ボイスチャットサービスDiscord

1.1.1 ゲーマー向けボイスチャットサービス

 Discord(ディスコード)は、2015年に開始したゲーマー向けのボイスチャットサービスです。公式ウェブサイトによると、ユーザー数は全世界でなんと2.5億人とのことです。基本的な機能はすべて無料で利用できます。ゲーマーの間では、オンラインプレイでボイスチャットをする手段として、第一の選択肢としてあがるサービスです。ボイスチャットがメインのサービスではありますが、テキストチャットも利用できます。代替ツールとしては、Skype、LINEなどが挙げられます。

1.1.2 Discordの仕様

 Discordでは多彩なコミュニティを作ることが可能です。任意のメンバーを集めたクローズドなコミュニティから、コミュニティに参加するための招待URLを公開しているオープンなコミュニティまで、Discordにはさまざまなコミュニティがあります。

 Discordでは、このコミュニティを指して「サーバー」と呼びます。ユーザーが「サーバー」を作成し、そこに他のユーザーを招待します。しかし「サーバー」という名前を本書で使うと、一般名詞の「サーバー」と混同してしまいややこしいので、本書では、Discordの開発者用公式ドキュメントに倣って「Guild」と呼ぶことにします。

 Discordユーザーは、100個までのGuildに参加できます。それぞれのGuildにはいくつかの「チャンネル」があります。テキストチャットは「テキストチャンネル」、ボイスチャットは「ボイスチャンネル」で行います(図1.1)。ボイスチャットは「誰かに電話をかける」というような一般的な通話とは異なり、ボイスチャンネルに入室し「誰かが参加するのを待つ」または「すでに始まっている通話に参加する」というスタイルで行います。

図1.1: Discordの仕様

1.1.3 Discord Botについて

 TwitterやSlackと同じように、DiscordでもBotを作ることができます。会話ログの保存をしたり、特定単語に反応するような単純なBotから、Botを通じてRPGやカードゲームがプレイできるようなBotまで、さまざまなBotが存在しています。つづいて、Botの仕組みについて詳しく解説します。

1.2 Discord Botの正体

1.2.1 Botはどこで動いているか

 そもそもBotとは何なのでしょうか。まず、Botではない通常のユーザー(人間)がDiscordを利用する場合の接続方法について見ていきましょう(図1.2)。ユーザーは、光回線や4G回線でインターネットに接続された端末(スマートフォン、PC)を持っています。この端末から、アプリやWebブラウザを通じてDiscordにアクセスしています。

図1.2: Discordのアプリから接続する通常ユーザー

 では、Botはどうでしょう。人間が操作するのではなく、プログラムだけがDiscordに接続するのがBotです(図1.3)。Botには普段見慣れたDiscordアプリのような操作画面は通常存在しません。黒い画面でコマンドをタイプして動かすプログラムが、Botを操作します。

 たとえば誰かのテキストチャット発言をキャッチし、それにテキストで反応するようなプログラムを書くと、Discordのテキストチャットで反応するBotができあがります。

図1.3: Discordに接続するBotプログラム

1.2.2 Discord Botアカウントとは

 Discord Botを動かすには、まずDiscordのWebサイトでBotアカウントを作成します。すると、トークンという文字列が割り振られます。BotのプログラムはそのトークンをAPIサーバーに渡すことで、Botとしてログインできます。トークンは、いわばIDとパスワードがセットになったようなものです。

1.2.3 Botが稼働するために必要なもの

 上記の説明のとおり、Botは最低限「プログラムを動かすコンピューター」と「インターネット回線」と「トークン」があれば、家庭用のPCでもどこでも動かすことができます。次の節では、あなたのPCで実際にBotを動かしてみましょう!

試し読みはここまでです。
この続きは、製品版でお楽しみください。