> ImpureSilver11_
← Blog一覧

2026-06-29 00:04:31

ClaudeでポケモンDiscord Botを作った

最近DiscordのサーバーでポケモンSVの話をすることが増えてきて、「あのポケモン種族値どのくらいだっけ」ってなる場面が地味に多いんですよね。毎回ブラウザ開いて調べるのも面倒だし、それならBotを作ってしまえばいいなぁと思って作りました。

せっかくだからClaude Codeと一緒に作ってみたんですが、これがめっちゃ良かった。

作ったもの

2つのスラッシュコマンドを実装しました。

/pokemon_stats {ポケモン名} で種族値を表示します。こんな感じで出てきます。

No.6 リザードン
HP   ██████░░░░░░░░░  78
攻撃  ████████░░░░░░░  84
防御  ██████░░░░░░░░░  78
特攻  ████████████░░░ 109
特防  ████████░░░░░░░  85
素早  ████████████░░░ 100
タイプ: ほのお / ひこう 合計: 534
特性: もうか 夢特性: サンパワー

バーグラフ付きで表示されるのでパッと見でバランスがわかります。

/pokemon_card {検索ワード} はポケモンカードの画像を検索して貼ってくれるやつです。ポケモン名だけじゃなくてトレーナー名とかでも一応動きます。

/pokemon_stats の実装

種族値はBingやPokeAPIを使うことも考えたんですが、シンプルにローカルのJSONファイルに全ポケモンのデータを持たせる方針にしました。APIを叩くと通信が挟まるし、外部サービスに依存したくなかったので。

バーグラフの実装がちょっとお気に入りで、'█' * (v / 10) + '░' * (15 - v / 10) という1行で書いてます。種族値を10で割った数だけ塗りつぶして、残りを空白ブロックにする。シンプルだけどDiscordのコードブロック内だと等幅フォントで表示されるので意外ときれいに見えます。

/pokemon_card の実装

こっちが正直ちょっと泥臭い実装になりました。

Bingの画像検索をスクレイピングしてカード画像を取ってくる仕組みなんですが、「ポケモンカードっぽい画像」を選ぶ必要があって。適当に検索結果の1枚目を使うと全然関係ない画像が来たりするんですよね。

そこでカードのアスペクト比(63:88)を使ってフィルタリングするようにしました。実際の画像ファイルをダウンロードしてバイナリを読んでサイズを取得して、縦横比がカードっぽければOKという判定です。PNG・JPEG・GIF・WebPそれぞれバイナリのフォーマットが違うので、マジックバイトを見て分岐させてます。

正直「外部ライブラリなしでここまでやるか」とは思ったんですが、Claudeに「画像サイズをバイナリから読むやつ書いて」って言ったらさらっと書いてくれたので結果的にそうなりました。

もうひとつハマったのが、discordrbの send_message ではファイル添付ができないこと。スラッシュコマンドのフォローアップとして画像を送るには、Discord Webhook APIをmultipart/form-dataで直接叩く必要があって、ここは自前でリクエストを組み立てています。ライブラリが抽象化してくれてると思ったら意外と素の部分が残ってたりするんですよね。

Claude Codeとの作り方

今回はほぼ全部Claude Codeと一緒に書きました。「こういう機能が欲しい」とざっくり伝えて、生成されたコードを読んで「ここ変えたい」「こっちの実装のほうがいい」と会話しながら進める感じです。

特に良かったのが、自分では思いつかないアプローチを出してくれること。バイナリパースとかmultipart組み立てとか、正直自分ひとりだと「外部ライブラリ使えばいいや」で終わってた部分を、標準ライブラリだけでシュッと書いてくれました。

コードを書く量はめっちゃ減ったんですが、なんというかコードを読む量は変わらないというか、むしろ増えたかもしれません。生成されたコードを理解してレビューして、自分の意図と合ってるか確認する作業は全部自分でやるので。それはそれで良い時間だったなぁと思ってます。

デプロイ (Fly.io)

Dockerfileを書いてFly.ioにデプロイしました。Botなので常時起動が必要で、Fly.ioは無料枠でも小さいコンテナを動かし続けられるのでちょうどよかったです。

fly launch で雛形を作って、Discordのトークンを fly secrets set TOKEN=... で渡すだけで動きました。意外とあっさりでした。

おわりに

「Discord Botを作りたい」と思ってから実際に動くものをデプロイするまでが、Claude Codeのおかげでかなり短縮できた気がします。詰まるたびに聞けばいいので、知らない領域でも手が止まりにくいんですよね。

もしDiscordサーバーでポケモンの話をする機会があればよければ使ってみてください。コードはそのうちGitHubに上げようと思ってます。

ていうのを全部claudeに書かせました。

この記事をシェア: