Discord-Slack連携Botで業務効率化にチャレンジしてみた
🌟 はじめに
みなさん、こんにちは!仕事や研究でDiscordとSlackの両方を使っている方、必見です!
今回は、情報共有を効率化するために作った連携Botの開発記録を共有したいと思います。
こんな悩みありませんか?
「あれ?その連絡Slackだっけ?Discordだっけ?」
「重要な連絡、見逃してた...やばい」
「同じファイル、両方にアップロードするの面倒だな...」
私も同じ悩みを抱えていました。そこで、「両方のツールを連携させれば解決するのでは?」と思い立ち、Botを開発することにしました!
導入効果がスゴイ!
実際に使ってみたところ...
📈 数字で見る改善効果
- 情報共有の手間が半分に!(作業時間50%削減)
- 重要連絡の見落としがほぼゼロに!(90%減少)
- ファイル共有がラクラクに!(作業効率2倍)
(あくまで個人の感想に過ぎないですが💦)
💪 このBotでできること
1️⃣ 完全自動の情報同期
- Discordの投稿が自動でSlackに!
- Slackの投稿が自動でDiscordに!
- 画像や文書もラクラク共有!
2️⃣ その他便利な機能も満載
- arXivから論文をサクッと検索
- スケジュール管理も楽チン
- 最新技術ニュースを自動配信
🎯 開発の動機
-
情報共有の一元化
- Slack派とDiscord派の分断
- 重要な情報の見落とし防止
- ファイル共有の効率化
-
業務の効率化
- 論文情報の一括管理
- スケジュール共有の簡易化
- ニュース情報の自動配信
💡 主な機能と工夫点
コミュニケーションを改善するために、特に以下の3つの機能に力を入れて開発しました。
それぞれの機能について、実際のコードと共に解説していきます。
1. メッセージ同期
「今どっちのツールに投稿したっけ?」という悩みを解消するため、
Discord⇔Slack間でメッセージを自動で同期する機能を実装しました。
# Discord → Slack
async def send_to_slack(message, user, channel):
blocks = [
{
"type": "header",
"text": {"type": "plain_text", "text": f"From Discord #{channel.name}"}
},
{
"type": "section",
"text": {"type": "mrkdw", "text": message.content}
}
]
await slack_client.chat_postMessage(channel=SLACK_CHANNEL, blocks=blocks)
工夫点
- メッセージの重複送信防止
- 絵文字リアクションの同期
- メンションの相互変換
こんなことができます!
- 📱 Discordで送信→Slackに自動転送
- 🔄 絵文字リアクションも同期
- 👥 メンションも自動で変換
- 🚫 ループ防止機能付き
2. 論文管理機能
研究者向けに、arXivの論文を簡単に検索・保存できる機能を追加しました。
キーワードを入力するだけで、関連論文をすぐに見つけることができます。
@bot.tree.command(name="arxiv_search")
async def arxiv_search(interaction: discord.Interaction, query: str):
url = f'http://export.arxiv.org/api/query?search_query=all:{query}'
# キーワードと簡単コピー用IDを表示
keywords = [f"🔑={kw}" for kw in query.split(',')]
工夫点
- キーワードの視覚化
- IDの簡単コピー機能
- お気に入り論文の永続化
使い方の例
-
/arxiv_search AI machine learning
と入力 - 検索結果から気になる論文のIDをコピー
-
/arxiv_save [ID]
で論文を保存 -
/arxiv_list
で保存した論文を一覧表示
3. ニュース配信
毎朝の最新技術ニュースをチェックする手間を省くため、
自動でニュースを収集・配信する機能を実装しました。
class NewsService:
async def fetch_news(self):
if not articles:
return self.get_default_articles()
return articles[:5] # 最大5件に制限
工夫点
- エラー時のフォールバック
- デフォルトニュースの用意
- 自動投稿機能
ニュース配信の特徴
- ⏰ 毎朝9時に自動配信
- 🎯 AIや技術関連に特化
- 📱 スマートな表示形式
- ⚠️ エラー時も代替表示で安心
🛠️ 技術スタック
「なぜこの技術を選んだの?」という方のために、
採用した技術とその理由を説明していきます。
フレームワーク・ライブラリ
技術選定のポイント
- discord.py:安定性と豊富な機能が決め手
- slack_sdk:公式ライブラリで信頼性が高い
- aiohttp:非同期処理で高速化を実現
データ管理
- JSON形式でのデータ永続化
- ファイルベースの軽量設計
- 非同期処理の活用
🔧 実装上の工夫
開発中に直面した課題と、その解決方法をご紹介します。
特に以下の3点に注力しました。
1. エラーハンドリング
APIリクエストの失敗やタイムアウトに備えて、
しっかりとしたエラー処理を実装しています。
try:
articles = await asyncio.wait_for(
news_service.fetch_news(),
timeout=15.0
)
except asyncio.TimeoutError:
await interaction.followup.send("タイムアウトしました")
2. 非同期処理
複数の処理を効率よく行うため、
非同期処理を積極的に活用しています。
-
aiohttp
を使用した効率的な通信 - タイムアウト制御の実装
- メモリ使用量の最適化
3. ユーザビリティ
ユーザーが迷わず使えるよう、
UIとUXにこだわりました。
- 直感的なスラッシュコマンド
- エラーメッセージの親切な表示
- チャンネル制限による秩序維持
パフォーマンスの改善例
- ⚡ API要求の並列処理
- 🕒 タイムアウト制御
- 📊 メモリ使用量の監視
使いやすさへのこだわり
- 📝 シンプルなコマンド体系
- ⚠️ わかりやすいエラー表示
- 🔒 チャンネルごとの権限管理
📈 今後の展望
-
機能拡張
- GPT-4との連携
- 進捗管理機能
- 自動論文要約機能
-
改善点
- パフォーマンス最適化
- UI/UXの向上
- エラーハンドリングの強化
🎉 おわりに
本プロジェクトを通じて、コミュニケーションがよりスムーズになりました。
今後も機能改善を続けていく予定です。
プロジェクトに興味を持っていただけた方は、ぜひGitHubをご覧ください:
Lab Migration Bot
Discussion