🐥

初公開の制作物であるDiscordBotが1年で3万人近くに使われて嬉しい話

2022/08/08に公開

はじめに

Zennでは初投稿、かふです。
一番伝えたいのはタイトルのまま。
本文は一年を振り返ったBoomBotの軌跡と一年間の経験から思ったこと。
『何があって・何を学び・何を反省したのか』この辺りを殴り書きした記事。
天狗にはなってないと自分では思いたいですが、多分なってます。大目に見てください。

BoomBotの軌跡

作ったきっかけ

21年7月中旬。
何故かDiscordBotを作りたくて、「何かいい案ない?」と友人に聞いてみたところ「チーム分けしてくれるBotが欲しい」と言われたのがすべての始まり。
Valorantをよく遊ぶようになり、特に有志が集まり自由にチームを組んで対戦できるカスタムゲームに熱中していた時期。

この時は、公式のチーム分け機能である『オートバランス』が実装されておらず、先駆者様のValorant用チーム分けBotは存在していたものの、招待可能数の上限に到達して更新が止まっている様子。

チーム分けするだけなら実装難しくなさそうだし、自分も使えたら便利だし作っちゃお~と友人の案に乗っかって作り始めることに。
ちなみに、この時点では一般公開する気は微塵もなく身内のサーバーで使うことしか想定していませんでした。

試作品が完成


これは自分で覚えてなかったのですが、最初期の接頭辞はv.じゃなかったようです。
「先駆者様のValorant用チーム分けBotより便利にしたろ」とか考えて、コマンド1回でチーム分けが行えるという構想はこの時からありましたが、方法が力づく過ぎて今見ると面白い。


チーム分け
しばらくこれで運用していましたが、このBotには目に見えて問題点がありました。

人数が増えるとコマンドが長くなる上に打ちづらく、扱いが面倒くさいです。
そして、なんといってもコマンド使用者の主観でメンバーの強さを相対的に決めてしまうのは、人間関係の悪化が起こってもおかしくないです。(起きなくて助かりましたが)

一週間ほど経ってから作り直すことに。

試作品2号が完成


実力を毎回設定するのではなく、ランクを登録してチーム分けの際に参照にする方式へ変更。

登録したランク情報は保存され、一度登録すればサーバーを超えて使いまわせる便利なBotくんに進化。身内のサーバーといっても3つくらいのサーバーで使う上に、そのメンバーも似通っていて、ランク情報が使いまわせることがかなり便利だった。

登録際の不正なランク名は『ランク無し』として、考えられる表記ゆれは拾って登録できるようにしています。(偉い)

本当はRiot公式が提供するAPI使ってランクのデータ取得して、最新のランクデータ使えればランク情報更新の必要もなくなって楽そうだな~とか思っていましたが、使用するための制約がなんだか面倒くさそうってことで使うのは早々にやめました。


もう原型ができてる

メンバーはコマンド使用者が入室中のボイスチャンネルから取得する方式に変更。
カスタムゲームで遊ぶときは

1つのボイスチャンネルに集まる

チーム分けしたら攻防別のボイスチャンネルに移動

試合が終われば元のボイスチャンネルに集まる

が基本的な動きだったこともあり、煩わしさのない最適な変更だと思います。

取得できたメンバー数が10人を超えていたら案内を出したり、指定メンバーを除外してチーム分けができる機能が実装されてたりと、現状のBoomBotの原型はもうできていたようです。

一般公開へ踏み切るまで

BoomBotの原型が完成して友人のサーバー内だけで使っていたが、これが便利すぎた。
カスタムゲームを遊びに来る初対面の方も「凄い」「便利」と言ってくれた。

案を出してくれた友人に「公開したら?」と言われて、ちょっと悩んだが公開することに。
というのも、未認証Botの招待数上限を知っていたのでどうしようかと思いつつ、上限に到達するにしてもそんな一日二日でいかないだろうし、なりそうになったらその時考えようという浅い考えでした。

公開にあたって、接頭辞が?のままだと既存のBotと被る可能性があるため、Valorantの頭文字とドットを合わせてv.に変更。helpコマンドの説明を真面目に書いたり、一部のコマンドではembedを使用するようにするなどしてbotらしさを仕上げていき


接頭辞が変わってたりembed使ってる

趣味で契約してたさくらのVPSで環境作って、いざ公開へ・・・

一般公開しちゃった!

21年8月1日の正午手前。

自分が作った制作物を初めて一般が使える形で公開しました。 (名目上はOpen-βとして)

せっかくなら使って貰いたいので仲のいい人たちに媚びて拡散してもらいました。

予想外の反響

当日終了時点で招待されたサーバー数は30にも到達しておらず、そんなもんだよねとか思っていたら、翌日に急激にRTやいいねが増え始め・・・

1日でBotの招待数上限引っかかっちゃった!!🤯🤯🤯

この後、Bot認証は通って招待数上限撤廃されましたが、一番RTされていたタイミングで招待できない状況というのは、ユーザー獲得のチャンス逃したなぁと反省しています。

強すぎるライバル登場


いきなり呼ばれたかと思ったら衝撃の事実を教えられる

一般公開から9日後の21年8月10日。
公式のチーム分け機能である『オートバランス』が実装されることが発表されました。ランクではなく内部レートを参照するため、より厳密に平均的なチーム分けができるみたいです。

公式?競合として強すぎないか?自分のBotの寿命短かったな・・・
「こんなことあるんだ」って本当に驚きました。

でもこの後もずっと普通にBoomBotが使い続けられていることが分かって良かった。
公式のチーム分け機能がそこまで使われていない背景には、平均を取るのが厳密すぎて組み合わせが限られすぎてるというのはあったのかも。(詳しく検証してないので知らない)

安定期突入

一般公開から2ヶ月程が経ち、21年10月。
ランク登録済みのユーザー数は1,500人を超え、最初の宣伝ツイートがたまーにRTされるレベルになり、気になる部分をちょっとずつ改良していったことで、チャットサポートの回数も減っていき、一般のBotとしてかなり安定してきてやることもなかったため話すことがない。

メッセージコンテンツの特権インテント化を知る

翌年、22年1月。
ランク登録済みのユーザー数が6,000人を超える。

『認証済みのBotは申請しないと、4月から疑似コマンドが使用不可になる』という情報をこの時初めて耳にする。(この公式案内自体は一般公開した日より前に公開されていた)

メッセージを読み取る必要がある疑似コマンドを使用せず、スラッシュコマンドで実装を行うことがdiscordが求めたものだったようですが、この時期はdiscord.pyが開発終了されており、Pythonで書くとするなら有志の拡張ライブラリを使う必要がありました。しかし、なんだか使うのが嫌だったので何もせず。

とりあえず、コマンドの接頭辞を./に変更し、v.を使用した場合には接頭辞が変わっていること、helpコマンドとteamコマンドを使用した場合には、今後スラッシュコマンドに移行する予定であると表示するアナウンスだけ出しておきました。

お騒がせしました

ちなみにこの後特権インテント化までの猶予は、22年の8月終わりまで伸びた。

スラッシュコマンドへ移行の為に

22年4月。
ランク登録済みのユーザー数が15,000人を超える。

何を使ってスラッシュコマンドへ移行しようかをうだうだと決めかねている時期。
結局何もしていない。実際には何か起きていたけどこの章で書くことではないので省略。

なんだかんだ乗り切ってBoomBot-v2へ

22年7月。
2ヶ月前にdiscord.pyが開発再開していたので、スラッシュコマンドへ移行するために動き出して、ドキュメントを読み漁ったりしながら実装を完了させる。
そして、1周年を迎えると共に、BoomBot-v2へアップデートされた。

ありがたいことにこの記事を書いている時点で、招待済みサーバー数は3,420サーバー、ランク情報登録者数の合計は29,535人。

当初のたくさんの人に使って貰うという欲求も満たせて感無量です。
今後ともBoomBotをよろしくお願いします。

この経験から何を思ったか

ニーズを掴み取るのはちゃんと強い 👍

名無しが初めて公開したものがこんなにも多くの人に使ってもらえているのは、ちょうど空いていた部分のニーズに応えられたという要因が大きいと考えています。
一般公開が一歩遅れていたら公式のチーム分け機能に全部持っていかれていたとも思います。
友人に「何かいい案ない?」と聞いた結果、大衆が求めていたニーズが返ってきたという。
(公開する気は元々微塵もなかったため、内輪用の一発ネタ的なBotを作るつもりだった)

人望・人との繋がりは大事 👍

自分に人望が無いと言いたいわけでは全くないですが、いつも同じ人とばかり遊んでいるため、顔が広くないです。これでは宣伝をしたところで多くの人に内容を周知してもらうことは大変難しく、今回ばかりは例の友人の顔が広かったので適当に広めてもらいました。
(本当にありがとう)

宣伝は難しい 👍

『他より目に入って、目障りでなく、一目で内容がわかる。』
今回はTwitter上での宣伝だったため、これらを140文字以内にまとめる必要があります。
いわゆる"バズ"系のツイートってパッションを感じるので、普段雑なツイートしかしていない自分にはどうすればいいのか、顔文字使うくらいしかわかんなかったです。

『どの層に向けての発信で、一番伝えたい内容は何なのか』
ハッシュタグも可能な限り使い、いろいろ試行錯誤しながら最終系を考えました。

しかし、今になると後悔する部分があり、それは招待リンクを直貼りしたこと。
ツイートして広まってしまったら最後、情報をそれ以上更新することができず、宣伝ツイートに追加の案内をリプライでぶら下げても、ユーザー全員に届くことはありません。

専用のページなどを用意し、そこを介して招待させる形にするべきでした。
ちなみに今はHPができてる(https://gattxxa.github.io/boombot/)

個人でも人を喜ばせるものを作れる 👍

上を見たらキリがなく、まだまだヒヨっ子の自分ですが、アイディア次第では個人の力でも多くの人を喜ばせるものを作れることをしっかりと実感しました。
『無ければ自分で作ればいい』これはまだまだ自分のモットーになり続けると思います。

実装の大変さは大衆の評価に影響しない 👍

BoomBotを作るのは全くと言っていいほど大変ではなかったです。
特徴である『戦力差を考慮したチーム分け』も片手間にかけるような内容でしかないです。

それでもこんなに多くの人に使って貰えて、嬉しい言葉もたくさん頂きます。

雑に実装すればいいって話ではなく、必要なものを必要な量だけ実装すりゃいい。
それでユーザーのニーズをしっかり満たせているならオッケーという話。

共同開発の失敗 👎

discord.pyが開発終了中であるにも拘らず、スラッシュコマンドへの移行が必要と判明した時。
「TypeScriptの勉強がてらdiscord.jsに乗り換えないか?」と話が進み、フォロワーと一緒にペアプロすることに。

フォロワーのおかげで(というか自分は1行も書いてない)スラッシュコマンドで動くBoomBotが一瞬で完成しましたが、AWSのサービスを使ったり、WebHookでホニャホニャ~と自分には理解できない何かすごいものになってました。

これはあなたの作品ですか?と聞かれたら、100%「NO」としか言えないです。
それで自分にやる気がなかったのか、共同で作り始めたBloomBot(開発コード)は本番環境で運用されることなく、そのまま放置されました。

結局、discord.pyは22年5月に開発再開され、開発バージョンであるv2.0.0αを用いて1人でスラッシュコマンドへの移行実装を済ませました。現在動いてるものはこっちです。

ペアプロの失敗例そのものを経験しました。
技術力の差、その分野への理解度の差、やる気の差、情報の共有不足。
また機会があるなら、彼のプロジェクトに自分が参加する形のペアプロがしたいですね。
自分が育ててた金魚がアリゲーターガーになったらびっくりしちゃうので・・・。

開発者としての在り方 👍

『開発者Aが作った、制作物A』と『制作物Aを作った、開発者A』は意味が違い、前者は開発者そのものが求められており、後者は制作物そのものが求められていると考えています。

Apple(開発者)が新製品を発表すれば盛り上がるように、チーム分けBot(制作物)があればよくて開発者は別に誰だったとしてもよかったように。

開発者としての在り方は、前者であるほうが話題性もあってお得ではありますが、自分はまだまだ後者の存在であると常々思わされます。『求められている人材』の枠に収まれるように精進します。

設計や計画の甘さ 👎

BoomBot-v1は試作品のコードを流用しているため、本当に汚いです。
人に見せられるもんじゃない。

幸いなことに(?)バグ報告は募集していても報告されたことは一度もなく、今回の移行の時までしっかりと動いてくれていたので、ぐちゃぐちゃなコードに頭を抱えながらバグ修正を行うことはありませんでしたが、思い返すとなんでこのコードを本番に上げようとおもったんだろう。

BoomBot-v2からは見せられるように書いたので、オープンソース化しました。
(https://github.com/Gattxxa/BoomBot-v2)

想定を超える速さで利用者が増えて一時的に招待不可能になったこと、ギリギリまでスラッシュコマンドに移行しなかったこと、コマンドの接頭辞を本番運用中に変更してしまうなど、後々のことを考えての設計や計画ができていなかったのはお恥ずかしい話です。

ちなみに今一番困っているのは、Botのデフォルトネームがv.help / Boom Botであること。
誤解招くし名前変えよ~と思ったら認証済みBotはそう簡単に変えられないらしい!(泣)

ユーザーの目線に立つとは 👍

ユーザーは開発者の思っている以上に変な使い方をしてきます。
特に多かったのは初期の頃、v.rank周りでよくミスをしているのが目立っており、案内としてはv.rank [rank_name]と書いていたのですが、v.rank [ゴールド1]で動かないというヘルプが来た時には椅子から転げ落ちた。
開発者目線で説明を書いてしまうとこういった事例を招くのだなと。

サービスを使うユーザーが、説明を見てサービスの仕様についてどれだけ理解できるのか、そもそも説明を見ないようなユーザーはどうすればいいのか。
今後はそういったことも考えながら実装していく必要があるなと思いました。

収益の確保 👎

BoomBotを運営して確保できた収益は0円です。
そもそもが利益を目的にしていないし、BoomBotに関する寄付の募集なども一切行っていないので当然なんですが。(今後もする予定はない)

いつか、どこかの機会、別のプロジェクトでユーザーに不快な思いをさせずに制作物から収益を発生させるうまいやり方を見つけ出したいところです。

サービスを運営するという責任 👍

これだけ多くの人に使われるとなると、飽きたからや~~~めた!!!はもうできない。
できるところまでは提供を続ける心意気が必要だと感じます。

その上、BoomBotでは機密性のある情報は保管していないとはいえ、その辺りの扱いと保護にも気を付けなければならないと、なんかいろいろ気づかされました。

個人でやっているからこそ責任が全部自分自身にかかってくるので・・・。

創作は楽しい 👍

好きな業界で消費者で居続けるのではなく、喜びを与えることのできる生産者に回るのはとても良いことです。
気が向いたときに気力がある限り、分野問わず創作はずっと続けていきたい。

さいごに

まだなんかありそうな気がしますが、薄いこと書いても仕方ないのでこの辺にしておきます。
ここまで読んでくださってありがとうございます。

Discussion