はじめに
数分置きに Google Sheets ドキュメント記載の URL に HTTP リクエストを飛ばすことで死活監視を行い、Discord の特定のチャンネルに概要、変化のあった URL をポストする Discord bot を作成しました。
freelancer.com のコンテスト(コンペのようなもの)に提出したものですが、他の方が選ばれたのでここに供養します。
提出物(1枚の画像と説明)はこちらから確認できます。
Entry #13 by arukuka for Lightweight Discord Link Monitor | Freelancer
動機
最近は Unity で簡単なゲームの一部のシミュレーションを作ったのですが、趣味でもっとコード書きたいから何かやりたいなあと思い色々漁った結果、このコンペはまず手を動かすことができるので取り掛かりました。賞金も獲得するぞ〜〜。
また、Discord bot が Google Sheets を読み(書き)するものは作ったことがあるので、 自分にもできそ〜くらいの気持ちです。
よかったことなど
技術要素
- httpx パッケージを用いて非同期の API を活用できた
- async あまり分からずだが便利。強い
- aiohttp の方がパフォーマンスが良い、という話も聞いたがパッケージの選択は適当。開発速度重視
- セマフォは存在のみ知っていたが、並列数を制限するのに使えることが分かった
- Google Sheets ドキュメントは公開されている場合 CSV エクスポート API が生えていることが分かった
- Docker の Python イメージをコンテナで動かす際に、標準出力をすぐにフラッシュさせるには以下の記述が必要ということが分かった
- ロガーを使って標準エラー出力しろという話はあるが、、、
environment: - PYTHONUNBUFFERED=1
- (Claude Codeくんに書いてもらっていて、discord.py 特有の知識になるが)Embed ポストはやっぱり bot の特権。かっこいいことが分かった
- Gemini くんに相談、骨組みを作ってもらったが playwright の存在を教えてもらった
- 使ってみたい(1 vCPU, 1 GB RAM でヘッドレスブラウザーを並列に動かすのは無理でしょと最初から検証もせず諦めてしまった)
思いの丈
他の方との差別ポイントとして
- 指定の動作環境で実際に動くことを確認していることを強調した(検証に$0.02かかりました)
- 希望の上限である 5000 の URL が上記動作環境で(ローカルサーバーに対してだが)余裕を持って完了することを強調した
- (discord.py 様々だが)200 URL が一度にステータスが変更になってもポストが正常に行われることを強調した
- オプションとしてクローズドな Google Sheets ドキュメントに対してもアクセスできるようにした
- 説明文章に上記含めてその他強みを記載した
- AI で生成されていないスクリーンショットを利用した
ので自信はあったのですが、無念です。
Claude くんもかっこいい画像作ってくれたのに、ごめんね(HTML, CSS で構成してくれて、zipでくれと言ったらくれました。すごお)。
どのコンテストもそんなものなので、そういうものなのでしょうが賞金が ₹1000 INR。大体 1700 円くらいです。安い。。。
経験したことがあったので調査はそこそこにでしたが、実装、検証に計 1 日程度はかかってしまいました。おせえええ。
おわりに
技術的に新しい発見はあまりなかったものの、久しぶりにコードが書けて楽しかったです。
今後はまた Unity で別のシミュレーション作ったり、資格勉強したりしたいなあって思っています。



