DiscordAPIでラグナロクマスターズのチーム管理ツールを作りました

この記事は[Discord Advent Calendar 2019](https://qiita.com/advent-calendar/2019/discord
)の11日目の記事です。

ごきげんよう🌸
DiscrodAPIを使ってラグナロクマスターズのチーム管理ツールを作成した @wakanayoshizawa です。

当記事では、ツールのコンセプトや構成、運用について、サービス開発について大切だと感じたことをご紹介します！

# ラグナロクマスターズとは
ラグナロクオンラインが2002年に公開されてから17年経つ2019年、スマホ対応のラグナロクマスターズ（以下ラグマス）がリリースされました！
<a href="https://ragnarokm.gungho.jp/"><img width="1119" alt="ラグマストップ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/d00cba8e-97b1-ff62-b62f-fe5fbd04efb2.png"></a>

昔は2Dだったキャラクターも3Dとなり、「ラグナロクをを知るものたちよ、今こそここに来たれ！」というゲームです。
まだ遊んだことがない方はラグマスで遊びましょう🙋‍♀️

# ゲームコミュニケーションはDiscord時代
さてさて近年、ゲームのコミュニケーションやコミュニティ運用は、Discord全盛と言っても大袈裟ではないですよね。
<a href="https://discordapp.com/"><img width="820" alt="Discordトップ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/b5d94426-9f8f-f24f-d535-ec77234cf302.png"></a>

ラグマスでも多くのギルドがDiscordを利用しています。
こういった現状を踏まえ、**Discordを使ったラグマスギルドをお手伝いするためのツール**を作りました！

# 「カプラのラグマスギルド管理」公開
サービス「<a href="https://ragmas.info">カプラのラグマスギルド管理</a>」のコンセプトはギルドマスター支援としました。
ラグマスのギルドマスターを助けるサービスを目指しています。
<a href="https://ragmas.info"><img width="1142" alt="カプラのラグマスギルド管理" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/e96fd645-e062-3b55-ca5c-c9145e9fafd3.png"></a>

## なぜギルドマスターを助けるの
実は、**ラグマスのギルドマスターはとても多忙なのです!**

ラグマスのギルドマスター（以下ギルマス）は多くの仕事を抱えています。
一例を挙げると以下のようなものです。

- 攻城戦メンバー出席管理
- 攻城戦パーティー調整
- メンバー勧誘やギルドPRなどの情報発信

これらは通常Discordや、グーグルスプレッドシート、Twitterなどで行われています。
ギルマスは単にゲームを遊ぶだけでなく、これら複数のツールを駆使しながらギルドメンバーが楽しく遊べる環境づくりに貢献しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/4691f789-89f7-a817-e274-a9dc25874ed5.png)

**実はギルマスを続けるのってすごく大変じゃないですか？？**
なんとかギルマスを助けなくちゃという気持ちでサービスを開発しました。

## Discordのイベント出欠機能をリリース
2019年9月、「カプラのラグマスギルド管理」をリリースしました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ラグマスのギルド管理支援サービスを公開しました💮 <a href="https://t.co/pOhW4no9qS">https://t.co/pOhW4no9qS</a><br><br>ギルマスのメンバーステータスやGvG出欠をDiscordボットを使って応援します！今後も随時アップデート予定です！<a href="https://twitter.com/hashtag/%E3%83%A9%E3%82%B0%E3%83%9E%E3%82%B9?src=hash&amp;ref_src=twsrc%5Etfw">#ラグマス</a> <a href="https://twitter.com/hashtag/%E3%83%A9%E3%82%B0%E3%83%9E%E3%82%B9%E3%82%AE%E3%83%AB%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#ラグマスギルド</a></p>&mdash; わかなだょ〜@ラグマスリネレボ (@wakanadayo_game) <a href="https://twitter.com/wakanadayo_game/status/1169257470562168834?ref_src=twsrc%5Etfw">September 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のような機能を備えています。

- Discordボットからの対話コマンド機能
- Discordからのメンバーインポート
- アカウント登録機能
- イベント出欠機能

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こんなかんじで、リーダーが管理画面からDiscordの部屋と連携してイベントを立てると、メンバーがDiscordから返事をするとGvGの出欠が取れたりします🌟<a href="https://t.co/XPClL1BJNq">https://t.co/XPClL1BJNq</a> <a href="https://t.co/puBpkGC4s6">pic.twitter.com/puBpkGC4s6</a></p>&mdash; わかなだょ〜@ラグマスリネレボ (@wakanadayo_game) <a href="https://twitter.com/wakanadayo_game/status/1169260916396834819?ref_src=twsrc%5Etfw">September 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

とにかく公開したかったので最低限の機能という感じで公開しました。

サービスの売りとしては、ギルドメンバーが使っているDiscordからボット対話ができるのでスプレッドシートより学習コストが少ない点、アカウント機能があるためスプレッドシートの公開運用よりもセキュアであるところです。

## 構成
ユーザーは２箇所からサービスにアクセスすることができます。
Discordからはボット経由で、ウェブからはブラウザで「カプラのラグマスギルド管理」にアクセスできる仕組みです。
<img width="812" alt="カプラのラグマスギルド管理の構成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/f9f0f4bf-1a5c-49e2-9ba0-32864ca40d18.png">

Discordのボット側は[discord.py](https://discordpy.readthedocs.io/ja/latest/)、サーバーサイドはLaravelからMySQLをみています。
LaravelからDiscordを叩きたい場合は、[RestCord](https://restcord.com/)を使用しました。

フロントはBootstrapです。

### 開発の感触
Discordボット開発では、discord.pyがすごくいいです。
discord.pyでなんでもできるので不自由しないはずです。

他にはLaravelの権限でGateが便利でした。権限追加がとてもやりやすいです。

# リリース後の運用
リリース後は運用フェーズになります。
幸運にも初期からいくつかのラグマスのギルドにご利用いただけました。

初期から**ユーザーに使っていただいたことが、サービスが進化するきっかけ**となりました。

## リリース直後は問題山積
リリース日を急いだこともあり、リリース後は問題山積みでした。

- バグ報告
- ユーザーからの要望
- 仕様変更部分の修正

リリース後すぐに「仕様をぼんやりしたたままリリース日のラインだけを引いた開発」、を進めたツケを払うことになりました。

テストできなかった箇所やリリース直前の仕様変更部分でのバグ対応や、ユーザーさんからもっとこうして欲しいという意見を次々といただき対応に追われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20557/a4f87eb2-0592-455f-97ea-2bb4f61cd148.png)

一時期は1日1件ペースで問い合わせをいただくこともありました。
サービスを公開していると、アプリケーションやインフラだけでなくUIもテキストなどの説明文も全てがユーザーのUXに関係してきます。十分な対応がない箇所は全てが脆弱性になる可能性があります。

しかし全ては身から出た錆であり、ギルマスとラグマスユーザーのためには対応しなければなりません。

## ユーザーのおかげでサービスがどんどんよくなる
「<a href="https://ragmas.info">カプラのラグマスギルド管理</a>」ではユーザーさんから要望をいただき新機能がどんどん追加されています。
最近では、ボットからDiscordのリアクションAPIを利用してPOSTできたりと少しずつバージョンアップを重ねています。

サービスが良くなってくると Twitter でご紹介いただけるようになった気がしています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">わかなさんがまた更新してくれました<br>カプラのラグマスギルド管理<a href="https://t.co/smIIeO06G2">https://t.co/smIIeO06G2</a><br><br>これまでスポット管理には特化していた為、定期イベント管理は少し苦手でしたが、リセット機能を使うことで、イベント設定の使い回しが出来るようになりました。<br><br>どんどん使いやすくなってますね<a href="https://twitter.com/hashtag/%E3%83%A9%E3%82%B0%E3%83%9E%E3%82%B9?src=hash&amp;ref_src=twsrc%5Etfw">#ラグマス</a> <a href="https://t.co/vTSl4P2gtn">https://t.co/vTSl4P2gtn</a></p>&mdash; あにすま@ラグマス神々の黄昏 (@anisuma_tawapri) <a href="https://twitter.com/anisuma_tawapri/status/1195906236585148422?ref_src=twsrc%5Etfw">November 17, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

食器洗い乾燥機と言われました🙆‍♀️

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">4) イベントの登録<br>管理画面でこんな感じに入力<br><br>5) Discordで出欠確認<br>「イベント」コマンドでbotが登録イベントを発言。スタンプを押すだけ<br><br>6) リマインドは「確認」コマンド<br><br>まずは出欠確認の部分だけだけど、便利すぎて食器洗い乾燥機を思い出したよ <a href="https://twitter.com/hashtag/%E3%83%A9%E3%82%B0%E3%83%9E%E3%82%B9?src=hash&amp;ref_src=twsrc%5Etfw">#ラグマス</a> <a href="https://t.co/LW5ZSInJVZ">pic.twitter.com/LW5ZSInJVZ</a></p>&mdash; くーろん@MAFiA (@Cloner_RO) <a href="https://twitter.com/Cloner_RO/status/1203849225190010880?ref_src=twsrc%5Etfw">December 9, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

正直な話、リリース時を振り返ると機能が少なく、わかりにくい箇所や使いにくいところばかりでした。
そんな不十分なツールでも使ってくださったユーザーのみなさんに本当に感謝しかないです。

この感謝を胸に、今後もギルマスを支援できるツールを目指し真剣に向き合っていきます。

# 最後はサービス開発について
結論からいえば、サービス開発で大事なことは２つあると思いました。

- まずはリリースする
- 問い合わせ窓口を用意する

## まずリリースする
サービス開発では、「**まずリリースしろ**」とよく言われます。
これは本当にその通りだと感じました。

リリースするからことによって自分の考えが足りなかった箇所や思い込みに気づかされます。
サービスを**リリースするだけで、多くのことを学ぶことができる**からです。

## 問い合わせ窓口を用意する
あとはユーザーさんから連絡をもらうための**問い合わせ窓口を設ける**ことが大事です。窓口はTwitterでもなんでも大丈夫です。ユーザーさんから意見をいただければ励みになり、開発が進みます。

ユーザーさんが開発の後押しをしてくれるのです。

# Discordボットいいですよ
この記事を読んで、Discordボットサービス開発に興味を持った方がいたら、ぜひリリースしてください。
ただし問い合わせ窓口は必ず用意しましょう。

P.S.
Discordはすごいサービスです。Qiitaをご覧のみなさんにはSlackやChatworkが有名かもしれませんが、Discordいいですよ。APIや権限周りは綺麗で使いやすいと感じました。

Discordボットを作ったことがない方がいたらぜひ試して欲しいと思います！

# 商標
© Gravity Co., Ltd. & Lee MyoungJin(studio DTDS). All rights reserved.
© GungHo Online Entertainment, Inc. All Rights Reserved.